独家揭秘 | 阿里怎么做双11全链路压测?


阿里妹导读:全链路压测是阿里的首创,我们将从工作内容、操作过程、运行总结等多个方向来介绍下阿里内部典型电商活动(如双11准备),以给大家展示一个完整的压测流程,帮助更多的企业和用户更好的完成性能测试。

前言

关于性能测试的重要性及必要性已经是个老生常谈的问题了,现分别从技术角度和业务战略角度总结如下:

而性能测试的目的也就是为了解决大型营销活动中洪峰流量引起的系统表现不确定性,一个理想的营销活动周期应该是有如下闭环流程:

  • PS:1和2之间再加一个步骤。环境改造和基础数据准备。强调必须在生产环境。
  • 压测环境准备:需要复用真实的线上环境,压测结果和问题暴露才都是最真实情况。可通过压测流量全局识别、透传(数据进影子区域)。
  • 基础数据准备:以电商场景为例,构造满足大促场景的核心基础相关数据(如买家、卖家、商品信息),以线上数据为数据源,进行采样、过滤和脱敏,并保持同等量级。

可以看出,性能测试通过真实、高效的压测方式进行容量评估/瓶颈定位&解决,最终来保障活动稳定进行;每一个环节的内容都非常重要,以阿里双11活动为例,我们除了技术上的准备、执行、保障之外,还会有一些流程及分工细节。以下将逐一介绍。

关于流程及管理

阿里巴巴全链路压测从2013年到现在也已经是第7个年头了,在这7年中间我们不断的积累、总结、优化进步,从开始的200多人参与、通宵压测的大规模全员项目活动到后来仅仅几个人白天压测、更智能化的压测方式,这样一种大规模的项目活动,离不开有效的流程把控及分工管理。

阿里巴巴在多年双十一大促保障——全链路压测项目中,有着严格的流程把控及分工管理模式与经验,总结如下:

说明:该图中时间点为模拟时间点,仅做先后顺序的参考。

好的流程规划与管理,可以大大提升团队协作效率。叠加上工具平台的智能化功能,可以将参与的200人力通宵压测缩减至10人以内白天压测,有效的方案 + 充足的准备 + 靠谱的平台技术产品 = 成功的压测。

下面将结合主题系列前几次的文章,介绍下在数据准备、架构改造、流量安全策略(环境及流量隔离)、压测实施、问题定位分析这几方面,阿里巴巴在双十一压测这个项目上具体是怎么做的。

压测环境改造

数据准备的同时,需要考虑压测环境(即压测对象的部署环境)是哪里,不同环境就需要做不同的准备。

整个阿里经济体的压测环境,包括双十一压测,全部选择的是线上环境,此时需要评估如果要进行全链路压测,是否直接可以使用现有环境、同一个API多次压测是否会被拦截、是否会有脏数据影响、如果有影响应该如何改造避免等。以上这些问题总结下来即为两类问题:业务问题和数据传递问题。问题比较明确,我们就根据这两类问题来做逐一的改造。

改造分为2方面:业务改造和中间件改造,这些在内部全链路压测1.0 时代就已经完成了,对于外部客户来说,可以作为一个技术改造上的参考点。同时我们已经有成熟的产品化方案提供一站式的能力,免去复杂的改造和维护成本。

业务改造

业务改造即为了解决压测过程中的业务异常问题,或者压测请求无法正常被执行的问题。举例如下:

  • 流量区分与识别:压测流量和业务流量的区分,并可在全链路系统中识别出来;
  • 流量单一性问题:比如下单,同一个人执行一次下单后再重复执行就会失败;
  • 流量的限流拦截:如果日常有限制,需要改造为接入流量降级能实时生效调整配置;
  • 剔除压测数据对报表的影响
  • 动态校验
  • ......

业务改造涉及的内容无法一一穷举,需要根据不同的业务模型、业务架构及配置,一一梳理。一般梳理改造之后,后续所有新应用都按照规范去开发,每年的压测前进行基础的查漏补缺即可。

中间件改造

中间件作为衔接业务应用之间的组件,在压测中有个至关重要的功能就是将流量标识传递下去,一直到最终的数据库层面。虽然我们在13年开始,从核心应用使用到的中间件已经升级改造完成,中间我们踩过不少坑,诸如改造全面性、改造带来的业务代码修改成本、版本兼容问题等。

