在微服务系统中,往往需要一些手段来应对流量激增的情况。例如,弹性伸缩,在高流量时自动扩容。但弹性伸缩往往只能在无状态服务上比较容易实现,在有状态的服务,例如数据库、消息中间件、分布式缓存上,是比较难实现的。这时就需要流量控制,只接受系统能处理的流量,拒绝或排队处理不过来的流量,从而保护微服务系统的可用性。
服务在自己处理不过来时,应该拒绝其它服务的请求,保护自己,这就是限流降级。当服务发现它调用一个服务,在发现这个服务“不行”时,应该不再去请求它,从而保护这个服务,但其实也是在保护自己,因为服务“不行”时,往往响应很慢,拒绝请求它避免大量请求在自己服务内堆积,这就是熔断降级。一般而言,限流侧重于流量控制,预防系统被压垮,一般通过拒绝或者排队等流量整形手段应付暂时不能处理的流量。而熔断侧重于在发现依赖的服务“不行”时,如:每秒请求异常数超过多少,每秒请求错误率超过多少时,每秒平均耗时超过多少时,在一个时间窗口内拒绝请求该服务,在一个时间窗口之后再恢复请求,从而保护依赖的服务。当然,服务也可以自己统计自己的错误率,平均耗时等,从而熔断其它服务的调用。
大约 26 分钟