【独家揭秘】阿里怎么做双11全链路压测?| CSDN 博文精选

戳蓝字“CSDN云计算”关注我们哦!
640?wx_fmt=jpeg
作者 |  牛兔
转自 | CSDN企业博客
责编 | 阿秃

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

前言

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

640?wx_fmt=png

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

PS:1和2之间再加一个步骤。环境改造和基础数据准备。强调必须在生产环境。

  • 压测环境准备:需要复用真实的线上环境,压测结果和问题暴露才都是最真实情况。可通过压测流量全局识别、透传(数据进影子区域)。

  • 基础数据准备:以电商场景为例,构造满足大促场景的核心基础相关数据(如买家、卖家、商品信息),以线上数据为数据源,进行采样、过滤和脱敏,并保持同等量级。

640?wx_fmt=png

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

关于流程及管理

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

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

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

640?wx_fmt=png

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

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

压测环境改造

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

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

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

业务改造

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

  • 流量区分与识别:压测流量和业务流量的区分,并可在全链路系统中识别出来;

  • 流量单一性问题:比如下单,同一个人执行一次下单后再重复执行就会失败;

  • 流量的限流拦截:如果日常有限制,需要改造为接入流量降级能实时生效调整配置;

  • 剔除压测数据对报表的影响

  • 动态校验

  • ......

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

中间件改造

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

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

640?wx_fmt=png

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

数据准备

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

数据的准备,主要分为两部分:业务模型的建立和基础数据的构造。

业务模型数据

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

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

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

  • 新业务场景:直接按照新的业务,模型配比,形成一个新业务模型。

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

640?wx_fmt=png

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

  • 1对N :上游业务一个请求对应下游业务接口是否会存在调用多次的情况;

  • 业务属性的比例:根据历史数据计算不同类型业务的比例关系;

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

640?wx_fmt=png

业务模型在压测时对应的就是压测量级,淘宝大促用的全部都是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个年头,中间经历了太多的磨练与积累,随着新技术的出现,我们也将不断的完善自己,做到更好。同时,更希望能将这么多年的经验,能赋能到外部客户,比我们少踩坑、完美的度过每一轮大促活动,并将全链路压测应用到更多的日常场景中。


640?wx_fmt=png

?扫描下方二维码,阅读作者大大原文哟

640?wx_fmt=jpeg

640?wx_fmt=jpeg

福利
扫描添加小编微信,备注“姓名+公司职位”,入驻【CSDN博客】,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

640?wx_fmt=jpeg

推荐阅读:




真香,朕在看了!

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

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

相关文章

Centos7 使用Docker 安装Oracle 截图+关键步骤说明

yum install dockerdocker -v systemctl start docker systemctl status dockerdocker拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g#查看拉去的oracle镜像 docker images创建Oracle容器 docker run -d -p 1521:1521 --name oracle_11g registr…

阿里程序员深夜智救31楼跳楼邻居

“我妈跳楼了,快救救她!”。 8月20日凌晨的四点半左右,我被一阵急促的锤门声音吵醒。 听到这句话,没来得及思考,我就冲出了门。 我们住在31楼,出事的地点在邻居家的主卧,当时女主人整个人都悬…

数学建模亚太赛优秀论文_2019亚太地区大学生数学建模竞赛志愿者等级评定结果公布!...

2019亚太地区大学生数学建模竞赛志愿者通过赛氪官网招募,本届竞赛共招到来自193所高校的394名志愿者,根据志愿者邀请队伍数和志愿者任务的完成情况,共评选出344名志愿者,6个优秀组织社团。一路相伴,感谢有你~下面是志愿…

看完秒懂的排序算法

戳蓝字“CSDN云计算”关注我们哦!作者 | 奎哥责编 | 阿秃之前的文章咱们已经聊过了下图是常用排序算法的时间空间复杂度:排序算法这么多,这里先将排序算法做个简单分类:一、可以根据待排序的数据量规模分类:内部排序&…

手把手教你创建容器服务Kubernetes集群

Kubernetes作为目前最流行的容器编排工具,被越来越多的用户所接受,目前也有越来越多的用户开始考虑使用Kubernetes集群来部署生产应用。那么,此时用户可能面临一个问题,如何规划和创建合适的Kubernetes集群呢? 接下来的…

Navicat 12 连接oracle闪退问题

#首先查看自己oracle的版本 select * from v$version;然后去官网下载instantclient对应的版本instantclient 我的版本是instantclient-basic-windows.x64-11.2.0.4.0.zip 找到对应版本下载即可 最后解压,将解压的文件instantclient_11_2 直接放到安装Navicat的目录…

python遗传算法计算实例_遗传算法python简单例子(详解)

# -*-coding:utf-8 -*- #目标求解sin(x)最大值 import random import math import matplotlib.pyplot as plt #初始化种群 生成chromosome_length大小的population_size个个体的种群 def species_origin(population_size,chromosome_length): population[[]] #one dimension re…

