一文看懂限流熔断降级
引言
目前分布式微服务架构已经被大多数企业接受,它的优点很多:
- 水平扩展和弹性伸缩 - 提升系统承载容量
- 高可用支持 - 由于多点部署,消除了单点风险
- 模块化设计 - 系统的重用度更高
- 高内聚低耦合 - 每个微服务功能明确,职责单一,代码容易了解,开发和迭代的速度更快
- 扩展性 - 以标准协议如REST、SOAP、RPC方式进行服务间交互,解除对技术栈的绑定,具备更好的扩展性。
与此同时,分布式微服务设计带来了系统设计复杂,如外部的一个调用需要通过多个服务协同完成,增加了调用链层级,也对系统的健壮性提出了更高的要求。
例如面对下面的场景,分布式微服务应该如何处理:
- 双十一流量峰值
- 微博热搜
- 恶意爬虫
- 下游系统服务不稳定引起的雪崩
什么是限流
是指对当前的服务实例设定每秒可以允许请求的服务数量,当超过该数量的时候,则不在接受该调用。
限流是限制服务实例的并发的请求访问量,超过阈值则拒绝。
涉及的算法包括:计数器、滑动窗口、漏桶算法、令牌桶算法。
什么是降级
当出现服务吞吐量巨大,资源不够用的情况,可以使用降级服务观点部分不重要、性能差的服务,避免占用资源,保障主体业务正常使用。
什么是熔断
当服务实例依赖远程服务,而远程服务没有做过过载保护,就会因为请求导致阻塞而耗尽本服务实例资源,开始可能是局部影响,但是往往由于分布式服务彼此之间的各种依赖关系,而导致整体不可用,造成雪崩效应。这时候就需要服务实例设置熔断,熔断后会做一些降级策略,即熔断降级。
Spring Cloud 限流熔断降级实现方式
- 限流的实现方式有很多 :RateLimiter、Bucket4j、Resilience4j
- 熔断降级则主要可以依赖Hystrix
展开剩余53%