限流熔断降级的区别和落地

限流熔断降级的区别和落地

限流、熔断、降级是高可用系统的三大利器。很多人分不清它们的区别和适用场景。本文讲三者的区别和落地实现,帮你在项目中正确使用。

先从业务问题出发

架构设计不要先问“用什么中间件”,而要先问业务目标:是要提升吞吐、解耦系统、保证最终一致,还是降低峰值压力?不同目标对应的方案完全不同。

一个典型流程

以订单创建后发送通知为例:

  1. 订单服务先保存订单。
  2. 写入消息或事件。
  3. 通知服务异步消费。
  4. 消费端做好幂等,避免重复通知。

伪代码可以这样理解:

orderService.create(order);
messageProducer.send("order.created", order.getId());

消费端必须能处理重复消息:

if (processed(messageId)) {
return;
}
handleMessage(message);
markProcessed(messageId);

设计时要补的问题

  • 消息发送失败怎么办?
  • 消费失败是否重试?
  • 重复消费如何保证幂等?
  • 下游长时间不可用时如何降级?

核心要点

  1. 限流:控制入口流量,保护系统不被压垮

  2. 熔断:快速失败,防止级联故障

  3. 降级:牺牲非核心功能,保障核心服务

  4. 常用的限流算法:令牌桶、漏桶、滑动窗口

总结

限流、熔断、降级常常组合使用,共同构建高可用的分布式系统。在实际项目中,根据系统特点和业务需求选择合适的策略。


   转载规则


《限流熔断降级的区别和落地》 小乐 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录