采用断路器设计模式来保护软件-java开发java经验技巧

采用断路器设计模式来保护软件-java开发java经验技巧

ID:30940430

大小:114.82 KB

页数:6页

时间:2019-01-04

采用断路器设计模式来保护软件-java开发java经验技巧_第1页
采用断路器设计模式来保护软件-java开发java经验技巧_第2页
采用断路器设计模式来保护软件-java开发java经验技巧_第3页
采用断路器设计模式来保护软件-java开发java经验技巧_第4页
采用断路器设计模式来保护软件-java开发java经验技巧_第5页
资源描述:

《采用断路器设计模式来保护软件-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、采用断路器设计模式来保护软件-编程开发技术采用断路器设计模式来保护软件木文由ImportNew・乔永琪翻译自InduAlagarsamy。欢迎加入翻译小组。转载请见文末要求。程序员的人生就像在一个快车道上行驶。几周甚至几小时完成某些特性编码,打包测试没冇问题,盖上QA认证,代码部署到生产环境。然而最坏的事情发生了,你所部署的软件在运行中挂掉了。用墨菲法则来说,就是“会出错的,终将出错”。但是,如果我们在写代码吋就能考虑到这些问题会怎样?那么我们该如何应对,将不好的事情转变为好的事情呢?10100001101101000101001101

2、00101000101010010idlOOUi^10101001010101010111001111100011^0010101010^电子技术拯救了我们至今记得我和哥哥因为电涌不得不更换家里的保险丝情景,那时我对事件的严重程度一无所知,而他却已经是电力方而的小能手了。保险丝完全烧坏了,但它却保护了我家的电视机。在电子工程领域,保险丝和断路器用(CircuitBreaker)來处理这样的问题,即超大功率可能带來一些严重的破坏,譬如毁坏电了设备甚至烧掉整个屋子。保险丝包含一个小电线丝,电量过人时就会融化,就像烧掉的电灯泡,阻止危险的电流

3、,保护了电器和房屋。保险丝演变成断路器,通常利用电磁铁就可以断开电路,而不用烧掉它,这样断路器就可以重置反复地用。不过,它们的功能都是一样的,检测负载,接着迅速停止工作,保全其它部分不受破坏。冋过头再想,这是一个多么神奇的概念。仅仅坏掉某个控件——保险丝彻底坏掉,就可以避免了整个系统的严重损坏。多亏电涌后保险丝自熔,保住了电视机。那么我们可不可在软件屮做同样的事情?坏事发生后,软件屮的某个控件会迅速停止工作。模仿现实生活中的场景,由此我们创造了断路器设计模式。在分布式系统屮,某些故障是短暂的,通过快速连续重试就可以解决问题;但在某些场景

4、中,关键依赖的连接丢失了,短时间无法恢复。比如,某个应用失去了与云中的持续化存储连接。在这样的场景中,关闭服务就可以避免错课的数据处理过程、其至数据丢失或者级联故障,进而防止对系统其它部分的进一步损坏。借助于迅速停止工作(failingfast),运维系统就可以容易地进行监控和响应。在它们重视起来之前,那些徒劳尝试重新连接的服务看起来仍然是正常的,因为本应该拉响的警报没冇响起。倘若某个服务在恰当的吋候彻底失效,警告灯熄灭T,运维人员就会知晓问题所在,并及时做出响应。断路器设计模式在系统中可重用基础架构实现断路器设计模式是很容易实现的,它

5、是这么发挥作用的:1定义一个可重用的CircuitBreaker类,包含Trip和Reset方法,以及断路器跳闸就可以调用的action2利用CircuitBreaker去监控系统依赖。针对每个单一的故障,断路器跳闸就会将其设置在一种布防状态,就像电涌出现时那样。3倘若接下来在特定的吋间窗口内尝试成功,那么就重置此断路器,一切恢复正常。4倘若断路器没有在特定的时间重置,异常会持续发生,此时断路器就会调用你捉供的actiono你可以在断路器跳闸时选择快速停止工作(终止进程)或者其他actiono应用案例木例中ExtcrnalServicc

6、Adaptcr类帮助系统与外部依赖建立连接。或许有个网络程序产生请求频繁地执行DoStuff操作。一旦执行,若此时GetConnection执行出错,界常就会发生,断路器就会被跳闸。倘若连接重新建立起来,断路器就会被重置。不过连接异常持续发生吋,断路器就会跳闸,特定的跳闸action就会执行,在本例中将会迅速停止工作。publicclassExtcrndlScrviccAdeipterprivateCircuitBreakercircuitBreaker;publicExternalServiceAdapter(){circuitBre

7、aker=newCircuitBreaker(z,CheckConnection,/,/*断路器名称*/exception=>/*一旦断路器跳闸此action就会被调用*/{Console.WritcLinc(〃Circuitbreakertripped!Failfast!〃);〃终止进程,略过接下来的任何try/finally块或者finalizersEnvironment.FaiIFast(except!on.Message);}3,/*断路器跳闸前的最大阈值*/TimeSpan.FromSeconds(2));/*Timetowa

8、itbetweeneachtrybeforeattemptingtotripthecircuitbreaker*/}publicvoidDoStuff(){varexterrmlService二GetCon

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。