注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

逍遥子 曰:

得失失得 何必患得患失 舍得得舍 不妨不舍不得

 
 
 

日志

 
 

[原]性能测试、 障碍条件和回滚  

2016-12-14 20:39:41|  分类: 架构设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
第17章 性能测试 
1. 性能测试是指把负载和用户需求施加在系统上,以测量其相应时间和稳定性的过程,它是为了验证应用能够满足预期的性能目标;一般需要关注响应时间、吞吐量和资源利用率这三类指标; 
2. 性能测试的第一步是建立标准,没有标准的测试是没有意义的; 
3. 性能测试的环境应该与研发、QA和准生产等环境分开;之所以要把性能测试环境独立开是因为性能测试需要对整个系统施加压力,如果系统中跑着其他的程序,那么其他程序不仅影响性能测试的结果而且性能测试也可能让其他程序的工作受到影响,另外性能测试一般都需要测试很长时间,例如24小时,连续压测的7*24小时等等,隔离开的环境可以确保在测试期间都不受其他因素的影响,以确保测试结果的正确、有效性; 
4. 性能测试的环境应尽可能与生产环境一致,性能测试就是为了评估系统在生产环境的最大承载能力,如果它的测试环境与生产环境差别比较大,那么测试就没有多大参考性了。 
5. 在分布式系统中,系统的承载能力和其部署的服务数量有关系,因此在分布式的系统中,只需要测试出系统的最小完整部署版的性能即可;根据个人经验,在分布式系统中,每个子模块的性能都要单独测试,然后再测试整个系统的性能,这样就能摸清楚整个系统的瓶颈点在哪个模块? 
6. 性能测试时如何确定测试哪些项?系统的测试指标可能有非常多,书中建议,在性能测试时可以采用二八原则,选择能代表系统80%功能的那20%的测试项即可,这里理解起来比较抽象,具体而言就是测试不可能覆盖所有的方面,尤其是性能测试,所覆盖的测试范围会更少,建议让研发、设计人员参与测试用例的设计,从服务中选择重要、常用的功能进行测试; 
7. 选择哪些服务作为性能测试的对象?(1)重要的、关键的服务;(2)风险大的服务;(3)潜在的瓶颈点服务; 
8. 预估系统性能是准备性能测试环境的重要部分,我们通常都需要先预估系统的最大性能然后再申请压力的主机、网络、存储等资源; 
9. 性能测试与快速迭代、持续交付的影响,在快速迭代、持续交付的研发模式中版本迭代的速度非常快,如果每个版本都做性能测试,尤其是长时间性能测试,那么版本迭代速度必定会受到影响,因此,在做性能测试的时候要对版本修改的内容进行详细审查,如果改动的功能对性能影响较小,可以在发布多个版本时,统一使用最后一个版本进行性能测试。 
10. 性能测试的数据记录时要注意以下几点: 
(1)包括测试的环境、开始时间、初始条件以及测试过程中的数据等等各种信息都要记录下来,这些数据不仅可以用于分析性能而且还可以保证测试能重复执行,这对后续复现问题来说非常重要; 
(2)在性能测试时需要做好程序的预热,预热过程中的数据不能算作性能测试的数据; 
(3)性能测试的数据应尽可能详细,越多越好,常见的指标包括响应时间、CPU负载(CPU的load average)、内存使用率、磁盘IO、网络IO等等; 
11. 性能测试要在系统的承载能力之内,超出了系统的性能极限之后的测试都是没有意义的; 
12. 书中给出的性能测试七个步骤: 
(1) 确定测试标准; 
(2) 准备压力测试环境; 
(3) 选择合适的测试服务; 
(4) 执行测试; 
(5) 分析测试数据; 
(6) 向工程师报告; 
(7) 必要的重复; 
根据个人经验,上面的过程好像有些繁琐且难以理解,平常的测试过程应该是这样的: 
(1) 确定测什么?包括测试谁?测试哪些指标? 
(2) 确定测试标准; 
(3) 准备测试环境; 
(4) 开始测试; 
(5) 分析测试结果; 
(6) 发出测试报告; 
13. 正压力测试与负压力测试,正压力测试时,通过逐步增加压力,以探测系统的最大承载能力;负压力测试通过相反的方式,一开始就施加超出系统的压力,然后逐渐减少压力,观察系统在压力降低时的恢复能力; 

第18章 障碍条件和回滚 
1. 高可用、可扩展服务的必要组成部分包括:有效的决策过程(确定一个事情做还是不做?)、设置障碍条件和回滚; 
2. 障碍条件是指在产品发布之前制定的一系列流程、标准,让某个重要的阶段的过还是不过有个标准、门槛,从而提升整个产品的质量;例如我们经常见到的:架构审查、代码走查、单元测试、性能测试等等,它们都是在软件研发过程中的重要阶段对当前阶段工作的审查,并为之设置门槛,只有当前的门槛过了才能继续走后续的流程;设置故障条件,能让我们提前发现问题、解决问题,从而将损害降低到最小; 
3. 回滚能力是指版本在任何时候都具备回退到上一个版本,并且可以正常运行。 
4. 回滚窗口是指应用版本发布多久之后,你才能确定当前版本不用回滚;回滚窗口很重要,因为在个别时候,由于软件架构、数据库表设计的改动,我们的版本发布不能做到回滚,这时候就尤其要关注那些无法回滚的版本,盯紧它们,让它们安全度过回滚窗口,后续的版本就可以以此版本为基础了。 
5. 服务禁用,在开发过程中如果调用到一个新的服务或者风险比较大的服务,就应该对这种服务做成可以开关控制的,一旦上线之后这些服务出现问题,我们就可以迅速关掉它们,让整个系统降级服务;
  评论这张
 
阅读(84)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017