微博又双叒叕崩了,且看如何通过性能测试保证高可用?
随着国家卫健委发布消息,“返乡人员须持七日内核酸证明,返乡后居家健康监测14天,每7天一次核酸检测”等严格的防疫措施,打工人们也消停下来,选择了本地过年,今年的春运似乎也没有往年的热火朝天、如火如荼。然而打工人们却并不闲,不断啃着新浪微博一个又一个的瓜,郑爽张恒事件已经让微博的程序员们忙得不可开交了,紧接着又来了网易员工确诊阳性事件,正准备着核酸排查、居家隔离,张碧晨华晨宇事件再次把他们推上新一波加班,这次微博又双叒叕崩了。
经过程序员们加班加点,又是扩容机器,又是升级服务等错误,微博恢复正常了,吃瓜群众可以继续啃瓜了,然而作为互联网人,我们更需要考虑,如何避免此类问题再次发生?别等到除夕夜又来个**事件,别人在开开心心吃年夜饭,而互联网人依旧在打工。
这次新浪微博崩了的原因,很简单,就是访问请求超过了系统负载,在同一秒有巨量的用户请求过来,而服务器来不及响应,被请求打爆了,因此崩溃了。修复的措施也很简单,即通过增加服务器数量,让服务器可以处理更多的用户请求。那么如何衡量系统的性能呢?我们一般用这三个指标,响应时间、并发数、吞吐量来衡量系统性能。
响应时间,即请求发出到收到响应的时间,一般情况下,这个值都非常非常非常的小,微秒或毫秒级别,正常的网页请求时间一般在2s以内,超过2s之后,用户体验就不佳了,超过20s,用户无可忍耐,选择离开,因此响应时间是非常重要的指标。并发数,指的是同一时间能处理的用户请求数量。吞吐量,指的是单位时间能够处理的请求数,体现的是系统整体处理能力,比如每秒请求数HPS、每秒事务数TPS、每秒查询数QPS
了解了系统性能衡量指标后,我们如何去找到这些指标的值呢?很简单,就是性能测试,具体又可以分为负载测试、压力测试、稳定性测试。负载测试指的是,对系统不断的增加并发请求,增加系统的负载,直到系统的指标达到临界值。压力测试指的是,在超过系统安全负载的情况下,继续增加压力,直到系统崩溃,不能再处理任何请求,从而获得系统的最大承受压力值。稳定性测试,指的是在一定的压力下,系统能够稳定的运行时间,一般都是做7*24的稳定性测试。
一般来说,系统大部分时间都处于ab区间,当发生一些大事件时,系统的请求会增多,从ab区间变为bc区间,而爆炸性事件,则直接让系统的请求巨量增加,从bc区间变为cd区间,从图中我们也可以看到,在cd的时候,系统能处理的请求已经很少了,逐渐走向崩溃的边缘,在d点彻底崩溃。而通过性能测试,我们能找到系统的b、c、d点,提前做好应对措施,比如返回上一级页面,又或者是增加服务器数量等等。
那么如何进行性能测试呢?总的来说包含七部分,第一步前期准备、第二步环境搭建、第三步开发测试脚本、第四步准备测试数据、第五步执行测试、第六步分析结果与调优、第七步则是反馈跟踪。
在第一步前期准备中,我们主要是了解系统、分析需求、建立模型,在了解系统时主要关注系统的架构、开发语言、部署架构、操作系统数据库中间件参数;在分析需求时关注即是否有预期承载值,测试目标是针对哪些核心流程、处理多少请求、占用资源要求、响应时间要求;在建立模型时,主要关注数据来源于数据库日志或监控系统、系统负载吞吐量、系统压力高峰时期分布情况。
在第二步搭建环境,主要是准备服务器环境、测试机环境,测试机用于模拟用户请求,服务器环境用户模拟业务环境。在第三步开发测试脚本,主要是选择对应的测试工具(如LoadRunner或Jmeter),使用脚本模拟用户输入、增加检查点、增加数据收集与验证。
第四步则基于第三步的情况进行数据生成。第五步则开始执行测试,不断施加压力,监控业务系统的操作系统、网络、数据库各个层面的指标,比如CPU内存磁盘情况、网络发送接收包数量等。第六步与第七步,则根据测试结果进行分析,不断调整、测试、分析、反馈,直到拿到最终结果。
快要过年了,今年的一年也注定是不平凡的一年,谁也不知道会发生什么,而我们唯一能做好的就是提前做好准备,未雨绸缪。性能测试便是最好的手段之一,通过测试找出系统瓶颈,提前优化,避免系统宕机、不可用事件又双叒叕的发生。
推 荐 阅 读
AI课工场
人工智能也可以如此轻松好玩