Rhino 字节跳动全链路压测的实践( 四 )

  • 基于 Mock Server 的请求规则匹配 。首先在 Mock Server 上注册 Mock 规则,以及匹配的 Response 和响应时延 。当 Mock Server 接收到请求后,会根据规则进行响应,如图 。

  • Rhino 字节跳动全链路压测的实践

    文章插图
     

    Rhino 字节跳动全链路压测的实践

    文章插图
     
    3.4 发压模式最小调度单元Rhino 平台中,压测 Agent 就是一个最小调度单元 。一次压测任务,通常会拆分成多个子 Job,然后下发到多个 Agent 上来完成 。
    • 最小化容器部署,减少资源浪费 。压测对机器资源消耗是非常高的,通常 CPU &Memory 的使用率都在 80%以上 。但是没有压测执行时间内,机器资源使用率<5% 。如果长期占用大量的资源,将会对机器资源造成极大的浪费 。压测 Agent 都采用容器化部署,并且每个容器的资源规格也尽可能小,这样既能满足日常压测需求,也不会占用太多的机器资源 。
    • 独占 Agent,增加压测执行稳定性:单个容器内只启动一个 Agent 进程,单个 Agent 同时只能被一个压测任务占用,避免多任务多进程的干扰和资源竞争,增加压测的稳定性 。
    • 动态扩容,支撑海量 QPS 发压:压测高峰期,Rhino 平台会临时申请机器资源,快速扩容,完成海量 QPS 的支撑 。压测完成后,会立即释放机器资源,减少资源浪费 。
    2020 年春节抢红包压测中,Rhino 临时扩容在 4000+个实例,支撑了单次 3kw+QPS 的压测,但日常 Rhino 平台只部署了 100+个实例,就能满足日常压测需求 。
    智能压力调节
    • 动态分配压测 Agent:在压测过程,经常出现压测 Agent 的 CPU/Memory 使用率过高(>90%),导致压力上不去,达不到目标 QPS;或者压测延时过高,压测结果不准确的问题 。Rhino 平台在发压的过程中,会实时监控每个压测 Agent 的 CPU/Memory 使用率,当超过阈值时(>90%),会动态分配额外的 Agent,以降低每个 Agent 的负载,保证压测的稳定性 。
    • 智能调节压力:在压测过程,通常需要不断的调节 QPS 大小,以达到性能压测目标 。这过程非常耗费精力和时间 。Rhino 平台,可以根据压测任务设定的性能指标,智能调节 QPS 大小,当达到压测目标后,会自动熔断,停止压测 。
    压测链路模拟Rhino 平台默认将全链路压测分为公网压测和内网压测 。公网压测主要 IDC 网络带宽,延时,IDC 网关新建连接、转发等能力;内网压测,主要是压测目标服务,目标集群的 性能,容量等 。
    • 对于内网压测,默认都要求同 IDC 内发压,减少网络延时的干扰 。
    • 对于公网压测,Rhino 平台在公司 CDN 节点上都有部署 Agent 节点,利用了 CDN 节点剩余计算能力,完成了公网压测能力的建设 。
    同城多机房,异地多机房Rhino 平台在各个 IDC 都有部署 Agent 集群 。各个 IDC 内服务的压测,默认会就近选择压测 Agent,来减少网络延时对压测结果的干扰,使得压测结果更精准,压测问题定位更简单 。
    边缘计算节点 Agent除了多机房部署之外,Rhino 平台还在边缘计算节点上也部署了压测 Agent,来模拟各种不同地域不同运营商的流量请求,确保流量来源,流量分布更贴近真实情况 。在 Rhino 平台上可以选择不同地域不同运营商,从全国各个地区发起压测流量 。
    Rhino 字节跳动全链路压测的实践

    文章插图
     
    3.5 压测熔断为了应对线上压测风险,Rhino 平台提供两种熔断方式,来应对压测过程中的突发事件,来降低对线上服务造成的影响 。
    基于告警监控的熔断每个压测任务,都可以关联调用链中任意服务的告警规则 。在压测任务执行过程,Rhino 平台会主动监听告警服务 。当调用链中有服务出现了告警,会立即停止压测 。对于没有关联的告警,Rhino 平台也会记录下来,便于压测问题定位 。
    Rhino 字节跳动全链路压测的实践

    文章插图
     

    Rhino 字节跳动全链路压测的实践

    文章插图
     
    基于 Metric 的熔断自定义监控指标及阈值,到达阈值后,也会自动停止压测 。目前支持 CPU、Memory、 上游稳定性、错误日志,以及其他自定义指标 。
    此外,除了 Rhino 平台自身提供的熔断机制以外,公司服务治理架构也提供了很多额外的熔断机制,如压测开关,一键切断压测流量;过载保护,服务过载时自动丢弃压测流量 。
    3.6 任务模型HTTP 任务对于 HTTP 协议,参考了 Postman,全部可视化操作,保证所有人都能上手操作,极大降低了压测的使用门槛和成本 。


    推荐阅读