hytrix的python实现

https://github.com/last9/pyhystrix/blob/master/circuit_breaker.py

整体介绍:

https://blog.csdn.net/f641385712/article/details/104557387/?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-10&spm=1001.2101.3001.4242

案例介绍:

https://blog.csdn.net/kxj19980524/article/details/87009660

正文

首先我们需要搞清楚的一个问题就是,断路器断的是什么?断路器断的其实就是我们对依赖服务的调用,而我们对依赖服务的调用其实被包装在HystrixCommand里面,断路器断的就是HystrixCommand是否需要对依赖服务发起请求,更直白的一点说,就是断HystrixCommand

断路的话,表示不能对依赖服务发起请求了。

Retry重试模式 vs 断路器模式

熔断器模式和重试模式有何区别呢?其实两者区别非常明显:

Retry重试模式:不断重试去调用目标方法/远程服务,直到最后成功(或者达到超时或者最大重试次数)为止。
HystrixCircuitBreaker断路器模式:保护每个commandKey对应的程序,防止被拖垮、避免一些无意义的请求尝试。

断路器的三种状态

  • 关闭状态(Closed):断路器关闭,流量可以正常进入
  • 打开/熔断状态(Open):断路器打开,即circuit-breaker熔断状态,拒绝所有流量,走降级逻辑(客户端来实现服务降级)
  • 半开状态(Half-Open):断路器半开状态,Open状态过一段时间(默认5s)转为此状态来尝试恢复。此状态时:允许有且仅一个请求进入,一旦请求成功就关闭断路器。请求失败就到Open状态(这样再过5秒才能转到半开状态)
  •  

     

限流:即限制流量的最大值,是流控的一种方式。

(在哪里实现限流???)

如果做一个简单的限流功能,那是比较容易的,使用常见的限流方案即可比较轻松的实现(当然和算法强相关)。
但如果想做更精准的控制、处理后的细分和快速恢复,还有大量的工作需要做。很多RPC框架也自带流控和熔断功能,比如Dubbo,但功能不够强大,大多需要人工手动操作,离自动还有段距离,这也是为啥需要将其作为一套单独的解决方案的原因,因为它非常重要且对自动化(自愈)要求较高。

降级:(客户端来做)

降级:即我们常说的服务降级,其实来自于服务等级(或服务分级),根据服务的质量、功能或其他指标,人为的将服务分成多个等级,便于我们分析和定位服务级别,而服务降级指的是当达到某个条件或特殊场景时,需要下调服务等级。比如常见的降级可分为如下几步(仅供参考):

  • 可配置的降级策略:策略一定得可配置,因为不同的服务对服务的质量定义不一样,降级的方案也将不一样
  • 可识别的降级边界:降级边界主要用来植入降级逻辑
  • 数据采集:这些数据可以是当前某段时间的数据,也可以是很长一段时间的历史数据(比如超时时间应该根据采集统计出来的分位数如p99来定)
  • 行为干预:进入降级状态后将会对正常的业务流程产生干预,可能是限流、熔断,也可能是同步流程变为异步流程等(比如发送MQ的变成oneway的形式)等
  • 结果干预:是返回null,还是默认值
  • 快速恢复:如何自动从降级状态变回正常状态
     

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

知乎上面的hystrix实现,测试使用。

https://zhuanlan.zhihu.com/p/102739156

posted on 2020-11-24 15:49  毛无语666  阅读(356)  评论(0编辑  收藏  举报

导航