熔断机制的应用场景非常广泛,主要适用于分布式和高并发场景。
在分布式系统中,不同服务之间相互调用,调用关系异常复杂,某一环不稳定,如网络连接缓慢,超时,依赖服务过载。某个服务故障,导致服务不可用的情况就可能会层层级联,最终导致整个链路都不可用。
在高并发场景,访问量会远远超出系统所能够处理的并发数。比如双618大促、秒杀等,在没有任何保护机制的情况下,如果所有的流量都进入服务器,很可能造成服务器宕机导致整个系统不可用,从而造成巨大的损失。
针对分布式和高并发的场景,可以采用服务熔断的方式进行简单解决。熔断机制的基本操作是在应用程序中设置一个阈值,当服务的响应时间或错误率超过该阈值时,自动开启熔断器,拒绝对该服务的请求。在熔断器开启后,应用程序会自动返回一个错误信息,告诉调用方该服务已经不可用,同时记录该服务的状态,监控服务的健康状况,等待服务恢复后自动关闭熔断器,重新接受对该服务的请求。当然如此处理有些简单粗暴,为此我们在可以借助开源的工具进行管理,开源工作的判断逻辑细度更细、同时也并非简单的拒绝服务。
目前主流的熔断组件有:常见的微服务限流组件有RateLimiter/Hystrix/Sentinel等。
RateLimiter是Google开源工具包Guava提供的基于令牌锁算法实现的限流工具类。由于使用的是令牌锁算法,故需要设置令牌的上限。
Hystrix是Spring Cloud框架中Netflix组件中的一个组件,提供了限流、熔断、降级等功能。
Sentinel是阿里巴巴开源,以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
在项目落地中,参考本研发的技术能力和客户对于性能、功能的要求,选择合理的开源组件进行二次开发可以大大提高我们的工作效率。