vlambda博客
学习文章列表

如何组织一次成功的全链路压测?

全链路压测 是近几年来各互联网公司及传统行业用于大规模系统容量评估、容量规划的最佳实践方式,本文将基于京东ForceBot平台在大促(京东618、京东双11)备战中的实践历程,给大家分享平台在压测实践方面带来的技术变革。并跟大家解读如何组织一次成功的全链路压测实践,在解读之前先介绍下实践的平台:ForceBot平台是一款分布式性能测试平台,能够为全链路压测构造千万量级的压测流量,并结合全域流量录制回放、瞬时发压、智能寻点等能力,为整站容量评估与规划提供一站式的解决方案。以下全链路压测实践内容均以ForceBot平台提供的能力开展。
1. 什么是全链路?


我们所说的链路化压测主要分为调用链路与业务链路两种形式,调用链路主要是指从请求发出到结果返回所途径的各层应用/服务所产生的路径(如图一),这种形式的压测主要是应用于单个系统或业务场景的容量评估,比如登录服务、购物车查询等主要验证的是某一业务场景的应用、缓存、数据库等各层性能表现;而业务链路则是指多个有业务关联的是场景组合所产生的调用链路集合(如图二),比如商品详情+购物车+提交订单这样的业务链路组合。有了以上的了解那全链路压测则是指通过一次压测将所需评估的整站所有业务链路全部评估完成。

如何组织一次成功的全链路压测?
图一:调用链路


如何组织一次成功的全链路压测?
图二:业务链路

全链路压测中有个重点要考虑的因素,压测流量如何尽可能的模拟或还原真实流量,以保证压测结果的有效性,这里我们引入了高保真压测的概念。



高保真压测定义


通过仿真或真实流量回放方式完成对业务系统的生产集群进行压测评估的一种实践方案,能够从环境、流量、调用链路等方面得出接近真实的压测评估结果。


高保真压测的判定条件


如何组织一次成功的全链路压测?

压测环境

  • 全链路压测:资源层面看,被测环境=生产环境,这里唯一的区别在于流量路由的开关配置指向不同。
  • 单系统压测:以机房或分组为最小被测单元,压测结束后不做任何资源上的调整直接接收线上流量。


如何组织一次成功的全链路压测?
压测数据
  • 流量录制:通过录制真实用户行为的流量,将其备份至离线流量文件中以便回放时使用。
  • 业务配比模型:压测业务链路过长时,录制出的流量很难满足链路上各系统的业务配比模型,作为流量录制的补充可以通过还原真实业务配比模型,来模拟仿真的压测流量,以满足链路上所有系统对流量成分的需要。

如何组织一次成功的全链路压测?

压测方式

  • 流量回放:支持离线流量 文件回放与实时流量引流两种压测方式,并能根据对流量的需求动态调整流量脉冲的大小;
  • 流量模拟:根据业务配比模型对业务链路的入口系统进行流量模拟,以保证业务链路上的每个系统都能满足配比需求;
  • 憋单压测:通过将生产流量在线上环境的异步(消息)节点特性形成蓄洪能力,待流量大小符合要求时开启泄洪对下游系统形成冲突以达成压测的效果。






2. 全链路前的准备工作有哪些?



全链路压测的实施主要分为两个阶段完成:


如何组织一次成功的全链路压测?

全链路压测参与系统判定标准

因全链路压测参与系统众多且整体压测时间往往在3~6个小时就会完成整个全链路压测的评估工作,那如何在这么短的时间高效的完成压测工作?这方面前期对单系统或短链路的性能评估则变的极为重要,这里会单机容量、集群容量来初步完成单个系统的容量评估以保证参与全链路实施过程中性能瓶颈尽量不会是因代码问题引起的;另外这个阶段还会进行集群的扩缩容的对比验证,以便在全链路压测过程中当某些系统出现性能瓶颈时,无法通过扩容的方式快速解决性能瓶颈,保障压测进度的顺利执行;此阶段的严格执行是下个阶段全链路实施的关键; 


如何组织一次成功的全链路压测?



如何组织一次成功的全链路压测?

全链路压测实施阶段

在整体全链路压测实施阶段也会分为准备、校验、实施三部分进行实践的推动。

  • 准备阶段:确认全链路参与系统的范围界定,这个阶段主要是确定有哪些系统参与、系统间的调用关系如何、并根据圈定压测系统范围进行压测场景、压测流量的构造方式/比例关系等进行压测方案的设计、评审工作,以及对压测数据、脚本进行准备与调试;
  • 校验阶段:对已完成评审的压测方案进行预置与验证工作,比如流量模型是否准确、流量的请求是否有效、压测执行实施的计划安排以及环境的准备和小流量的试跑等工作,这个阶段可以认为是全链路压测前最后一次整体的验证工作;
  • 实施阶段:整个全链路压测的实际执行时长会经历3~6个小时,在这个过程中会进行全链路压测的评估、降级演练、故障模拟等内容的执行,以保证全链路压测的评估的完整性;压测评估完成后将有系统统一输出压测结果的成绩单,以便于对压测中发现的问题进行跟进与优化后的验证工作


    如何组织一次成功的全链路压测?








3. 全链路压测中需要做哪些基础建设?


