连载中 13/15

降级与兜底:秒杀挂了也要体面

2026-09-09 · 307 阅读 · 0 评论 · 0 赞

降级的本质:有损服务

服务降级的有损服务思想,在秒杀场景被放大到极致:链路上没有组件永远可靠——Redis 会故障切换、MQ 会堆积、风控会超时——预案的目的不是不出故障,而是故障发生时损失可控、动作明确、切换够快。没有预案的秒杀活动,故障恢复靠的是现场临时写代码——那是把事故变成事故 Plus。

降级清单:每一项都要有触发条件与动作

把链路逐段过一遍,每一段写下三个字段:触发条件、降级动作、恢复条件。Redis 不可用(预扣失败率突增)→ 动作:入口切换到排队页模式,请求暂存不发预扣,同时告警抢修——活动暂停一分钟好过超卖一万件;MQ 堆积(消费延迟超阈值)→ 动作:收紧网关限流阈值,少放行,让消化能力追上——上游阀门是现成的降级工具;风控服务超时 → 动作:旁路放行加后置清算——风控慢了不能挡着真人下单,疑似黑产留给延迟核验兜底;支付回调延迟 → 动作:关单时间窗自动顺延,避免误关已支付订单。

// 预案不是文档,是配置中心里的开关
seckill:
  degrade:
    redis-unavailable-mode: QUEUE_PAGE   # Redis 故障 -> 排队页
    mq-backlog-threshold: 50000          # MQ 积压阈值
    mq-backlog-action: TIGHTEN_GATEWAY   # 触发动作:收紧网关
    risk-timeout-mode: PASS_AND_REVIEW   # 风控超时 -> 放行+后置清算
// 触发条件由监控指标自动判断,动作一键切换,恢复条件同样明确

预案的三个等级

预案按影响面分级:P0 级——核心链路不可用,动作是暂停活动切排队页,宁可"今天先不抢了"也不能出超卖;P1 级——部分能力受损,动作是有损继续(旁路风控、收紧限流);P2 级——指标劣化未损功能,动作是观察加微调。分级对应不同的决策人:P0 一线值班即可执行,P2 要值班负责人确认。预案的另一半是恢复条件——什么时候切回来、切回前要验证什么,没有恢复条件的降级就是永久降级。

体面的失败:页面与话术

兜底不光在系统层,还在体验层:排队页告诉用户"前面还有多少人"、售罄页明示"已抢完,可登记候补"、降级页说明"系统繁忙,稍后再试"——每一类失败都有一句对应的话术与一个去向。模糊的"系统错误"是舆情燃料,明确的"已售罄可候补"是体验设计。文案与开关一起进预案清单,别等出事再让客服现编。

预案写在演练里

大促前必须做一次预案演练:把 Redis 停掉、把 MQ 注入延迟、把风控掐断——演练验证的不是预案写得对不对,而是开关真的能切、动作真的生效、恢复真的干净。演练出的坑(开关没接、降级后幂等失效)在演练里暴露是彩排,在活动里暴露是事故。预案体系就绪后,还差最后一块:容量从哪来——全链路压测

503

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

#降级兜底#有损服务#预案演练#大促作战#排队页

评论 (0)

相关推荐

连载中 12/20

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

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

#jstack#jmap#jstat#jcmd#排查工具
2026-09-16 · 4 阅读 · 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 赞