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

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

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

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

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

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

断路器模式设计状态机

注意事项

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

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

断路器模式业界Java实现

参考


android 滑动菜单SlidingMenu的实现的更多相关文章

  1. Android 滑动菜单SlidingMenu

    首先我们看下面视图: 这种效果大家都不陌生,网上好多都说是仿人人网的,估计人家牛逼出来的早吧,我也参考了一一些例子,实现起来有三种方法,我下面简单介绍下: 方法一:其实就是对GestureDetect ...

  2. android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]

    http://blog.csdn.net/jj120522/article/details/8095852 示意图就不展示了,和上一节的一样,滑动菜单SlidingMenu效果如何大家都比较熟悉,在这 ...

  3. android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu

    示意图就不展示了,和上一节的一样,滑动菜单SlidingMenu效果如何大家都比较熟悉,在这里我简单说明一下用自定义ViewGroup来实现. 实现方法:我们自定义一个ViewGroup实现左右滑动, ...

  4. Android滑动菜单框架完全解析,教你如何一分钟实现滑动菜单特效

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744400 之前我向大家介绍了史上最简单的滑动菜单的实现方式,相信大家都还记得.如 ...

  5. 如何使用滑动菜单SlidingMenu?

    左側滑: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanVuaHVhaG91c2U=/font/5a6L5L2T/fontsize/400/fill/I ...

  6. 它们的定义android滑动菜单

    在这里实现了两个滑动菜单效果,的拖放内容的第一部分,菜单拖出像这样的效果感觉,另一种是拖动内容.后面的内容固定菜单.我感觉有层次感的效果,如下面 第一种效果的代码实现例如以下: package com ...

  7. android ——滑动菜单

    一.DrawerLayout是一个拥有两个子控件的布局,第一个子控件是主屏幕中显示的内容,第二个子控件是滑动菜单中显示的内容: <android.support.v4.widget.Drawer ...

  8. Android 滑动菜单框架--SwipeMenuListView框架完全解析

    SwipeMenuListView(滑动菜单) A swipe menu for ListView.--一个非常好的滑动菜单开源项目. Demo 一.简介 看了挺长时间的自定义View和事件分发,想找 ...

  9. Android滑动菜单使用(MenuDrawer和SlidingMenu)

    项目地址: https://github.com/gokhanakkurt/android-menudrawer   https://github.com/jfeinstein10/SlidingMe ...

随机推荐

  1. 【好玩的应用】QQ连连看辅助工具

    自己学了这么久的C语言,但没有写出过什么可以用的东西来,总觉得心里不爽.这几天实在是不想干正事,在网上瞎逛逛,结果发现有人写了连连看的外挂.顿时觉得这很有意思啊.于是把代码下载下来,捣鼓了捣鼓.发现还 ...

  2. POJ 2253 Frogger(floyd)

    http://poj.org/problem?id=2253 题意 : 题目是说,有这样一只青蛙Freddy,他在一块石头上,他呢注意到青蛙Fiona在另一块石头上,想去拜访,但是两块石头太远了,所以 ...

  3. 0环境设置 - AUTOTRACE设置

    Autotrace是sqlplus的一个工具,用来显示所执行查询的查询计划 设置步骤 • cd [ORACLE_HOME]/rdbms/admin• log into SQL*Plus as SYST ...

  4. [杂题]URAL2047. Maths

    题意:构造一个长度为n的串,使得 除了第一个以外,每个位置的前缀和的因子个数恰好等于该位置上的数. n$\le 100000$ 举个例子$a_i$:2   4    6     6    4    8 ...

  5. ASP.NET MVC 3 Razor 视图引擎 基本语法

    本篇博文将进入MVC 3 的世界了,首先学习一下MVC 3 新增的Razor视图引擎的基本语法. 1. 使用 @ 字符将代码添加到页面中.正如传统的aspx视图的<% %>相同.      ...

  6. 在C#中怎么调用Resources文件中的图片

    譬如资源中有名为myPic的图片,在代码中可以这么使用: this.BackgroundImage = Properties.Resources.myPic; 如有疑问,继续追问.

  7. Spring的父子容器问题

    在ssm框架搭建的时候 配置了一个Spring容器,又配置了一个前端控制器 <!-- 初始化spring容器 --> <context-param> <param-nam ...

  8. HS-T912 adb 连接配置

    手机丢了,花300大洋买的新手机阿...不讨论好不好用,只说怎么用. 安装驱动 linux 跳过 插上电脑,在__通知__里面打开__USB 连接__,会弹出__USB 设置__对话框. 选择__海信 ...

  9. css3 去掉点击高光(移动端)

    在我们用手机浏览网页时,当点击某个链接或者点击事件时 会出现一层蓝色半透明的高光显示, 但在开发webapp时,由于网页是被native load去的,在app里面点击的时候如果出现高光则显得很不和谐 ...

  10. java.lang.NoSuchMethodError: No static method setLayoutDirection(Landroid/graphics/drawable/Drawable;I)V in class Landroid/support/v4/graphics/drawable/DrawableCompat

    Bug: java.lang.NoSuchMethodError: No static method setLayoutDirection(Landroid/graphics/drawable/Dra ...