改造完成之后,压测流量的模型图可以参考如下:

环境的改造,需要结合业务场景具体分析、设计。云上高可用解决方案,提供了全链路压测解决方案的服务。

数据准备

大促活动确定之后,会对业务模型进行一次评审,即确定该业务模式对应的技术架构应用有哪些,需要做压测的业务范围有哪些、以及数据量级、数据形式是什么样的。所以数据准备包括准备业务模型数据和压测流量数据两部分。
数据的准备,主要分为两部分:业务模型的建立和基础数据的构造。

业务模型数据

业务模型数据,即压测的业务模型相关的数据,包括涉及到哪些API,这些API之间的压测量级是什么样的或者有什么样的比例关系等。业务模型的构造准确度,直接影响了压测结果的可参考性。

模型设计的目的主要是将业务进行采集并抽象成可执行的压测模型,并对各个子模型中的元素进行预测和设计,最终产生可以执行的压测模型。在双十一大促前,我们会确定好相关的业务,进行场景分类。

  • 已有业务场景:采集以往数据并做处理,作为预测数据,形成一个模型雏形,结合新的业务玩法,形成已有业务的模型;
  • 新业务场景:直接按照新的业务,模型配比,形成一个新业务模型。

最终会将两种业务场景类型进行组合,形成最终的终态业务模型。以下图作为示例:

在组装业务模型数据的时候,需要注意一些关键因素,比如修改具体的电商业务模型关键因素:

  • 1对N :上游业务一个请求对应下游业务接口是否会存在调用多次的情况;
  • 业务属性的比例:根据历史数据计算不同类型业务的比例关系;

业务模型组装之后,单一事务中的业务模型,应该是一个漏斗状的。而每层之间的漏斗比例,是根据不同的层级、不同的玩法、不同的规则会有不一样的比例关系。在一次大促活动中,这个比例关系理论上是不会变化的。漏斗模型参考如下:

业务模型在压测时对应的就是压测量级,淘宝大促用的全部都是RPS模式压测,即从服务端角度出发每个API之间是漏斗比例关系、能够很好地应用于容量规划上。商业化产品PTS(性能测试服务,Performance Testing Service)中也很好的支持了RPS模式。

压测基础数据

如果说业务模型对应的是确定要压测的接口/API的话,那压测流量数据,就是确定这些压测API到底压测的是什么内容,比如:登录哪些用户、查看哪些商品和店铺、购买哪些商品,甚至是付款价格是什么。

流量数据中,有一部分为上述业务模型对应具体RPS值,模型体现的是比例关系,而流量数据即有每次压测具体的RPS值。

流量数据中最重要的部分,即为真实的压测数据,我们可以称之为基础数据,比如交易的买家、卖家、商品数据等。全链路压测的目的是为了模拟双11,所以模拟的真实性非常重要,基础数据的真实性就是至关重要的一环。全链路压测会以线上数据作为数据源,经过采样、过滤、脱敏等操作,形成可作为压测使用的数据。

线上数据拿出来使用的时候,特别涉及到写数据的时候,避免造成脏数据,我们落地或者读取的时候,采用影子表的形式。当识别到压测流量,则读写影子表,否则就读写线上正式表。影子表的产生为的是压测流量安全。

淘宝内部系统使用的压测体系,数据平台和压测平台是两套平台。数据平台管理/提供压测数据(包括模型数据和流量数据),压测平台提供施压能力,即保证压测请求能够以指定的“协议”、指定的量级速率、从全国各地发送出来。商业化产品PTS(性能测试服务,Performance Testing Service)中提供的数据工厂能力,很好的将内部的数据平台和压测平台结合起来,产出为统一的一个压测系统,只需用户构造好压测数据以文件/自定义的形式定义好参数,在使用处配置即可。

流量安全策略

流量安全策略主要是为了保证能够正常的施压流量且数据不错乱,安全地、符合预期地进行。这里面就包括了两层考虑:

测试数据和正常数据的严格隔离,即非法流量的监控和保护机制;

  • 手段:影子表数据。影子表为和线上结构一致,但是处于隔离位置的可写压测数据表。
  • 效果:数据隔离,避免了数据错乱。

