文章插图
文章插图
3.4 发压模式最小调度单元Rhino 平台中,压测 Agent 就是一个最小调度单元 。一次压测任务,通常会拆分成多个子 Job,然后下发到多个 Agent 上来完成 。
- 最小化容器部署,减少资源浪费 。压测对机器资源消耗是非常高的,通常 CPU &Memory 的使用率都在 80%以上 。但是没有压测执行时间内,机器资源使用率<5% 。如果长期占用大量的资源,将会对机器资源造成极大的浪费 。压测 Agent 都采用容器化部署,并且每个容器的资源规格也尽可能小,这样既能满足日常压测需求,也不会占用太多的机器资源 。
- 独占 Agent,增加压测执行稳定性:单个容器内只启动一个 Agent 进程,单个 Agent 同时只能被一个压测任务占用,避免多任务多进程的干扰和资源竞争,增加压测的稳定性 。
- 动态扩容,支撑海量 QPS 发压:压测高峰期,Rhino 平台会临时申请机器资源,快速扩容,完成海量 QPS 的支撑 。压测完成后,会立即释放机器资源,减少资源浪费 。
智能压力调节
- 动态分配压测 Agent:在压测过程,经常出现压测 Agent 的 CPU/Memory 使用率过高(>90%),导致压力上不去,达不到目标 QPS;或者压测延时过高,压测结果不准确的问题 。Rhino 平台在发压的过程中,会实时监控每个压测 Agent 的 CPU/Memory 使用率,当超过阈值时(>90%),会动态分配额外的 Agent,以降低每个 Agent 的负载,保证压测的稳定性 。
- 智能调节压力:在压测过程,通常需要不断的调节 QPS 大小,以达到性能压测目标 。这过程非常耗费精力和时间 。Rhino 平台,可以根据压测任务设定的性能指标,智能调节 QPS 大小,当达到压测目标后,会自动熔断,停止压测 。
- 对于内网压测,默认都要求同 IDC 内发压,减少网络延时的干扰 。
- 对于公网压测,Rhino 平台在公司 CDN 节点上都有部署 Agent 节点,利用了 CDN 节点剩余计算能力,完成了公网压测能力的建设 。
边缘计算节点 Agent除了多机房部署之外,Rhino 平台还在边缘计算节点上也部署了压测 Agent,来模拟各种不同地域不同运营商的流量请求,确保流量来源,流量分布更贴近真实情况 。在 Rhino 平台上可以选择不同地域不同运营商,从全国各个地区发起压测流量 。
文章插图
3.5 压测熔断为了应对线上压测风险,Rhino 平台提供两种熔断方式,来应对压测过程中的突发事件,来降低对线上服务造成的影响 。
基于告警监控的熔断每个压测任务,都可以关联调用链中任意服务的告警规则 。在压测任务执行过程,Rhino 平台会主动监听告警服务 。当调用链中有服务出现了告警,会立即停止压测 。对于没有关联的告警,Rhino 平台也会记录下来,便于压测问题定位 。
文章插图
文章插图
基于 Metric 的熔断自定义监控指标及阈值,到达阈值后,也会自动停止压测 。目前支持 CPU、Memory、 上游稳定性、错误日志,以及其他自定义指标 。
此外,除了 Rhino 平台自身提供的熔断机制以外,公司服务治理架构也提供了很多额外的熔断机制,如压测开关,一键切断压测流量;过载保护,服务过载时自动丢弃压测流量 。
3.6 任务模型HTTP 任务对于 HTTP 协议,参考了 Postman,全部可视化操作,保证所有人都能上手操作,极大降低了压测的使用门槛和成本 。
推荐阅读
- YARN 在字节跳动的优化与实践
- 胎心115
- 字节跳动自研线上引流回放系统的架构演进
- 算法血拼:Google+百度+Alibaba+字节+Tencent+网易+360+拼夕夕
- kb是什么意思啊?
- 字节跳动面试必会:快速选择算法,TopK问题最优解
- 肚子在跳动是什么呢
- 刷透近200道数据结构与算法,成功加冕“题王”,挤进梦中的字节
- 黑客教程——Padding Oracle Attack&CBC字节翻转攻击详解
- JAVA字节流、字符流、缓冲流、转换流、内存流、字符编码