Hystrix实现原理

本文详细介绍了Hystrix的工作原理,包括命令模式的应用,HystrixCommand和HystrixObservableCommand的执行流程,以及断路器的实现机制。断路器通过监控请求成功率和错误率来决定是否开启熔断,保护系统免受不稳定依赖的影响。此外,还讨论了线程池和信号量在依赖隔离中的角色,确保服务的稳定性和性能。

Hystrix实现原理

在了解hystrix的工作原理之前,我们先来了解一下命令模式

命令模式

命令模式的定义: 将请求封装成一个对象,从而让用户使用不同的请求把客户端参数化,以及支持可撤销和恢复的功能。

命令模式常用的对象

Command:请求封装成的对象,该对象是命令模式的主角。也就是说将请求方法封装成一个命令对象,通过操作命令对象来操作请求方法。在命令模式是有若干个请求的,需要将这些请求封装成一条条命令对象,客户端只需要调用不同的命令就可以达到将请求参数化的目的。将一条条请求封装成一条条命定对象之后,客户端发起的就是一个个命令对象了,而不是原来的请求方法!

Receiver:有命令,当然有命令的接收者对象:如果有只有命令,没有接受者,那不就是光棍司令了?没有电视机或者电脑主机,你对着电视机遥控器或者电脑键盘狂按有什么用?Receiver对象的主要作用就是收到命令后执行对应的操作。对于点击遥控器发起的命令来说,电视机就是这个Receiver对象,比如按了待机键,电视机收到命令后就执行了待机操作,进入待机状态。

Client: 但是有一个问题摆在眼前,命令对象现在已经有了,但是谁来负责创建命令呢?这里就引出了客户端Client对象,再命令模式中命令是有客户端来创建的。打个比方来说,操作遥控器的那个人,就是扮演的客户端的角色。人按下遥控器的不同按键,来创建一条条命令。

Invoker:现在创建命令的对象Client也已经露脸了,它负责创建一条条命令,那么谁来使用或者调度这个命令呢?--命令的使用者就是Invoker对象了,还是拿人,遥控器,电视机来做比喻,遥控器就是这个Invoker对象,遥控器负责使用客户端创建的命令对象。该Invoker对象负责要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。

 以上内容摘自:

设计模式之命令模式_菜鸟博客-优快云博客_命令模式

在下面这些情况下应考虑使用命令模式。

• 使用命令模式作为 “ 回调(CallBack) "在面向对象系统中的替代。"CallBack"讲的

便是先将 一个函数登记上, 然后在以后调用此函数。

• 需要在不同的时间指定请求、 将请求排队。 一个命令对象和原先的请求发出者可以

有不同的生命期。 换言之, 原先的请求发出者可能已经不在了, 而命令对象本身仍

然是活动的。这时命令的接收者可以是在本地, 也可以在网络的另外一个地址。命

令对象可以在序列化之后传送到另外一台机器上去。

• 系统需要支持命令的撤销。命令对象可以把状态存储起来, 等到 客户端需要撤销命

令所产生的效果时, 可以调用undo()方法, 把命令所产生的效果撤销掉。命令对

象还可以提供redo()方法, 以供客户端在需要时再重新实施命令效果。

• 如果要将系统中所有的数据更新到日志里,以便在系统 崩溃时,可以根据日志读回

所有的数据更新命令, 重新 调用 Execute()方法 一条一条执行 这些命令, 从而恢

复系统在崩溃前所做的数据更新。

Netflix hystrix实现原理

工作流程图

上图摘自官网:

https://raw.githubusercontent.com/wiki/Netflix/Hystrix/images/hystrix-command-flow-chart.png

官网介绍如下:How it Works · Netflix/Hystrix Wiki · GitHub

1. 创建HystrixCommand或HystrixObservableCommand对象

首先,构建一个HystrixCommand或是HystrixObservableCommand对象,用来表示对依赖服务的操作请求, 同时传递所有需要的参数。 从其命名中我们就能知道它采用了 “命令模式” 来实现对服务调用操作的封装。 而这两个 Command 对象分别针对不同的应用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值