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

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

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

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

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

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

一、业务上的异常流程

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

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

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

二、操作上的异常

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

三、架构上异常

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

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

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

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

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

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

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

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

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

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

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


推荐阅读
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • 如何找到并加速缓慢的代码,提高性能
    本文讲述了如何找到并加速缓慢的代码,提高系统性能。作者通过优化内部循环、利用多处理器运行内部循环以及减少内部循环运行次数等方式来提高代码的执行效率。以一个游戏开发中的案例为例,作者介绍了如何通过调查和排查问题,找到导致帧率下降的设计缺陷,并进行修复。文章总结了优化代码的关键点,并提供了一些实用的方法和技巧。 ... [详细]
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社区 版权所有