压测流量的安全过滤,即不被识别为攻击流量;

  • 手段:将安全相关策略接入流控降级功能;针对压测适当放松安全策略,或根据特殊标记识别;
  • 效果:压测流量不被判定为攻击流量,成功压测的同时保障线上业务的安全性。

此处,涉及到第三方的系统,诸如支付宝、短信等服务,因业务特殊性需要做压测系统的打通。13年淘宝实现了第一次全链路压测,但是未能打通下游业务链路。在14年双十一压测前,和支付宝、物流环节等打通了全面的压测系统。对于外部客户来说,支付宝、短信等都有对应的挡板服务可提供,用来供用户做全链路压测时使用。

压测实施

根据最开始介绍到的流程管控,一切准备就绪之后,即可开始进行全链路压测。除常规理解的正式压测之外,我们还有额外的两个预操作:系统预热、登录准备。

说明:此处未介绍首次改造之后的单链路压测调试,这部分基本由开发同学自行操作验证,故不在此特殊阐述。

关于系统预热 这里说的预热,未包含我们内部提到的预跑。预热是为了该缓存的数据提前缓存好,达到大促缓存态的状态,也更好地实现我们缓存的目的。大促缓存的使用应该利用到极致,故需要通过预热来进行。

对外部客户来说,可以通过先一轮、低量级的全链路压测,来提前预热系统,包括在真正大促活动之前也可这样操作,即提前缓存住需要缓存的数据。

登录准备:登录准备主要是用于需要长连接保持、秒杀等场景,即用户都是逐步登录上来,然后再进行业务操作的场景。故如果量级特别大的时候,可以提前做登录的准备,一则来模拟真实用户登录场景,二则是对登录系统的保护。

正式压测:一般正式压测会按照压测计划,执行多种压测策略。淘宝的双11大促压测,一般包含这样几步:

1)峰值脉冲:即完全模拟0点大促目标峰值流量,进行大促态压测,观察系统表现。

2)系统摸高:取消限流降级保护功能,抬高当前压测值(前提是当前的目标压测值已经达到,则可以进行摸高测试),观察系统的极限值是多少。可进行多轮提升压力值压测,直到系统出现异常为止。

3)限流降级验证:即验证限流降级保护功能是否正常。 (AHAS引入)商业化产品AHAS(应用高可用服务,Application High Availability Service)提供了全面的限流降级能力,可进行全链路的降级保护。

4)破坏性测试:这个主要是为了验证预案的有效性,类似于容灾演练时的预案执行演练。即为持续保持大促态压测,并验证预案的有效性,观察执行预案之后对系统的影响。

对外部客户来说,可以配置不同的压测量级数据,来进行多轮压测,并观察其系统表现。压测不应该是一次性的操作,而应该是反复的、多轮验证的操作。

问题定位分析

压测结束之后,会将压测过程中的系统表现、监控数据等整理,进行压测复盘,分析当前系统瓶颈、后续改进修复计划及下一轮压测时间等。在分析定位问题时,因涉及的系统较多、子业务系统的形态不一,需要具体问题具体分析,其中不免需要一线研发的介入。

商业化产品PTS(性能测试服务,Performance Testing Service)的压测报告,有详细统计数据及趋势图数据,采样日志以及添加了的监控数据。后续PTS还会提供架构监控,帮助性能测试执行同学,更好地从系统架构角度判定压测过程中系统是否正常,大致瓶颈点。

智能化压测

阿里巴巴全链路压测已经进入第7个年头,从开始的摸着石头过河,发展到现在更智能化形态。其中部分功能也会体现在商业化产品中,大家敬请期待。

  • 更多协议的支持
  • 容量评估
  • 问题自动发现
  • 全链路功能测试&压测预演
  • 压测常态化
  • 弹性大促,边压边弹
  • ......

未来

阿里巴巴将全链路压测进行到第7个年头,中间经历了太多的磨练与积累,随着新技术的出现,我们也将不断的完善自己,做到更好。同时,更希望能将这么多年的经验,能赋能到外部客户,比我们少踩坑、完美的度过每一轮大促活动,并将全链路压测应用到更多的日常场景中。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读取模式错误,计算引擎操作复杂……面对Hadoop这些问题该如何应对?

