线上压测
压测是大促保障非常重要的一环,目的就是为了摸底系统的整体容量极限。压测有两种方式:一种是线下压测,通过对线下集群的压力测试,根据线下测试的结果推算出线上集群的容量。这种方式一个最大的缺陷就是无法真实模拟线上环境,推算出来的结果往往离真实环境的容量值相差很大。所以,就有了第二种压测的方式——线上压测。线上压测的好处就是测试的目标就是实际承担大促流量的线上环境,所以真实性是最好的。
但是,要做到线上压测,挑战也是比较大的。这中间有几个问题需要重点考虑:第一,也是最重要的,就是要能保证进行线上压测的时候不影响正常的业务流量。第二,如何模拟大的流量。第三,如何和真实的大促流量进行拟合。
首先,要做到不影响正常的交易,首先需要做到流量的隔离。线上的压测分为两类。一类是测试内部的系统。这种情况下所谓的隔离,有两个方面需要考虑。第一,是流量的隔离。第二,是存储的隔离。流量的隔离我们首先对于压测的流量进行打标,可以用用户位,也可以用其他特殊的标,反正只要能和实际的流量进行区分就可以。同时我们在线程池中预留一定的比例留给正式流量。压测流量不会用到这部分线程,保证了压测的同时可以正常的处理业务。对于存储的隔离,通过对分库分表规则的改造,识别压测标,将压测的数据存储在特殊的分表中。这样即保证了和生产正式流量的环境一致性,同时也做到了存储在一定程度上的分离。
第二类是对外部系统,比如渠道的容量摸底。如果外部系统具备生产的压测能力,比如国内的渠道,我们可以通过蓄洪或者测试卡/账号的方式,模拟出大流量。如果外部系统不具备压测的能力,那只能考虑线下压测推线上容量的方式了。或者建立在大促过程中的容量保障监控体系来应对。
其次,模拟大的流量。由于现在大部分的线上应用都是根据用户或商户进行单元化或者分片的。所以,我们在压测之前,需要准备大量的“影子”用户和“影子”商户,通过模拟影子用户和影子商户的交易,进行压测的执行。同时,需要对一些外部的渠道调用进行 mock。如果看到的交易打的是压测标,渠道就会走到 mock 渠道中,根据交易中的信息进行直接的渠道返回,而不会真正进行外部调用。
最后,就是最难的了,就是怎么和真正的大促流量进行拟合。首先,这个需要有历史的大促流量的数据积累。根据历史的大促流量数据,分析不同的交易的比例、交易各阶段的漏斗、退款的比例等等。同时,历史的比例不等于今天的比例,业务是随时在变化的。所以,我们不但需要历史大促数据的积累,还需要日常的交易或者日常的小促的交易进行相应的仿真模拟计算。每次大促之后,需要将压测的流量和实际的流量再进行对比,分析出中间的差异,不断的优化仿真模拟算法。
总之,对于线上压测,通过历史大促和日常的数据进行交易的仿真模拟。通过影子商户和影子用户模拟流量。通过压测标区分实际流量和压测流量,同时通过线程池隔离和分表规则进行流量和存储的隔离。
版权声明: 本文为 InfoQ 作者【agnostic】的原创文章。
原文链接:【http://xie.infoq.cn/article/af28c713a0f2197393feffa73】。文章转载请联系作者。
评论