那我们对全链路压测有了整体的了解后,那我们需要做哪些基础的建设以帮助我们能更好的完成全链路压测的实践,或者说在进行全链路压测的实践过程中可能会遇到哪些坑呢?下面主要介绍下压测平台的架构以及流量录制回放的实践落地都有哪几种方式


压测平台架构

如何组织一次成功的全链路压测?

性能测试平台架构图

压测平台核心要解决的是如何构造目标压测场景所需量级的压测流量,目前业界用途较广的压测工具Jmeter、Gatling、nGrinder等在单机发压能力、分布式、异步发压场景等方面都有各自的优势,以成为工具的核心功能被广大研发、测试人员认可,但当所需压测流量的量级达到十万或百万以上时,便需通过自研方式来打造能提供百万或更高量级流量的压测平台,这时我们打造的平台需要具备以下能力:

  • 分布式架构设计,支持压测平台各服务水平扩展能力,以支持百万或更高量级的压测需求;
  • 容器化方式运维压测平台,资源动态调整的条件由任务并行度决定;
  • 实时计算模块压测结果秒级反馈,提升压测判断的准确与及时性;
  • 经京东618/双11备战验证目前压测平台可支持万台压力机资源调度,提供至少千万量级的压测流量。


全域流量录制回放


高保真压测的核心在于如何构造真实的压测场景,线上真实用户行为的流量是最为真实的流量数据,所以为提升压测场景中的数据质量,流量录制回放技术便成为一个专项研究的内容,如何将线上流量无损的录制下来?通过什么样的技术手段进行录制?录制下来的流量又解决进行安全存储等等问题,下面会从公网流量、内网流量录制回放的解决方案进行详细的说明这些问题的技术方案。

如何组织一次成功的全链路压测?

公网流量录制回放全景

如何组织一次成功的全链路压测?
公网流量录制回放流程图

  • 录制:流量由IDC机房的核心交换机的分光口复制到流量文件中并存储到CFS中(类似网盘),此方式因流量从光层进行录制,故对应用无任何性能损耗;
  • 回放:压测平台回放流量时,将流量文件所存储的CFS网盘直接挂载至压力机上,以提升流量文件分发给各压力机过程的效率;
  • 数据成份:录制到的流量数据在存储前会对敏感数据(Cookie、用户信息、银行卡信息等)进行脱敏处理,并将流量加密存储到流量文件中,以保证数据的安全性。


如何组织一次成功的全链路压测?

公网与内网流量录制的差别


如何组织一次成功的全链路压测?

公网流量录制原理
公网流量录制由核心交换机的分光口复制得到,故如图所示,流量会从交换机节点分两路:一路正常到目标应用(蓝色部分),一路经分光设备到流量录制服务(橙色部分);
因分光出的流量量级太大,单台服务器无法完整接收,故需要通过分光、分流设备,将流量引流到流量录制服务的集群中进行解析、过滤、脱敏等处理后得到可用于回放的流量数据;
数据安全:流量数据在经历解析、脱敏处理后,为保证数据存储的安全性,流量数据在真正落盘存储前,会进行加密处理以保障数据安全。

内网流量录制原理
内网流量的录制以Agent植入应用的方式为主,通过对目标应用的服务器植入Agent,并将流量录制到MQ、缓存或云盘等介质,作为回放时的离线流量;
此流量录制方式虽对目标应用有性能方面的损耗,但因可灵活控制流量录制的采样率或采集的服务器数量,所以这方面的风险可根据需要进行有效的控制;
此技术可支持HTTP、RPC等多种协议的录制,可满足内网复杂的多协议相互调用的流量录制解决方案。


如何组织一次成功的全链路压测?

压测流量在压测中的应用实践


如何组织一次成功的全链路压测?
压测数据是压测中重要内容之一,为了能使压测的流量成分更真实,现在更多的压测场景会通过流量录制回放的方式来进行,现在如上图可以通过交换机、网关、应用等多种方式来复制出所需的流量,这里得到的流量因是线上完整的流量内容,里面会涉及用户的敏感信息、设备信息等内容,为保证信息的安全性,在将流量数据落盘前会对数据进行脱敏的处理,以保证数据存储的安全性;录制的流量会因应用场景的不同存储在不同的介质中,实时引流的压测回放多以MQ或Redis的方式进行存储,以便压流回放过程的顺畅程度,这里需要注意的是当回放速率大于录制时该如何处理;离线流量回放则多以文件切割的形式存储在云盘或文件存储服务中,然后再由压力机读取流量文件后执行发压操作,此种方式的优点在于流量文件可以重复使用,且能根据压测场景的需要对流量进行处理以满足压测评估的需求。





讲师介绍
马鑫 京东测试开发工程师
拥有10年以上互联网及传统行业丰富测试经验,2010年底入职京东,擅长业务质量测试、自动化测试、性能测试以及持续集成等多个领域; 现在负责京东零售技术/数据中台618/双11以及大型项目的压测推动与实施、前沿压测技术的探索与实践; 以及带领团队构建适用于京东的分布式压测平台;

活动推荐:QECon上海站完整日程发布

如何组织一次成功的全链路压测?

如何组织一次成功的全链路压测?



点击“阅读原文”查看官网