双11备战“核武器”,白天态全链路压测技术大揭秘!

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 全链路压测诞生于2013年双11的备战阶段,是基于过去多年的压测和容量规划领域的探索和积累创造出来的新的压测方式。全链路压测通过对应用系统进行改造使线上环境可以同时处理正常流量和压测流量,以支持在线上环境进行不影响正常用户访问的集群读写压测,获得最真实的线上实际承载能力数据。

屏幕快照 2020-03-20 下午3.54.45.png

作者|肖武(追溯)
出品|阿里巴巴新零售淘系技术部

前言

▐ 全链路压测诞生

全链路压测诞生于2013年双11的备战阶段,是基于过去多年的压测和容量规划领域的探索和积累创造出来的新的压测方式。全链路压测通过对应用系统进行改造使线上环境可以同时处理正常流量和压测流量,以支持在线上环境进行不影响正常用户访问的集群读写压测,获得最真实的线上实际承载能力数据。

▐ 压测提效探索

全链路压测从诞生开始,在后续持续的演进中,有两个重要的方向:一个是模型评估的精准化和智能化,另外一个方向是全链路压测的提效。在过去的大促备战中,每年都需要经历较多轮的全链路压测,系统才达到最终的状态,整个过程的人员投入以及工作量还是比较大的。

在对全链路压测中的问题进行复盘的时候,我们发现了大部分的问题其实并不是一定要在全链路压测的时候才能发现,如果能够提前进行较大流量的预压测,大部分的问题都能发现和解决。因此压测前置的想法提了出来,我们需要把业务资源验收、上下游的依赖检测、问题修复、限流兜底验证等大量的稳定性验证工作前置。我们总结了过去两年为压测提效的办法:
屏幕快照 2020-03-20 下午4.04.58.png

阶段一主要是进行预发环境的性能CI,我们通过在预发环境进行单机或者小集群的性能压测,这种方式仅限于应用自身的单机性能的验收,无法对上下游链路进行完整的验收,且预发压测结果,也无法推导线上环境的容量是否足够。

阶段二主要是利用线上小集群,通过中间件的隔离技术,搭建线上环境的小集群,基于这个小集群环境进行全链路压测。但是这种方式也存在一些问题,比如环境准备比较耗时,另外因为环境比较小,压测流量也比较小,导致一些底层的问题,或者大流量下才能暴露的问题无法发现,对线上环境的容量也无法验收。

阶段三我们尝试了在线上环境进行较大流量的预跑,例如10%~30%目标流量的施压,这种方式,能发现一些压测模型的问题,但是和小范围压测一样,一些大流量下才能暴露的问题无法发现。

▐ 线上整单机房压测设想

过去的分阶段尝试,都是朝着一个目标:环境越接近真实线上环境,如果是直接线上的整机房最好,压测流量越接近目标值,压测效果最好。如果能把线上整机房直接拿来,按双11的目标进行压测,效果是最好的。于是我们确定了在白天态进行整机房,全流量的压测的新目标。

针对这个目标,我们制定了白天进行全链路压测的方案,我们给项目取了个名字:白加黑。先来介绍下什么是白加黑,简单点概括是: 白天把线上某个机房流量切零,然后在这个机房进行大促态全链路压测,预案验证,突击演练,破坏性测试等,和夜间的全链路压测进行互补。接下来介绍下具体的白加黑方案。

白加黑方案

▐ 前提条件

白加黑的方案,依赖系统多机房的部署模式,且系统具备容灾切流的能力,即任意机房出现故障后,流量能快速的切换到其他机房。利用容灾能力,通过切流这个操作,把某个机房流量切零,针对没有流量的机房进行全链路压测。目前淘系的核心应用基本全部实现多机房部署,从接入层->应用层>数据层,资源部署的示意图如下:
屏幕快照 2020-03-20 下午4.05.31.png
针对多机房的部署架构,如果要在白天态进行整机房,全流量的压测,我们要做到以下几点:

**流量隔离&路由
**
我们在进行容灾切流的时候,压测流量需要能够进入流量切零的机房,而且这些压测流量只在切零的机房内,不会路由到其他的线上机房,我们需要实现以下几点:

  • 压测机房的线上流量要切零(包括无线和H5流量),流量由线上其他机房承担,依赖系统的容灾能力。
  • 压测机房内的线上少量遗留流量需要纠偏到其他机房,避免这部分线上流量受到压测影响。
  • 压测流量在目标机房内路由,不受已有的针对线上流量的路由规则影响,从统一接入层,到应用层,到数据层整条链路实现压测流量机房内路由。

