QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

全链路压测在大搜车的探索与实践

  • 2020-04-02
  • 本文字数:1692 字

    阅读完需:约 6 分钟

全链路压测在大搜车的探索与实践

如果把双 11 定义为电商公司一年一度的大考,那么全链路压测就是大考之前的一次次模拟考试,帮助要上战场的系统查缺补漏以及进行容量验证和规划。

背景

微服务拆分的背景下,一个简单地请求可能涉及到十几个下游服务,从 CDN 到接入层、前端应用、后端服务、缓存、存储、中间件,哪怕一个环节出现一点误差,误差在上下游经过几层累积后会造成什么影响谁都无法确定,也许是调用延迟,也许是请求失败,用户的体验自然就无法保证。


所以我们需要建立起一套验证机制,来验证我们各个环节的都是符合我们预期的。验证的最佳方法就是让事件提前发生,如果我们的系统能够提前经历几次“双 11”,容量的不确定性问题也就解决了。全链路压测的诞生解决了容量的确定性问题!



核心要素

  • 采集线上的真实流量作为压测数据



  • 省去巨大的人工成本:传统压测模式下,压测数据的准备一直是老大难的问题。双 11 可能涉及几十个系统,每个系统都有几十上百的接口。如果所有接口都要压测,准备数据需要巨大的人工成本。如果只压测核心接口,其它接口的隐患可能就无法发现。

  • 解决数据多样性不足:准备的压测数据往往跟线上真实的流量模型存在差异,很可能会过多的命中 cache 或者数据库缓存。

  • 数据转换:敏感数据脱敏,不符合的数据改造

  • 直接在线上的真实环境进行双 11 模拟



  • 新搭建可对比线上环境的压测环境,成本太大;

  • 测试环境或预发环境压测结果没有说服力,参考价值不大

  • 识别压测流量和真实流量,不产生脏数据,并且不需要业务方改造适配(涉及的系统多且风险较大)



  • 压测流量打上标识,通过 trace(链路追踪中间件)向下游系统传递。

  • 压测流量触发的数据库操作都路由到影子库,不对线上数据库产生影响

  • 第三方系统的 mock

  • 有些第三方系统按照调用次数收费

  • 监控

  • 系统 qps,耗时

  • 硬件监控(cpu,内存)等

系统架构

如下图所示,全链路压测分为基础设施和管理端两大部分。



基础设施

基础设施采用了 Java 动态字节码技术,运行在 jvm 层,已经覆盖了公司 90%以上的应用。


TraceAgent 负责记录链路调用,打印日志到磁盘上。每台机器上都部署了我们的链路日志收集程序,然后把它们存储到 ES 等后端存储中。 全链路压测的数据就是通过这些日志转换而成,同时,基于日志的聚合分析,也形成了我们的监控大盘。


PTS-Agent 主要负责影子库,mock 等逻辑实现。所有的压测流量都打上了压测标识,而且通过 trace 传递,即使跨系统调用压测标识也不会丢失。PTS-Agent 在发现是压测流量,并且配置了影子库,就会动态修改数据库连接,把它们路由到影子库,而正常流量不会受到任何影响,真正实现了业务无感知。mock 等功能也是判断是否是压测流量,是否配置了 mock,执行流程如下图:


管理端

压测执行流程主要分为三步: 准备压测数据 ===> 配置压测计划 ===> 执行压测任务


管理端模块也是按照上面三个步骤划分的


  • 数据集管理:我们提供了灵活的 sql,可以让用户自由的选择采集,哪些应用,哪些接口,多长时间段的线上数据。

  • 压测计划管理:为每个压测场景 配置 影子库,接口 mock 等

  • 压测执行:配置施压机,线程数等,以及开始和停止压测任务实践案例


  1. 数据采集:指定时间范围 以及通过 sql 语法指定采集的应用以及接口



2. 配置压测计划

接口 mock 配置:我们基于链路数据,把需要压测的所有接口的下游调用链路都分析出来,用户可以根据我们的链路图,对任何下游接口实现 mock。




影子库、mq 配置



数据转换功能:如果采集到的谁要做进一步的处理才能使用,则使用数据转换功能,支持 js 语法;


3. 压测执行

3.1 任务的启动与停止,线程数配置


3.2 执行过程的监控,包括 QPS、响应时间、相应状态码、cpu 和内存资源情况,





系统瓶颈定位工具

