我们都知道业务发展有可能是非常快速的,系统爆发性增长的时候,是会很开心,但也会遇到很多的挑战和问题。比如数据库崩了,比如缓存被击穿了,比如服务器cpu已经满负载了,比如网卡被打穿了。
这时候很多没实战经验的所谓的架构师和键盘侠会跳出来说:这有什么?扩容就好了呀。但是很遗憾,实际情况中很多场景下扩容并解决不了问题,或者说我们完全不知道应该针对哪些组件进行扩容。
所以我们不能听键盘侠的,测试研发同学对于系统水位还是得有非常清晰的评估,以及对于即将到来的爆发性增长有着胸有成竹的信心。基于这个,我们今天聊聊系统容量评估以及系统压测这个事情什么时候应该做,应该怎么做,成本在哪里,会有什么收益。
希望你们都能在遇到真正的爆发增长的时候,能够像题图一样,睡个安稳觉。要是你面对业务爆发性增长心理完全没有任何压力,那你可以关闭这篇文章了。可能你的层次已经超过这篇文章的受众,也可能,你完全没有意识到可能会有什么问题,就等着出问题背锅就好了。
什么叫压测呢?就是我们不知道功夫和尚是不是头铁,头究竟有多铁。我们先搞10块砖头一起砸下去。咦居然没事。那我们再搞20块砖头一起砸下去看看有没有事。看看和尚啥时候被砸晕。慢慢施压,这就是压测。
压测什么时候应该做
压测是一件不便宜的事情,费人费时间费钱。所以我们应该在做压测之前要评估一下,我们为什么要做压测,为什么要在现在做,要什么样的范围内做。没有针对压测清晰认识和评估的时候,先不要搞压测这个事情了。
一般来说,我们会选择在 大促这种爆发性流量前,或者在业务已经规划好要开始扩展之前 ,根据不同的范围,完成一到三轮的压测。
压测之前要界定范围,本次是针对单模块单接口的压测,还是针对单系统的压测,还是针对单业务链路的压测,还是针对复杂业务的全链路压测。每个范围需要付出的成本基本都是指数级增长的,所以一定要考虑清楚,究竟是需要什么范围的压测。
即使是需要全链路压测,也会提前针对更低一级压测的容量的评估以及压测,因为如果低一级都不能压测通过,高一级很可能也是一开始就拉稀,浪费时间。
压测应该怎么做
压测也算是一个工程问题,可以分为以下五个阶段,我一个一个讲。
1、压测方案评估。
当前系统的负载是怎样的?
qps(每秒查询数) 是多少,基础数据量是多少?
预估的目标qps和基础数据量分别是多少?
我们有多少接口需要压测?涉及哪些团队?
目标接口是否具有可压测性?
以怎样的方案进行压测?是http接口还是rpc接口还是消息队列?
使用什么工具进行压测?(比如jmeter)
怎么观察目标系统?(比如kibana看板或者collectd + InfluxDB + Grafana)
最终产出完整的压测方案,与关联的同学一起评估整个方案,不要只跟兄弟团队说啊我们要压测,手上没方案就不要说话了。
2、压测系统改造。
怎么识别压测流量?(一般使用 OpenTracing 框架进行全链路压测标记传递)
压测数据怎么与线上数据隔离?(根据流量标记,引流到单独库或引流到同结构的影子表)
压测是否可重复跑?(压测一般需要重复执行,所以要把系统改造成可重复执行)
是否需要针对压测流量进行特殊逻辑改造?(比如不发消息队列,比如关闭缓存)
3、压测数据准备。
针对所有准备的接口以及评估的数据量集,进行接口请求数据响应数据,以及基础数据量的准备。接口参数比较好理解,基础数据量怎么理解?比如现有客户10万,目标是200万用户,那我们就需要在我们的目标查询库里,按照正常的流程创建出200万个用户,以达到基础量已经有200万的规模。这样系统和数据库才会有比较可靠的表现。
4、压测试运行。
方案做好了,系统改好了,数据也准备好了。尝试小量级先尝试一下下,看看整个压测的请求、链路、结果是否符合预期。
5、压测记录及复盘。
全部准备好就可以使用各种工具进行压测了,一般会根据目标系统容量进行均匀或者快速的步进,这个自己把握。比较重要的是在每个步进的时候都要等到系统表现比较稳定的时候对系统状态进行记录,并评估是否要继续对系统进行施压。如果系统负载已经比较高了,但是并没有发生错误,可以尝试持续观察一下。在压测完成后,对压测结果进行评估和验收,确定是否符合预期。并对整个压测过程遇到的问题进行记录,对下一次的压测进行指导。
压测的成本在哪里
比较清晰的成本有这么三个。
1、人力,至少需要占用一个开发一个测试的全部时间。
2、时间,这个过程系统不可以进行大改造,大改造压测等于白压。
3、机器,施压机器以及目标机器都需要占用一大段时间。
压测会有什么收益
1、心里踏实,在预估范围内,基本不会出什么大问题。
2、针对系统所需要的资源有更清晰的评估,对于成本核算来说有辅助性作用。
3、针对系统隐患有非常高发现作用,链路上任何一个脆弱的环节都会在压测中暴露出来。
4、所有的结论比较科学,不是拍脑袋拍出来的,牛逼也比较好吹。
其实主要还是希望心理踏实。希望你们都能在稳定的系统里翱翔,不要像我之前,整宿整宿睡不着觉,系统水位不清晰,不知道能不能支持到业务的扩展。我心里慌啊
共同学习,写下你的评论
评论加载中...
作者其他优质文章