作者 | Monte Zweben译者 | 天道酬勤,责编 | Carol封图 | CSDN 付费下载自视觉中国Apache Hadoop于2006年出现在IT领域,它使用商品硬件,为组织提供前所未有的数据量存储能力。不仅解决了数据集的大小问题,还解决了数据类型问题&am…

Nacos 集群集成SpringBoot2.x 微服务_02

文章目录一、SpringBoot2.x 微服务1. 依赖引入2. bootstrap.yaml配置3. 测试类二、nacos配置规则2.1. 登录nacos2.2. 配置规则三、测试验证3.1. 启动项目3.2. 验证一、SpringBoot2.x 微服务 1. 依赖引入 <parent><groupId>org.springframework.boot</groupId&g…

蚂蚁“备战”TPC-C这1年

阿里妹导读&#xff1a;1年前OceanBase团队开了个会&#xff0c;定了个小目标&#xff0c;接下来的一年中这群工程师闭关攻坚。从掉头发到睡几个小时就跳起来看邮件&#xff0c;更甚至有人天天焦虑地捧着手机等邮件。 1年后&#xff0c;蚂蚁金服自研数据库OceanBase登上TPC-C排…

瞧!公务员的工作还可以这样干

盼啊盼&#xff0c;第六届世界互联网大会在乌镇如期而至。 在今天的大会上&#xff0c;小云带来了帮助公务员提升工作效率的“神器”&#xff0c;平头哥压箱底的“宝贝”...... 一起来深入了解下。 政务钉钉来了&#xff01;告别公务员传统工作方式 今天&#xff0c;浙江省政…

Nacos 集群搭建_01

文章目录一、准备工作1. 服务器部署2. nacos下载2. nacos下载与解压3. 编辑配置文件4. nacos 集群配置二、初始化nacos脚本2.1. 创建nacos数据库2.2. 初始化nacos脚本三、启动nacos集群3.1. 启动nacos服务3.2. 测试验证一、准备工作 1. 服务器部署 系统版本ip部署应用应用版本…

学数据科学,为何不尝试这 9 个编程语言!

在256种编程语言中&#xff0c;了解数据科学的编程语言&#xff01;作者 | Rashi Desai 译者 | Arvin&#xff0c;责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;数据科学在相当长一段时间以来一直是一件大事。在当今飞速发展…

Swift 5 时代的机遇与挑战到底在哪里?

作者|刘镇夫&#xff08;小鱼&#xff09; 出品|阿里巴巴新零售淘系技术部 本文是知名 ios 开发者 NSHipster中文译者-刘镇夫&#xff08;小鱼&#xff09;&#xff0c;在云栖大会上为大家带来的分享&#xff0c;本文主要介绍几点&#xff0c;第一、Swift 5 代表什么&#xff1…

Nacos 集群整合 Nginx 实现反向代理、负载均衡_03

文章目录一、Nginx 配置1. 下载安装nginx2. 配置nginx3. 启动nginx4. 测试验证5. 配置域名4.6. 域名验证一、Nginx 配置 1. 下载安装nginx https://gblfy.blog.csdn.net/article/details/119536779 2. 配置nginx # 进入nginx目录 cd /usr/local/nginx/conf# 编辑nginx.conf…

阿里云Kubernetes CSI实践—NAS动态存储卷使用

1. 前言 NAS存储盘能将nfs&#xff08;网络文件系统&#xff09;挂载到你的Pod中&#xff0c;阿里云Kubernetes CSI支持静态存储卷挂载和动态存储卷挂载2种方式&#xff0c; 在静态存储卷挂载的方式中&#xff0c;通常需要手动编辑和创建一个pv/pvc进行挂载&#xff0c;当需要…

怒肝 8 个月源码,我成为了 Spring 开源贡献者

作者 | cxuan 来源 | 程序员cxuan责编| 王晓曼前言我最近一直在写Spring的文章&#xff0c;而且仅仅是 Spring FrameWork 的文章 ,从最开始的官网入门到现在源码的深度分析。主要就是三个系列&#xff1a;官网入门系列&#xff0c;Spring官网读书笔记&#xff0c;这一系列的文章…