压测只是手段,我们的目的还是希望发现系统中的瓶颈点。为此,我们也提供了应用拓扑、链路追踪协助大家排查问题,同时也推荐开源工具async-profiler分析方法耗时情况。

应用拓扑:全局视角,快速定位下游系统瓶颈点

该系统可以展示当前系统所有的下游系统,在哪个节点耗时最长一目了然


链路追踪:记录所有调用,方便分析所有慢请求

未来规划

未来,我们会朝着高可用平台发展,不仅会满足大家压测种种需求,同时也将为 故障模拟,故障演练等场景赋能,帮助大家提供故障应对能力,敬请期待。


2020-04-02 14:032618

评论

发布
暂无评论
发现更多内容

通过 HTTP/2 协议案例学习 Java & Netty 性能调优:工具、技巧与方法论

阿里巴巴云原生

阿里云 云原生 dubbo

Mac视频后期特效工具 motion5 v5.6.4进行了额外修复和优化

Rose

mac软件下载 Motion 5 motion5中文 视频后期特效处理 Motion 5破解版

Ableton Live Suite 11破解版下载 音乐制作软件

Rose

音乐制作 Ableton Live 11中文版 Live Suite 11破解 Ableton Live Suite下载

点云标注技术在智能制造中的应用

数据堂

大模型总是「胡说八道」怎么办?手把手教你如何应对!

Zilliz

Milvus 向量数据库 ChatGPT zillizcloud langchain

耕升 GeForce RTX 4060 Ti 系列,为玩家带来DLSS3+1080P光追游戏体验!

极客天地

MOSN 基于延迟负载均衡算法——走得更快,期待走得更稳

SOFAStack

负载均衡 架构 分布式 开发者 云原生

Django笔记三十五之admin后台界面介绍

Hunter熊

Python django admin

什么是 Final Cut Pro? fcpx视频剪辑下载安装

Rose

Final Cut Pro下载 Final Cut Pro破解版 FCPX软件 fcpx Mac视频剪辑软件

2023-05-23:如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等, 那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。 例如,“tars“

福大大架构师每日一题

golang 算法 rust 福大大

C语言编程—判断语句

芯动大师

mac上好友的git客户端:SourceTree 最新中文版

真大的脸盆

Mac Mac 软件 Git客户端

龙蜥白皮书精选:利用 io_uring 提升数据库系统性能

OpenAnolis小助手

开源 高性能存储 龙蜥sig IO栈 iGraph

Scrum框架和流程

顿顿顿

Scrum 敏捷开发 敏捷开发管理 scrum工具

浪潮数据:智能网卡在分布式 SDN 网络加速的应用与实践 | 第 79 期

OpenAnolis小助手

开源 sdn 龙蜥大讲堂 浪潮数据 智能网卡

名侦探白洞(一):智能家居灵异事件

脑极体

AI 智能家居

PoseiSwap IDO在Bounce上启动在即,如何参与?

股市老人

fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器

物有本末

FastApi Pillow 海报生成器 海报编辑器 海报小程序

苹果Mac视频转码编辑工具Compressor v4.6.4最新中文激活版

Rose

下载 fcpx Compressor Mac下载 苹果视频编码工具 Compressor破解版

【线下|05.27】|StarRocks & Friends 杭州站

StarRocks

数据库 大数据 Meetup 杭州

从ROI出发探究自动化测试

QE_LAB

自动化测试 测试策略 ROI

如何使用Go实现代理模式

Jack

golang 设计模式

低代码平台中的分布式RPC框架(约3000行代码)

canonical

开源 dubbo RPC框架

理解JVM工作机制(一) JVM内存区域

Geek漫游指南

Java JVM

科技引领,亮出高质量发展新引擎!

Openlab_cosmoplat

工业互联网 开源社区

玩转 LLMs 之「为什么不问问 Milvus」

Zilliz

Milvus 向量数据库 autogpt zillizcloud langchain

Scrum的三个角色及其核心职责

顿顿顿

Scrum 敏捷开发 敏捷开发管理工具 scrum敏捷工具

Logic Pro X(苹果专业音频制作软件)v10.7.8中文版

Rose

苹果mac软件下载 Logic Pro X下载 Logic Pro X破解 Logic Pro X教程 音频制作软件

全链路压测在大搜车的探索与实践_大前端_杨光跃_InfoQ精选文章