Spring Cloud Hystrix实现原理

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 · GitHubHystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable. - How it Works · Netfli

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值