热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

系统架构_腾讯大牛带你了解系统架构上的异常

对于测试同学来说,设计及执行异常场景的用例是平时工作中非常重要的一部分,因为只关注正常流程的话,那么很多情况下隐藏的缺陷并不能被完全的发现。很多同学经常在

对于测试同学来说,设计及执行异常场景的用例是平时工作中非常重要的一部分,因为只关注正常流程的话,那么很多情况下隐藏的缺陷并不能被完全的发现。

很多同学经常在上线之后感到惴惴不安,心里很没底,哪怕上线之前测试的再充分,都会有这样的感觉。这是因为我们很难预见到线上系统会出现哪些我们所没有覆盖到的异常场景。

异常场景大致可以分为下面这几类:

一、业务上的异常流程

比如正常的业务流程是用户先操作步骤1再操作步骤2,但是用户偏偏先做步骤2再做步骤1。因为测试同学在执行测试时,往往是对被测产品有一定的认识的。既然对被测有所了解,甚至大部分情况是非常了解,这样一来就会对被测产品的设计是有一定的认同感的,就会先入为主的认为用户一定会先做步骤1再做步骤2,这样就会忘记验证异常的场景,造成缺陷遗留到线上,产生了不太好的后果。

所以一些有经验的测试同学会站在用户的角度上去设计测试用例。因为用户的行为永远是千奇百怪的,所以有时候我们确实要设计一些逻辑上看上去不太合理的用例,设计这些用例时往往还会伴随着 “靠,竟然有这种操作”的惊叹,这种惊叹用例往往是很有价值的,能发现程序设计或者是产品设计上的漏洞。

永远不要相信用户的输入,永远不要认为用户的操作是感性合理有章可循的。抱着怀疑的态度去测试往往能产生意想不到的效果。

二、操作上的异常

这种异常可能会比较隐蔽。比如在电商系统生成订单的时候,用户连续点击了n次提交按钮,导致产生了n个订单,这显然是我们不想看到的结果。因为用户行为的随机性,有一些操作我们真的是很难想象到,我们只能尽量借助于monkey等方式进行一些混沌测试,毕竟猴子比用户更加的不可控。

三、架构上异常

很多测试同学不懂架构却要为架构背锅,这大概是不合理的吧。

在测试同学的能力模型里,业务能力的加点应该是最高的,技术能力和架构能力的技能点往往是少加甚至是不加的。如果你不需要为架构背锅,那么不了解架构应该没什么大问题,但如果线上问题的锅基本上就是你的锅,那么懂一点架构起码可以防身辟邪,多少是有用武之地的。

架构的异常场景是我们在设计用例的时候很难想象到的。因为你没办法想象一个在你的认知里根本不存在东西究竟是什么样子,这比叶公好龙和盲人摸象更加的虚无缥缈。如果你的意识里系统架构都不存在的话,那么你怎么知道架构在什么情况下会出现异常呢?

举个简单的缓存的例子,在我们的系统架构中,缓存是非常常见的中间件,一些需要频繁操作数据库去读写的数据我们可以放在缓存里以加速访问和存取速度。不过缓存天生有一些异常场景。

比如我们把一些数据放到缓存里,但是用户在访问系统的时候这部分数据可能用到的很少,大部分的用户请求可能还是直接读取数据库,造成数据库压力过大,系统整体性能很差甚至崩溃。这就是缓存命中率低的场景,这种场景我们比较难设计业务用例去覆盖,只能对其进行专项测试和优化。

另外系统在刚上线的时候缓存可能是空的,这就导致用户的请求全部击穿了缓存直接到了数据库,造成数据库崩溃,系统不可用。这就是缓存没有预热,或者是系统冷启动的问题,这种问题应该是常识,是不需要测试就能想到的,但前提是我们要对系统架构有一些了解才可以。

还有就是如果系统频繁对某个具体key值的缓存做读写,那么该key所在的缓存实例可能就会过载,造成整个缓存集群性能下降,这就是热点key的问题,也应该是不用测试就能想到并提前防范的。

不过缓存的过期时间和更新策略跟我们的业务相关性还是比较大的,是可以在设计的阶段就想好,然后在测试阶段去验证的。

从上面可以看出,如果你不知道系统架构里有缓存这样一个东西,那么万一哪天缓存出了问题造成了线上问题,那这个莫名其妙的锅很可能对你产生巨大的降维打击。领导一句你为什么没有测出来,你很可能连辩解的理由都解释不清楚。

综上,异常场景往往是我们测试的重点,业务异常和操作异常是大家可以想象到的,不过架构上的异常大家往往难以名状,出了问题却又有苦难言。所以多学一些架构知识应该是有好处的,有些问题其实可以提前防范和规避,不需要在上线之后惶惶不可终日的。

以上,希望对你有帮助,有被帮助到的朋友欢迎点赞,评论罒ω罒


推荐阅读
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文深入探讨了 Redis 的两种持久化方式——RDB 快照和 AOF 日志。详细介绍了它们的工作原理、配置方法以及各自的优缺点,帮助读者根据具体需求选择合适的持久化方案。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 福克斯新闻数据库配置失误导致1300万条敏感记录泄露
    由于数据库配置错误,福克斯新闻暴露了一个58GB的未受保护数据库,其中包含约1300万条网络内容管理记录。任何互联网用户都可以访问这些数据,引发了严重的安全风险。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • MySQL 高性能实战教程
    本课程深入探讨 MySQL 的架构、性能调优、索引优化、查询优化及高可用性等关键领域。通过实际案例和详细讲解,帮助学员掌握提升 MySQL 数据库性能的方法与技巧。 ... [详细]
author-avatar
海峡整形美容医院少校
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有