一 面临问题
分布式服务的容错是一个不得不考虑的问题,通常的做法有两种。
重试机制:预期是因为一些短暂的故障问题,通过重试是可以解决的。
断路器模式:发生故障,而且故障是不可预期的,设置一个超时时间来等待返回结果,若是失败的话返回一个null值来解决服务调用。
继续延伸的看断路器充当可能失败操作的代理。代理应监测最近发生的故障数量,然后使用这个信息来决定是否允许该操作继续进行,或简单地立即返回一个异常。
二 解决方案
两种模式并不是互相排斥的,是可以互相演化的两种模式。
微软的技术中心提出了一种解决方案:http://msdn.microsoft.com/en-us/library/dn589784.aspx。个人觉得太过复杂,概念过多。
说下自己的思路,既然我们是一个代理,那么需要关心的问题就是:
1.基于什么策略关闭断路器
2.基于什么策略开启断路器
最简单的思路:
我们需要一个定时器,定时的记录服务调用情况:失败次数,成功次数
关闭策略:在N个定时周期内:失败率高于M%(50%),那么就开启断路器,通过返回null或是异常处理。调用还是继续进行。
开启策略:在顺延N个时间周期内,失败率低于M%,关闭断路器,返回正常的结果。
三 业界实现
业界已经有的开源框架有:https://github.com/Netflix/Hystrix
0 条评论。