屏幕快照 2020-03-20 下午4.06.37.png

流量防逃逸

在对流量切零的机房进行大流量的全链路压测时,我们需要避免这些压测流量逃逸到线上其他机房,进而影响线上用户,为此需要从接入层->应用层->数据层整条链路上进行一些改造,来防止压测流量逃逸。
接入层对失败的压测流量不能FallOver到线上其他机房。

多机房部署应用调用下游如果出错,压测流量不能FallOver到其他机房。

屏幕快照 2020-03-20 下午4.06.59.png

线上流量优先

对于无法彻底隔离掉压测流量和线上流量的系统,需要有保障线上用户流量优先通过的能力,即出现流量超出预期的情况下,优先限流压测流量,保障线上流量通过。

屏幕快照 2020-03-20 下午4.07.18.png

大促备战提效

▐ 已实现能力

经过大半年的方案推进,目前我们已经实现白天切流压测的全部基础能力,并成功在大促中投入使用。

流量纠偏

针对核心多机房部署应用,开启流量纠偏功能,在目标机房流量切零后,把遗留的线上流量纠偏至正确的机房,在应用层避免这些线上流量受到压测影响。

自动化流量调度

针对多地域多机房部署模式,实现全自动化的机房间流量调度,在保证线上机房稳定的前提下,提供一个完整的机房可以用来验收。

整套流量防逃逸,压测流量封闭

实现了从接入层到应用RPC调用,到DB,消息,缓存的全套的压测流量防逃逸的基础能力,能够实现在目标机房高压态下,压测流量封闭在目标机房内,不会对线上其他机房造成影响。

提前预案指定机房推送,模拟大促态

实现了服务端在白天实现大促态下预案的执行和恢复。

白天态的线上突袭演练

对流量切零的目标机房,进行了多次的突袭演练,包括突发脉冲流量,故障注入等。

▐ 备战提效

2019年大促备战中,通过多轮白加黑压测,提前消灭了绝大部分阻塞性问题,类似往年双促压测期间的问题,90%在验收前全部解决。大促全链路验收压测非常顺利。最终2019年双11系统也平稳度过。经此一役,白加黑已成为大促稳定性备战又一利器。

未来展望

利用系统容灾能力,实现线上某个机房流量清空,只允许测试流量访问,在这样一个纯净,真实的线上正式环境,除了全链路压测,我们还可以做线上环境的预案验证,功能预演,破坏性测试,中间件演练,极大扩充了稳定性相关的验证,解决了预发环境验证&演练的局限性,同时也更真实。

今日话题

关于稳定性压测,你遇到过什么bug?
欢迎下方评论区分享~

We are hiring

淘系技术部依托淘系丰富的业务形态和海量的用户,我们持续以技术驱动产品和商业创新,不断探索和衍生颠覆型互联网新技术,以更加智能、友好、普惠的科技深度重塑产业和用户体验,打造新商业。我们不断吸引用户增长、机器学习、视觉算法、音视频通信、数字媒体、移动技术、端侧智能等领域全球顶尖专业人才加入,让科技引领面向未来的商业创新和进步。
请投递简历至邮箱:ruoqi.zlj@taobao.com

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
7月前
|
负载均衡 NoSQL 关系型数据库
性能基础之全链路压测知识整理
【2月更文挑战第16天】性能基础之全链路压测知识整理
321 11
|
7月前
|
存储 缓存 中间件
高可用之全链路压测
【2月更文挑战第30天】全链路压测是提升系统可用性的关键方法,它模拟真实流量和业务场景在生产环境中测试,确保性能、容量和稳定性。
|
SQL 监控 网络协议
《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.3 云上大型赛事系统调优(1)
《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.3 云上大型赛事系统调优(1)
154 0
|
监控 测试技术 UED
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(1)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(1)
304 0
|
域名解析 网络协议 数据可视化
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(2)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(2)
215 0
|
SQL 监控 关系型数据库
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(3)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(3)
207 0
|
存储 测试技术
《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.1 压力测试基本概念
《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.1 压力测试基本概念
165 0
|
SQL 监控 负载均衡
《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.2 云上大型赛事压力测试方法论(上)
《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.2 云上大型赛事压力测试方法论(上)
133 0
|
SQL 缓存 监控
《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.2 云上大型赛事压力测试方法论(下)
《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.2 云上大型赛事压力测试方法论(下)
184 0
|
测试技术 Linux
《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.3 云上大型赛事系统调优(2)
《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.3 云上大型赛事系统调优(2)
113 0