设计–断路器模式

一 面临问题

分布式服务的容错是一个不得不考虑的问题,通常的做法有两种。
重试机制:预期是因为一些短暂的故障问题,通过重试是可以解决的。
断路器模式:发生故障,而且故障是不可预期的,设置一个超时时间来等待返回结果,若是失败的话返回一个null值来解决服务调用。
继续延伸的看断路器充当可能失败操作的代理。代理应监测最近发生的故障数量,然后使用这个信息来决定是否允许该操作继续进行,或简单地立即返回一个异常。

二 解决方案

两种模式并不是互相排斥的,是可以互相演化的两种模式。
微软的技术中心提出了一种解决方案:http://msdn.microsoft.com/en-us/library/dn589784.aspx。个人觉得太过复杂,概念过多。
说下自己的思路,既然我们是一个代理,那么需要关心的问题就是:
1.基于什么策略关闭断路器
2.基于什么策略开启断路器

最简单的思路:
我们需要一个定时器,定时的记录服务调用情况:失败次数,成功次数
关闭策略:在N个定时周期内:失败率高于M%(50%),那么就开启断路器,通过返回null或是异常处理。调用还是继续进行。
开启策略:在顺延N个时间周期内,失败率低于M%,关闭断路器,返回正常的结果。

三 业界实现

业界已经有的开源框架有:https://github.com/Netflix/Hystrix

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>