8.5 全链路压测平台
天猫双11活动从2009年首次举办,到今天已经发展成为全球当日交易金额和订单数量第一的网络购物盛会,天猫双11当天所引入的访问流量以及生成的订单处理量对于淘宝、天猫的系统架构和应用设计提出了巨大的挑战。每一年,大量的阿里技术员工花费最大的精力就是为了在天猫双11的当天,平台能够平稳顺利地支撑好这一网购盛会。
但坦白说,在2013年双11之前,整个平台没人能确保平台能万无一失,特别是面对11月11号0点刚到时的瞬间访问洪流。为什么没办法真正做到万无一失呢,最重要的一点是没办法让整个平台在双11之前经受到双11当天那样体量和完整交易链路的请求,很多双11之前的准备工作只是对今年双11可能的最高峰值进行服务器资源的配置,即前面提到的一系列限流降级等平台保护措施;容量压测又仅仅是基于单机的服务处理能力,对应的容量规划也是针对单个应用去评估;全面细致的线下压测,即在搭建跟生产环境几乎同样配置的预生产环境中进行各种模拟压测,这样的线下模拟压测确实能够发现一定的性能问题,但这样的测试跟双11当天所产生的业务链路覆盖度以及数据请求的多样性是完全无法比拟的;此外,在机房、网络、中间件、存储等一系列环节同样充斥着各种不确定性。正是因为这些原因,所以要平台真正的为像双11这样的大促活动做到平稳支持确实是一件非常不容易的事情。
为了真正彻底地解决这个难题,阿里巴巴在2013年双11准备过程中开始了称为全链路压测的工作,经过3年的发展,已经沉淀成为一个业界领先的全链路自动压测平台。该平台在过去一段时间内很少对外宣传,称得上是过去几年阿里巴巴集团针对天猫双11自主研发出的一项黑科技,在这里给各位读者做一个简要的介绍。
全链路压测是阿里全系统每个环节都参加的双11实战演习,主要对零点峰值流量进行评估,以及对网站承压能力进行测试,是双11前为系统查缺补漏的重要一环。全链路压测平台通过应用系统改造使线上环境可以同时处理正常流量和测试流量,以支持线上不影响正常用户访问的集群读写压测,获得最真实的线上实际承载能力数据。要实现全链路压测,涉及的产品很多,包括网络、应用、中间件、数据库、安全、数据等都需要改造,涉及的应用范围很广,涵盖核心交易链路的上百个应用。所以全链路压测平台的诞生涉及了大量人力资源的投入和配合,目前成为集团大促备战最重要的武器。下面介绍这个平台。
1.基础数据抽取
全链路压测的目的在于模拟双11,模拟的真实性尤为重要。基础数据(买卖、卖家、商品等)的构造是真实性保障的重要一环,为了模拟尽可能真实,全链路压测以线上数据为数据源,进行采样、过滤和脱敏,作为全链路压测的基础数据,数据量与线上数据保持同一个数量级,在数据库的sequence id上进行区间隔离。
2.链路与模型构造
全链路压测的链路代表要压测的业务范围,同一条链路需要构造海量的参数集合,代表不同用户的不同行为。链路范围、链路的访问量级、链路的参数集合、基础数据的特性一起构造了压测的业务模型。链路与模型的构造对压测结果的影响同样至关重要。
3.链路验证
在全链路压测平台的诞生阶段,链路验证耗费了压测项目组大量的时间和精力,电商业务具备复杂的业务特性,有上百条链路,每一条链路都需要确保能够让全链路压测引擎跑通,好在这是个一次性的工作,跑通以后出问题的概率不大,全链路压测平台也将链路验证功能集成到平台当中,能够自动化完成对压测链路的验证。
4.业务改造
全链路压测有不少地方需要在业务系统针对压测流量进行相应改造。比如压测链路的重复执行:全链路压测通常会进行好几个小时,这一特性要求链路能够被重复执行。实际情况当中,我们有不少链路并非是幂等的,需要针对存在这一特性的链路做专门的压测流量改造。再比如下游写流量的拦截、防止污染BI报表和线上推荐算法等场景都需要在业务系统进行相应改造。类似这样的改造点,在全链路压测早期时代非常多。
5.数据平台
数据平台是全链路压测的数据基地。由数据的准备、链路的构造、模型的构造等一系列重要模块构成,随着全链路压测的不断演进,数据平台沉淀了一系列自动化和智能化的基础设施,大幅提升全链路压测数据准备的效率和模型精确性。
6.流量平台
流量平台是全链路压测的CPU,主要由两大部件构成:
·全链路压测操控中心,进行压测的配置和操控、数据的监控以及对压测引擎集群的管控。
·压测引擎,由控制台统一管控,部署在外网CDN集群,进行登录、session同步,发送各种协议的压测请求、状态统计。
7.影子表
数据的隔离是全链路压测诞生阶段的一大难题。全链路压测的链路有读有写,并且在线上进行,为了不污染到线上的正常数据,全链路压测在同一个数据库的实例上对数据库表建同样结构的影子表来进行数据的隔离。
8.中间件改造
全链路压测的流量通过在链路上带上特定的压测参数进行区分,如果缺乏相应中间件的支持,在调用到下游系统的时候,压测标志就丢失了。因此需要所有中间件的协议都支持对压测流量的识别,使得压测标识能够随着调用传递下去,使得下游的应用、基础中间件和存储都能够识别压测流量。
9.安全机制
全链路压测的安全机制分两层:第一层是安全的监控和保护,建立非法流量的监控机制,正常用户访问不了测试数据,测试账户也访问不了正常数据,防止数据错乱;并且设置压测引擎集群的白名单,防止恶意访问;第二层是对压测流量的安全过滤,针对压测流量放松安全策略,使得压测流量不被判别为攻击流量。
全链路压测诞生之后,很快就成为集团大促备战最重要的武器。每年在大促之前,都必须要经过几轮全链路压测,在历年的全链路压测过程中,提前暴露了网络、应用、中间件、存储各个环节的诸多问题。
随着后期全链路压测平台在自动化以及能力开放方面的改善,已经很好地实现了大促自动化备战,沉淀了一套自动化、系统化的基础设施和流程,能提升整体备战效率,大大缩减了大促准备环节的人力、时间和机器成本。大促自动化备战串联了备战环节的离线节点,从全链路压测链路模型的自动计算、全链路数据准备和流量发送的无缝衔接、应用容量的弹性伸缩、自动化的预案执行和验证等多个维度,使得整个大促备战更加高效和精准,将阿里巴巴在大促稳定性保障能力提升到一个崭新的高度。