四个变量的图表怎么做_品牌策划方案怎么做?5步图文帮你绘制专业策划图表...

品牌策划方案是指通过对目标对象、竞争对手等相关数据的收集及详细分析,创造性地提出的区别于其他竞争者,能够体现自身特色的名称或符号,用以识别某款产品。品牌策划方案需要策划人具备以下能力:高瞻远瞩,看得到品牌的…

阿里云开放国内首个云端数据库测试平台,云已成为数据库新标准;华为5G随行WiFi发布;科大讯飞推出 AI 专用语音芯片系列……...

戳蓝字“CSDN云计算”关注我们哦!嗨,大家好,重磅君带来的【云重磅】特别栏目,如期而至,每周五第一时间为大家带来重磅新闻。把握技术风向标,了解行业应用与实践,就交给我重磅君吧!重…

AWD-LSTM为什么这么棒?

AWD-LSTM是目前最优秀的语言模型之一。在众多的顶会论文中,对字级模型的研究都采用了AWD-LSTMs,并且它在字符级模型中的表现也同样出色。 本文回顾了论文——Regularizing and Optimizing LSTM Language Models ,在介绍AWD-LSTM模型的同时并…

使用Navicat Premium 12 连接远程Oracle数据库

文章目录1. Nacicat premium 12.1.11下载2. 点击【连接】-【ORACLE】3. 输入连接信息异常解决方案1. Nacicat premium 12.1.11下载 Nacicat premium 12.1.11破解版 32/64位 2. 点击【连接】-【ORACLE】 3. 输入连接信息 #连接信息如下: Hostname: 192.168.1.101 …

NLP深度学习:近期趋势概述(一)

在最近发表的论文中,Young及其同事汇总了基于深度学习的自然语言处理(NLP)系统和应用程序的一些最新趋势。本文的重点介绍是对各种NLP任务(如视觉问答(QA)和机器翻译)最新技术(SOTA&…

matlab meshgrid函数_从零开始的matlab学习笔记——(28)立体图切面与三视图

matlab应用——求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图....更多内容尽在个人专栏:matlab学习这一节我们说一说立体图的切面问题slice函数…

NLP深度学习:近期趋势概述(二)

递归神经网络(RNN) RNN是专门用于处理顺序信息的神经网络的方法。RNN将计算应用于以先前计算结果为条件的输入序列。这些序列通常由固定大小的标记向量表示,他们被顺序送至循环单元。下图说明了一个简单的RNN框架。 RNN的主要优势在于能够记…

使用IntelliJ IDEA 2019.3.2 x64 远程连接oracle数据库

登录验证第2种方式: 点击【Database】-【Data Source】-【Oracle】 输入连接信息,点击【Test Connection】-【OK】 Hostname: 192.168.1.101 Port: 1521 Sid: helowin Username: system Password: oracle 注释:第一次应该会下载客户端依赖&…

起底中国 IT 发展 20 年!

戳蓝字“CSDN云计算”关注我们哦!作者 | 马超责编 | 阿秃刚开始撰写此文时恰逢我结婚10周年纪念日,暮然回首,我突然发现第一款浏览器Worldwideweb出现在1990年,Java与Python都诞生于1994年,甚至被沿用至今的Visual st…

TableStore发布多元索引功能,打造统一的在线数据平台

什么是NoSQL “NoSQL”一词最早出现在1998年,距今刚好二十年。站在今天回头看的话,很少有人能想到在关系型数据库成熟发展了三十年,已经在数据存储领域占据了不可动摇的的地位后,NoSQL数据库尽然还可以快速地异军突起&#xff0c…

阿里是如何“宠”员工的?除了福利,还有这满屏黑科技

分散在世界各地的六万阿里员工是如何快速协同工作的? 在2018年杭州云栖大会现场,一块近4米宽的企业信息化大屏上,展示了全球阿里员工1天的云上办公与连接情况。 目前阿里巴巴的办公网络与音视频会议已经覆盖全球33个国家和地区,其…

里用gam使用_第一次使用Roam一头雾水?

有感于自己使用Chrome插件,自己看了官方文档也是一头雾水的状态,想到自己使用的Roam Research,用了好几个月也是不断摸索的,记录下使用Roam Research方法供新手们参考。工具的使用是简单的,但是看着详尽的工具文档和使…

使用PLSQL 远程连接oracle数据库

文章目录一、软件下载准备1. 下载PLSQL客户端2. 下载instantclient 客户端3. 将解压instantclient复制到PLSQL目录下面二、配置oracle监听2.1. 首先进入oracle内部2.2. 找到这个文件的目录2.3. 将tnsnames.ora文件从容器内部复制到宿主机上2.4. 再从linux服务器上将文件下载到w…