熔断
服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。
上面的解释中有两个很关键的词,一个是暂时,一个是停止。
停止是说,当前服务一旦对下游服务进行熔断,当请求到达时,当前服务不再对下游服务进行调用,而是使用设定好的策略(如构建默认值)直接返回。
暂时是说,熔断后,并不会一直不再调用下游服务,而是以一定的策略(如每分钟调用 10 次,若均返回成功,则增大调用量)试探调用下游服务,当下游服务恢复可用时,自动停止熔断。
如上图,当 ServiceD 不可用时,ServiceB 应对 ServiceD 进行熔断。
开源的熔断器,如:Hystrix
限流
限流是指上游服务对本服务请求 QPS 超过阙值时,通过一定的策略(如延迟处理、拒绝处理)对上游服务的请求量进行限制,以保证本服务不被压垮,从而持续提供稳定服务。常见的限流算法有滑动窗口、令牌桶、漏桶等。
如上图,当 ServiceB 对 ServiceD 请求过多时,ServiceD 可以放弃一部分请求,保证自身服务的稳定。
目前比较常用的限流算法有以下几种:
- 计数器固定窗口算法
- 计数器滑动窗口算法
- 漏桶算法
- 令牌桶算法
降级
降级是指当自身服务压力增大时,采取一些手段,增强自身服务的处理能力,以保障服务的持续可用。比如,下线非核心服务以保证核心服务的稳定、降低实时性、降低数据一致性。
- 读旧
- PlanB
- 默认值
- 放弃部分请求
- 降低质量
- 提高参与门槛
- 反向过滤
- 补偿
- 容灾
总结
措施 | 产生原因 | 针对服务 |
---|---|---|
熔断 | 下游服务不可用 | 下游服务 |
降级 | 自身服务的处理能力不够 | 自身服务 |
限流 | 上游服务请求增多 | 上游服务 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2021-04-24 Java是如何实现自己的SPI机制的
2019-04-24 深入学习 Java 序列化
2019-04-24 HashMap的实现原理,以及在JDK1.7和1.8的区别
2018-04-24 针对开发的缺陷管理
2018-04-24 信贷业务流程
2018-04-24 不同逻辑顺序产生相同的结果编码如何决策