很多同学知道我在美团点评负责稳定性保障平台的研发,平台中的功能之一就有服务的熔断降级,提起熔断降级,大家可能熟悉的是Netflix的开源组件Hystrix,但是我们并没有在它的基础上进行二次开发,而是重新撸了一个,可能有人说,重复造轮子不是浪费时间吗?那如果造出的轮子更好用、跑的更快呢,所以不要怕造轮子,只有不断的创新,才有不断的进步。
首先看看为什么需要熔断降级呢?
服务的稳定是公司可持续发展的重要基石,随着业务量的快速发展,一些平时正常运行的服务,会出现各种突发状况,而且在分布式系统中,每个服务本身又存在很多不可控的因素,比如线程池处理缓慢,导致请求超时,资源不足,导致请求被拒绝,又甚至直接服务不可用、宕机、数据库挂了、缓存挂了、消息系统挂了...
对于一些非核心服务,如果出现大量的异常,可以通过技术手段,对服务进行降级并提供有损服务,保证服务的柔性可用,避免引起雪崩效应。
如果ServiceA调用ServiceD一直失败,或者失败率很高,就可以采用“一种机制”确保后续请求不会调用ServiceD,而是执行降级逻辑。
这里的这个机制就是熔断降级,熔断降级的实现原理也很简单,看下面这个图:
1、实时监控接口的健康值,在达到熔断条件时,自动开启熔断
2、开启熔断之后,如何实现自动恢复?每隔一段时间,释放一个请求到服务端进行探测,如果后端服务已经恢复,则自动恢复
当然了,具体实现,这里就不细讲了。
这里说下,为什么没用使用Hystrix进行二次开发,主要是有下面几点考虑:
1、内置的参数配置无法动态修改
2、复杂的代码设计,扩展新功能难度大
3、业务接入负责,方式不够人性化
4、压测时性能,令人担忧
通过自研,可以自由把控任何细节,和内部框架无缝集成。