2019独角兽企业重金招聘Python工程师标准>>>

断路器是电器时代的一个重要组成部分,后面总是有保险丝熔断或跳闸的断路器是安全的重要保障。

微服务最近几年成为软件架构的热门话题,其益处多多。但需要知道的是,一旦开始将单块系统进行分解,就上了分布式系统的山头。

在云或分布式系统环境中,任何对一致性或可靠性的表述就是谎言。我们必须假设微服务的行为或其服务器位置会经常变动,其结果就是组件有时会提供低质量服务甚至可能彻底无法提供服务。这些微服务的故障如果没有处理好,将导致整个系统的故障。

微服务的故障可能是瞬时故障:如慢的网络连接、超时,资源过度使用而暂时不可用;也可能是不容易预见的突发事件的情况下需要更长时间来纠正的故障。

分布式服务的容错是一个不得不考虑的问题,通常的做法有两种:

  • 重试机制:对于预期的短暂故障问题,通过重试模式是可以解决的。
  • 断路器(CircuitBreaker)模式:将受保护的服务封装在一个可以监控故障的断路器对象中,当故障达到一定门限,断路器将跳闸(trip),所 有后继调用将不会发往受保护的服务而由断路器对象之间返回错误。对于需要更长时间解决的故障问题,不断重试就没有太大意义了,可以使用断路器模式。

断路器模式设计状态机

注意事项

在决定如何实现这个模式时,您应考虑以下几点:

  • 异常处理。通过断路器调用操作的应用程序必须能够处理在操作不可用时可能被抛出的异常,该类异常的处理方式都是应用程序特有的。例如,应用程序会暂时降级其功能,调用备选操作尝试相同的任务或获取相同的数据,或者将异常通知给用户让其稍后重试。
  • 异常类型。一个请求可能由于各种原因失败,其中有一些可能表明故障严重类型高于其他故障。例如,一个请求可能由于需要几分钟才能恢复的远程 服务崩溃而失败,也可能由于服务暂时超载造成的超时而失败。断路器有可能可以检查发生的异常类型,并根据这些异常本质调整策略。例如,促使切换到开状态 (跳闸)的服务超时异常个数要远多于服务完全不可用导致的故障个数。
  • 日志记录。一个断路器应记录所有失败的请求(如果可能的话记录所有请求),以使管理员能够监视它封装下受保护操作的运行状态。
  • 可恢复性。应该配置断路器成与受保护操作最匹配的恢复模式。例如,如果断路器设定出入开状态的时间很长,即使底层操作故障已经解决它还会返回错误。如果开状态到半开状态切换过快,底层操作故障还没解决它就会再次调用受保护操作。
  • 测试失败的操作。在开状态下,断路器可能不用计时器来确定何时切换到半开状态,而是通过周期性地查验远程服务或资源以确定它是否已经再次可用。这个检查可能采用上次失败的操作的形式,也可以使用由远程服务提供的专门用于测试服务健康状况的特殊操作。
  • 手动复位。在一个系统中,如果一个失败的操作的恢复时间差异很大,提供一个手动复位选项以使管理员能够强行关闭断路器(和复位故障计数器)可能是有益的。同样,如果受保护操作暂时不可用,管理员可以强制断路器进入放状态(并重新启动超时定时器)。
  • 并发。同一断路器可以被应用程序的大量并发实例访问。断路器实现不应阻塞并发请求或对每一请求增加额外开销。
  • 资源分化。当断路器使用某类可能有多个底层独立数据提供者的资源时需要特别小心。例如,一个数据存储包含多个分区(shard),部分分区 出现暂时的问题,其他分区可能完全工作正常。如果该场景中的错误响应是合并响应,应用程序在部分故障分区很可能会阻塞整个请求时仍会试图访问某些工作正常 的分区。
  • 加速断路。有时失败响应对于断路器实现来说包含足够的信息用于判定应当立即跳闸并保持最小时间量的跳闸状态。例如,从过载共享资源的错误响应可能指示不推荐立即重试,且应用程序应当隔几分钟时间之后重试。
    如果一个请求的服务对于特定Web服务器不可用,可以返回HTTP协议定义的“HTTP 503 Service Unavailable”响应。该响应可以包含额外的信息,例如预期延迟持续时间。
  • 重试失败请求。在开状态下,断路器可以不是快速地简单返回失败,而是将每个请求的详细信息记录日志并在远程资源或服务重新可用时安排重试。
  • 对外部服务的不恰当超时。当对外部服务配置的超时很大时,断路器可能无法保护其故障操作,断路器内的线程在指示操作失败之前仍将阻塞到外部服务上,同时很多其他应用实例仍会视图通过断路器调用服务。

断路器模式业界Java实现

GitHub:jrugged:CircuitBreaker类源代码

GitHub:Netflix/hystrix

参考

Martin Fowler:CircuitBreaker

