1 为什么熔断限流
分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。
如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,
无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。
点击查看大图
1.2 雪崩效应常见场景
-
硬件故障:如服务器宕机,机房断电,光纤甚至专线被破坏等。
-
流量激增:如异常流量,线上活动导致的流量激增,重试导致流量放大等。
-
缓存穿透:缓存服务重启,导致大量缓存同时失效时。重建缓存或者大量的请求无法命中缓存,会直接投向数据库,导致服务和数据层压力骤增甚至雪崩。
-
程序漏洞:如程序逻辑(如死循环)导致内存泄漏,或者死锁操作导致互相等待,或者 JVM 长时间 FullGC 等。
-
同步等待:服务间采用同步调用模式,同步等待造成的资源耗尽。
1.3 雪崩效应应对策略
针对上述的常见场景,需要给出不同的策略来应对,主要有如下几个方面,参考如下:
-
硬件故障:分服甚至分机房容灾、异地多活等。
-
流量激增:服务动态扩缩容,流量控制(熔断,限流,超时重试)等。
-
缓存穿透:缓存预加载、异步加载,设置不定的过期时间等。
-
程序的健壮性:修复程序漏洞、避免内存泄漏、及时释放资源 等等。
-
同步等待:资源隔离、MQ 解耦、不可用服务调用快速失败(超时能力)等。
综合上述的内容可知&#