HTTPS配置过程

该文章借鉴于博主小东很不戳 先在自己项目中根目录下生成数字证书 生成命令如下&#xff1a;keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore sang.p12 -validity 365 命令解释 • -genkey表示要创一个新的密钥。 • alias表示 keystore 的别名。…

汇报时,如何让老板快速抓住重点?—— 黄金三步法

阿里妹导读&#xff1a;对事物的归类分组是我们人类的天性&#xff0c;我们的大脑会自动将发现的所有事物以某种持续组织起来。但如何组织才能帮助我们解决工作和生活中出现的各种复杂问题&#xff1f;今天&#xff0c;我们请阿里高级技术专家张建飞分享他的黄金三步法。 我们…

Nacos 集群 Nginx MySql SpringBoot2.x 微服务_04

接上一篇&#xff1a; Nacos 集群整合 Nginx 实现反向代理、负载均衡_03 文章目录一、配置规则1. 域名登录nacos2. 测试验证二、SpringBoot2.x 微服务2.1. 依赖引入2.2. bootstrap.yaml配置2.3. 测试类三、测试验证3.1. 启动项目3.2. 验证一、配置规则 1. 域名登录nacos 使用…

Serverless 实战 —— 快速搭建 SpringBoot 应用

前言 首先介绍下在本文出现的几个比较重要的概念&#xff1a; 函数计算&#xff08;Function Compute&#xff09;: 函数计算是一个事件驱动的服务&#xff0c;通过函数计算&#xff0c;用户无需管理服务器等运行情况&#xff0c;只需编写代码并上传。函数计算准备计算资源&am…

人才缺口40万,摆地摊也没有它挣钱,这个神仙职业今年太火了!

当你学习编程时&#xff0c;最先被困扰在哪一步&#xff1f;是不是很容易陷入在语法之类的细节而忽视基础概念&#xff1f;解决当前任务的最佳方法是什么&#xff1f;在多种编程语言之间来回切换&#xff0c;却感觉不到效率的提高&#xff1f;0 基础学习编程&#xff0c;最先入…

首次公开 | 淘系技术总监马鏖谈淘系用户增长

作者|马鏖 出品|阿里巴巴新零售淘系技术部 导读&#xff1a;近年来&#xff0c;关于用户流量的瓶颈让很多企业感到焦虑不安&#xff0c;互联网用户整体增速放缓&#xff0c;用户规模趋于饱和。同时&#xff0c;竞争个体成倍增长&#xff0c;流量资源争夺越发激烈&#xff0c;流…

JDK下载安装以及配置教程

截至2022年&#xff0c;JDK主流版本有JDK8跟JDK11 这里以JDK11为例 一、下载JDK 这里下载方法有两种 1.官网下载&#xff08;需要注册&#xff09; 网址&#xff1a;Java Downloads | Oracle 进入官网往下滑找到Java SE subscribers have more choices 根据提示框依次选择 弹出…

Tomcat10 端口修改 Linux 环境

文章目录1. 编辑文件2. 启动3. 验证1. 编辑文件 修改tomcat默认的端口&#xff0c;将默认端口8080修改为8090&#xff1a; cdapache-tomcat-10.0.10/conf/ vim server.xml 修改http协议端口 关键词&#xff1a;HTTP 修改前&#xff1a; 修改后&#xff1a; 2. 启动 cd ap…

月入过万的副业你要不要?不需要编程知识,不限男女,不限学历

01你知道做什么兼职最赚钱吗&#xff1f;你想拥有一份月薪过万的兼职工作吗&#xff1f;今天&#xff0c;我给你推荐的是看起来高大上&#xff0c;实则难度系数并不高的脚本创作&#xff01;你知道兼职脚本有多赚钱吗&#xff1f;普通程序员每天拿出2小时的时间&#xff0c;每个…

高德在提升定位精度方面的探索和实践

2019杭州云栖大会上&#xff0c;高德地图技术团队向与会者分享了包括视觉与机器智能、路线规划、场景化/精细化定位时空数据应用、亿级流量架构演进等多个出行技术领域的热门话题。现场火爆&#xff0c;听众反响强烈。我们把其中的优秀演讲内容整理成文并陆续发布出来&#xff…