Sentinel 集群限流 Token Server 挂了,我们在控制台侧做了本地降级,压测数据验证了容灾效果
Sentinel 集群限流依赖的 Token Server 一旦宕机,业务易陷入无保护状态。团队在控制台侧增加健康检查与本地降级逻辑,检测到 Server 不可用时,自动将集群规则转换为单机限流规则并推送至客户端。压测验证显示,该方案能将故障时的错误率从 12% 降至 0.3%,有效防止链路崩溃,且无需改造业务应用。
Sentinel 集群限流依赖的 Token Server 一旦宕机,业务易陷入无保护状态。团队在控制台侧增加健康检查与本地降级逻辑,检测到 Server 不可用时,自动将集群规则转换为单机限流规则并推送至客户端。压测验证显示,该方案能将故障时的错误率从 12% 降至 0.3%,有效防止链路崩溃,且无需改造业务应用。
gRPC 调用中重试、超时、熔断逻辑常被重复编写,导致业务代码臃肿。通过将三者拆分为独立拦截器,并按熔断→超时→重试的顺序串联成链,可形成单向流动的容错链路。熔断器避免无效调用,超时控制整体耗时,重试在时间窗口内执行。最终业务代码大幅精简,系统延迟降低,冗余容错模板被彻底消除。
UI 自动化测试失败的主因并非断言错误,而是定位器硬编码导致页面微调即崩溃。核心解决思路是建立分层防御:页面对象模型应暴露用户行为而非元素,定位器优先使用`data-testid`等稳定属性,等待逻辑需封装在框架层。测试数据必须自给自足,通过API准备以避免级联失败。还需引入组件化抽象复用交互逻辑,并完善失败诊断信息,记录URL、DOM快照等上下文。
从业务指标出发,重新定义 Pulsar 容量规划:核心应关注生产延迟、消费积压和分区倾斜度,而非 CPU 或内存。生产延迟揭示 Broker 的 Topic 承载上限与 Bookie 磁盘瓶颈;消费积压增速可反推 Consumer 与分区配比;分区倾斜度则能暴露隐藏热点。三者联动构成决策树,将规划单位从节点细化到分区,能更精准地保障系统延迟与稳定性。
同一套压测条件下,令牌桶 P99 延迟仅 23ms,滑动窗口却飙到 310ms。核心差异在于滑动窗口的刚性时间边界导致请求周期性积压,而令牌桶的连续令牌发放避免了“一刀切”延迟。压测数据、根因分析和 Lua 脚本实现均证实,突发流量场景下令牌桶的延迟分布远优于滑动窗口。
RocketMQ 的顺序消息仅支持分区有序,无法实现全局有序。强行在业务层通过全局序号、排序缓冲区、去重和断点续跑等机制实现全局顺序,会带来显著的状态管理、测试和运维复杂度,成本远高于直觉。更优方案是采用单线程顺序消费加异步分发,或换用原生支持全局顺序的中间件。
Kafka MirrorMaker 2与Pulsar异地复制在AWS跨区域容灾场景下的实测对比显示,RTO差距不大(秒级),但RPO差异显著:Pulsar基于存储层同步复制实现RPO=0,代价是延迟增加6.5倍;MirrorMaker 2的异步架构导致RPO波动最高达11秒,极端场景可能丢失数万条消息。架构设计决定了容灾能力上限,金融级场景需权衡一致性与延迟。
缓存故障排查靠三板斧:慢查询日志、热Key分析和命中率曲线。慢查询要关注命令类型、Key模式和时间分布,O(N)命令直接定性为缺陷。热Key分析需区分读多写少和频繁更新场景,警惕伪热Key。命中率曲线重点看断崖式下跌和缓慢下降,区分整体与核心业务命中率。事故还原按慢查询、命中率、热Key顺序排查,可覆盖95%故障场景。
缓存层重构的关键在于用可控的 Mock Redis Client 精确模拟异常态,而非简单返回 null。通过接口化底层操作,可模拟缓存未命中、连接超时和数据过期三种场景,并利用并发原语发起 100 个请求,验证数据库仅穿透一次。测试需覆盖雪崩延迟、脏数据清理等边界情况,并集成到 CI 中,开启 race detector 以捕获竞态条件。
Kafka 的 Exactly-Once 语义仅保证其内部消息不丢不重,一旦消费端涉及数据库、缓存或第三方 API 等外部系统写入,该承诺即失效。文章通过订单分账踩坑案例,剖析了跨系统场景下的重复处理根因,并给出基于数据库唯一索引的业务去重表方案,实现业务层真正的“恰好一次”处理。