最近看这方面的信息 简单了解了下 写下随笔
背景介绍
基于服务拆分之后,各类远程调用横行的年代, 我们很容易出现的系统层级情况就是一个业务支撑需要N多服务,简单说下,图网上有的是就不贴了。假设有三层应用调用 A-B-C ,A对外提供列表服务,需要N个B和M个C,同时B也需要X个C,我们假设一个调用链路中的某个C系统故障 ,那A或者B 调用C时 就会被hold住,从而无法正常响应, 以此为例 A机器100个线程均被hold住之后基本上这个服务也就被C的这个故障给拖垮了,这就是所谓的雪崩效应吧,这时候我们就引入了熔断的概念,熔断 ,主要是针对CS调用中 C端针对现有系统状态实时的一个策略,可以有效防止x雪崩效应。
简单说下自己看Hystrix熔断代码,自己简单的一些收获。
我们以A-B的调用为例简单介绍下
1、A到B的直接调用改为间接调用,中间做一层适配,具体实现方式不限
2、在真实调用之前提供一个熔断检测的allowRequest方法,该方法主要是控制是否熔断和熔断后尝试这两部分情况,
熔断 最简单就是靠失败计数器即可,在真实调用出现问题之后,计数器+1 当计数器失败数量达到熔断阈值时直接熔断
熔断中尝试 使用的是时间周期处理,在开始熔断的时候记录下最后一次访问系统时间,然后根据实时访问的系统时间是否大于最后时间+熔断周期 判断是否要发起尝试。
熔断和尝试两者有一个通过时直接调用B应用,否则 直接走快速失败的fallback。
3、系统如果正常调用则重置熔断数据,否则继续熔断等下个周期重试