每日一博 | Spring Cloud 的限流、降级和熔断 —— Hystrix
一、前言 分布式系统环境中,服务间类似依赖非常常见,一个业余调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象称为雪崩效应。 二、雪崩效应 1、常见场景 (1)硬件故障:如服务器宕机,机房断电,光纤被挖断等。 (2)流量激增:如异常流量,重试加大流量等。 (3)缓存穿透:一般发生在应用重启,所有缓存失效时,以及短时间内大量缓存失效时。大量的缓存不命中,使请求直击后端服务,造成服务提供者超负荷运行,引起服务不可用。 (4)程序bug:如程序逻辑导致内存泄漏,JVM长时间FullGC等。 (5)同步等待:服务间采用同步调用模式,同步等待造成的资源耗尽。 2、应对策略 针对造成雪崩效应的不同场景,可以使用不同的应对策略,没有一种通用所有场景的策略。 (1)硬件故障:多机房容灾、异地多活等。 (2)流量激增:服务自动扩容、流量控制(限流、关闭重试)等。 (3)缓存穿透:缓存预加载、缓存异步加载等。 (4)程序bug:修改...


