连载中 18/20

全链路压测:洪水来之前先演一遍

2026-07-16 · 2061 阅读 · 0 评论 · 0 赞

单机压测的谎言

只压单个接口、单个服务的压测,给出的数字是谎言:单服务压出 5000 QPS,全链路一压只剩 800——缓存命中率变了、连接池竞争变了、下游依赖也来分时间。容量必须全链路测:请求从网关进来,穿过所有服务、所有中间件,带着真实的依赖关系被打满,测出来的数字才是真的。

影子流量:压测的核心难题

直接拿生产真实流量压?写操作会把用户数据改乱。压测的核心难题:流量要真实,数据要隔离。三个配套缺一不可:流量标记——压测请求打上标记,一路透传,全链路的限流、路由、存储都知道「这是演习」;影子表——写操作落到同实例的影子表(shadow_ 前缀)或独立影子库,结构与真实表一致,数据可随时清空;中间件隔离——MQ 发影子 topic、Redis 写影子 key 前缀,谁都不污染。

// 入口识别压测流量,全链路透传
if ("1".equals(request.getHeader("X-Stress-Test"))) {
    StressContext.mark();   // 标记进 ThreadLocal,RPC/HTTP 头继续透传
}
// 下游写操作按标记路由
if (StressContext.isStress()) {
    tableRouter.routeTo("shadow_order");         // 写影子表
    mqTemplate.send("shadow_order_topic", msg);  // 发影子 topic
}

压测看什么

压测不是把数字打上去看系统喘不喘气,要带走四样东西:容量水位——每层的最大吞吐与拐点(QPS 曲线由涨转平、RT 由平转升的那一点);最先垮的层——瓶颈排序,压完就知道该扩哪里;预案有效性——压测中手动触发限流、降级,验证真的生效且动作符合预期;恢复速度——洪峰退去后系统多久回到基线,有没有积压、有没有死连接。

安全红线

全链路压测是「在生产环境放火」,红线四条:低峰进行——避开业务高峰;全局开关——压测流量可一键熔断,演习自身出问题要能立刻停;数据可清理——影子数据带标记,压完即清;监控分流——压测流量单独打标上报,不污染真实监控基线,不然告警刷屏、容量基线全错。

机制、参数、演练都齐了——最后用真实事故来检验这套体系。下篇事故集锦:十个真实故障,对应本系列攒下的十件武器。

503

10 年全栈工程师 · 503咖啡馆主理人

#全链路压测#影子表#流量标记#容量水位#压测红线

评论 (0)

相关推荐

连载中 12/20

排查四件套:jstack、jmap、jstat、jcmd 的实战分工

jstack 看线程在干什么,jmap 看堆里装了什么,jstat 看运行时在变什么,jcmd 是统一入口。四把刀各管一段,配合着用没有查不动的现场。

#jstack#jmap#jstat#jcmd#排查工具
2026-09-16 · 5 阅读 · 0 评论 · 0 赞
连载中 11/20

GC 日志:把回收过程翻译成人话

一行 GC 日志里塞着七种信息:谁触发的、收了哪、停了多久、活了哪些。加上 -Xlog 配置,再加上日志分析工具,GC 不再是只能盯监控曲线的黑盒。

#GC日志#Xlog#日志分析#GC监控#Full GC排查
2026-09-16 · 13 阅读 · 0 评论 · 0 赞
连载中 10/20

ZGC:亚毫秒停顿是怎么炼成的

百 G 大堆停顿不到一毫秒,靠的是把搬家全部挪到并发阶段——着色指针让引用自带状态,读屏障让搬运中的对象依然可访问。代价是吞吐与内存,收益是停顿与堆大小解耦。

#ZGC#着色指针#读屏障#亚毫秒停顿#分代ZGC
2026-09-15 · 8 阅读 · 0 评论 · 0 赞