全链路压测平台(Quake)在美团中的实践

背景

在美团的价值观中,“以客户为中心”被放在一个非常重要的位置,所以我们对服务出现故障越来越不能容忍。特别是目前公司业务正在高速增长阶段,每一次故障对公司来说都是一笔非常不小的损失。而整个IT基础设施非常复杂,包括网络、服务器、操作系统以及应用层面都可能出现问题。在这种背景下,我们必须对服务进行一次全方位的“体检”,从而来保障美团多个业务服务的稳定性,提供优质的用户服务体验。真正通过以下技术手段,来帮助大家吃的更好,生活更好:

  • 验证峰值流量下服务的稳定性和伸缩性。

  • 验证新上线功能的稳定性。

  • 进行降级、报警等故障演练。

  • 对线上服务进行更准确的容量评估。

  • ……

全链路压测是基于线上真实环境和实际业务场景,通过模拟海量的用户请求,来对整个系统进行压力测试。早期,我们在没有全链路压测的情况下,主要的压测方式有:

  • 对线上的单机或集群发起服务调用。

  • 将线上流量进行录制,然后在单台机器上进行回放。

  • 通过修改权重的方式进行引流压测。

但以上方式很难全面的对整个服务集群进行压测,如果以局部结果推算整个集群的健康状况,往往会“以偏概全”,无法评估整个系统的真实性能水平,主要的原因包括:

  • 只关注涉及的核心服务,无法覆盖到所有的环节。

  • 系统之间都是通过一些基础服务进行串联,如 Nginx、Redis 缓存、数据库、磁盘、网络等等,而基础服务问题在单服务压测中往往不能被暴露出来。

综合多种因素考虑,全链路压测是我们准确评估整个系统性能水平的必经之路。目前,公司内所有核心业务线都已接入全链路压测,月平均压测次数达上万次,帮助业务平稳地度过了大大小小若干场高峰流量的冲击。

解决方案

Quake (雷神之锤)作为公司级的全链路压测平台,它的目标是提供对整条链路进行全方位、安全、真实的压测,来帮助业务做出更精准的容量评估。因此我们对 Quake 提出了如下的要求:

  • 提供模拟线上真实流量的能力* 压测和 DDoS 攻击不同的是,压测有应用场景,而 DDoS 可能只需要一个请求。为了更真实的还原用户行为,我们需要获取线上的真实流量进行压测。

  • 具备快速创建压测环境的能力* 这里的环境指的是线上环境,因为如果压测的是线下环境,即使不考虑“机器配置是否相同”这个因素,像集群规模、数据库体量、网络条件等这些因素,在线下环境下都无法进行模拟,这样得出压测结果,其参考价值并不大。

  • 支持多种压测类型* 压测类型除了支持标准的 HTTP 协议,还需要对美团内部的 RPC 和移动端协议进行支持。

  • 提供压测过程的实时监控与过载保护* 全链路压测是一个需要实时关注服务状态的过程,尤其在探测极限的时候,需要具备精准调控 QPS 的能力,秒级监控的能力,预设熔断降级的能力,以及快速定位问题的能力。

Quake 整体架构设计

Quake 集数据构造、压测隔离、场景管理、动态调控、过程监控、压测报告为一体,压测流量尽量模拟真实,具备分布式压测能力的全链路压测系统,通过模拟海量用户真实的业务操作场景,提前对业务进行高压力测试,全方位探测业务应用的性能瓶颈,确保平稳地应对业务峰值。

架构图

Quake 整体架构上分为:

  • Quake-Web:压测管理端,负责压测数据构造、压测环境准备、场景管理、压测过程的动态调整以及压测报表展示等。

  • Quake-Brain:调度中心,负责施压资源的调度、任务分发与机器资源管理。

  • Quake-Agent:压测引擎,负责模拟各种压测流量。

  • Quake-Monitor:监控模块,统计压测结果,监控服务各项指标。

管理端核心功能

数据构造

传统的数据构造,一般由测试人员自己维护一批压测数据。但这种方式存在很大的弊端,一方面维护成本相对较高,另一方面,其构造出的数据多样性也不足够。在真实业务场景中,我们需要的是能直接回放业务高峰期产生的流量,只有面对这样的流量冲击,才能真实的反映系统可能会产生的问题。

Quake 主要提供了 HTTP 和 RPC 的两种数据构造方式:

HTTP 服务的访问日志收集

对于 HTTP 服务,在 Nginx 层都会产生请求的访问日志,我们对这些日志进行了统一接入,变成符合压测需要的流量数据。架构图如下:

  • S3为最终日志存储平台

底层使用了 Hive 作为数仓的工具,使业务在平台上可以通过简单的类 SQL 语言进行数据构造。Quake 会从数仓中筛选出相应的数据,作为压测所需的词表文件,将其存储在 S3 中。

  • 词表:压测所需的元数据,每一行代表一个请求,包含请求的 method、path、params、header、body等等。

RPC 线上流量实时录制

对于 RPC 服务,服务调用量远超 HTTP 的量级,所以在线上环境不太可能去记录相应的日志。这里我们使用对线上服务进行实时流量录制,结合 RPC 框架提供的录制功能,对集群中的某几台机器开启录制,根据要录制的接口和方法名,将请求数据上报到录制流量的缓冲服务(Broker)中,再由 Broker 生成最终的压测词表ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值