MSDN:Circuit Breaker Pattern

Protect your software with the Circuit Breaker design pattern

转载于:https://my.oschina.net/u/2357525/blog/759538

断路器(CircuitBreaker)设计模式相关推荐

  1. 理解断路器CircuitBreaker的原理与实现

    CircuitBreaker的原理# 现实生活中的熔断器(更多时候被称为保险丝)是一种安装在电路中用于保证电路安全运行的电子元件.它的外形一般是一个绝缘的玻璃容器包裹着一段固定大小电阻和固定熔点的纤细 ...

  2. SpringCloud-06-Hystrix断路器

    Hystrix断路器 1. 概述 1. 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败.这就造成有可能会发生服务雪崩.那么什么是服务雪崩呢 ...

  3. 宇宙条一面:十道经典面试题解析

    前言 有位朋友面试了宇宙条,后端方向.整理了这几道面试真题以及答案,如有错误,欢迎大家留言区讨论哈.金九银十冲刺,面试的小伙伴加油呀. 1.http请求头里,expire和cache-control字 ...

  4. 分库分表下极致的优化

    题外话 这边说一句题外话,就是ShardingCore目前已经正式加入 NCC 开源组织了,也是希望框架和社区能发展的越来越好,希望为更多.netter提供解决方案和开源组件 介绍 依照惯例首先介绍本 ...

  5. 三分钟学会.NET微服务之Polly

    熔断降级是一个非常重要的概念,我们先说一下什么是熔断降级,咱们都知道服务发现,一个有问题的服务器没来得急注销过一会就崩溃掉了,那么我们的请求就有可能访问一个已经崩溃的服务器,那么就会请求失败,因为已经 ...

  6. 翻译:Hystrix - How To Use

    转载请注明出处: 翻译:Hystrix - How To Use Hello World! 下面的代码展示了HystrixCommand版的Hello World: public class Comm ...

  7. [Kong 与 Konga 与 Postgres数据库] 之 Kuberneres 部署

    1.Kong的概述 Kong是一个clould-native.快速的.可扩展的.分布式的微服务抽象层(也称为API网关.API中间件或在某些情况下称为服务网格)框架.Kong作为开源项目在2015年推 ...

  8. 程序员欣宸的文章分类汇总

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于代码仓库 代码仓库里是博客中涉及的源码和文件,地址 ...

  9. 第四章 微服务容错Resilience4j

    4.1 微服务容错简介 在⾼并发访问下,⽐如天猫双11,流量持续不断的涌⼊,服务之间的相互调⽤频率突然增加,引发系统负载过⾼,这时系统所依赖的服务的稳定性对系统的影响⾮常⼤,⽽且还有很多不确定因素引起 ...

  10. 四,微服务容错Resilience4j(待改)

    写在前面的话:本文大部分(说全部也没问题)都是抄写的,课堂的资料给的特别好.感觉耻于提笔,但不写上就影响整个博客内容了.以后会改/写出我的笔记的. 感谢你的路过,希望学生的笔记能给你一点微不足道的参考 ...

最新文章

  1. Gamma校正及其OpenCV实现
  2. spider RPC入门指南
  3. android动画帧率_Android动画进阶—使用开源动画库nineoldandroids
  4. web程序设计(2)....开发流程?
  5. 对刚iPad!华为最强Pad发布,独揽四项全球第一,3299元起!
  6. 今日恐慌与贪婪指数为95 贪婪程度有所上升
  7. Python的for循环显示每个元素的下标
  8. 配置linux的web服务
  9. 接口交互时的URL带有日期格式的参数,注意拼装地址中的特殊符号(如空格等)
  10. ArcGIS10.2安装的详细步骤、注意事项及许可变永久操作
  11. 高质量程序设计指南C++/C试题
  12. 尺度、空间异质性、干扰、景观多样性、景观连接度,对其概念的理解
  13. 努力和勤奋是一对反义词
  14. 实现谷歌浏览器打开海康视频等OCX控件
  15. 网络远程访问的方式使用树莓派
  16. java集成RSA非对称加密数据传输
  17. 修改历史git提交用户名和邮箱错误,解决没有小绿点
  18. 阿里巴巴:互联网架构将成企业IT发展刚需
  19. 在有M1芯片的Mac上安装微信、抖音等软件
  20. 北京自考毕业论文的各种TIPS

热门文章

  1. ActiveMQ Topic发布订阅消息
  2. NuGet程序包安装SQLite后完全抽离出SQLite之入门介绍及注意事项,你真的懂了吗?...
  3. CentOS 系统盘迁移
  4. Java 9 揭秘(9. 打破模块封装)
  5. python服务器环境搭建(2)——安装相关软件
  6. 数据库事务的四个隔离级别
  7. php+js 表单过期
  8. 关于子网掩码的是是非非
  9. 想到Exchanger N parties的一种用法
  10. Golang入门(4):并发