Hystrix 执行时内部原理
2021-09-01 10:37:17 0 举报
Hystrix 执行时内部原理
作者其他创作
大纲/内容
否
circuit breaker是否打开断路器
fallback降级
Reques Cache是否有缓存
发生异常给断路器统计
是
执行command方法
调用command执行方法
返回调用结果
步骤一:创建 command一个 HystrixCommand 或 HystrixObservableCommand 对象,代表了对某个依赖服务发起的一次请求或者调用。创建的时候,可以在构造函数中传入任何需要的参数。HystrixCommand 主要用于仅仅会返回一个结果的调用。HystrixObservableCommand 主要用于可能会返回多条结果的调用。步骤二:调用 command 执行方法执行 command,就可以发起一次对依赖服务的调用。要执行 command,可以在 4 个方法中选择其中的一个:execute()、queue()、observe()、toObservable()。步骤三:检查是否开启缓存从这一步开始,就进入到 Hystrix 底层运行原理啦,看一下 Hystrix 一些更高级的功能和特性。如果这个 command 开启了请求缓存 Request Cache,而且这个调用的结果在缓存中存在,那么直接从缓存中返回结果。否则,继续往后的步骤。步骤四:检查是否开启了断路器检查这个 command 对应的依赖服务是否开启了断路器。如果断路器被打开了,那么 Hystrix 就不会执行这个 command,而是直接去执行 fallback 降级机制,返回降级结果。步骤五:检查线程池/队列/信号量是否已满如果这个 command 线程池和队列已满,或者 semaphore 信号量已满,那么也不会执行 command,而是直接去调用 fallback 降级机制,同时发送 reject 信息给断路器统计。步骤六:执行 command调用 HystrixObservableCommand 对象的 construct() 方法,或者 HystrixCommand 的 run() 方法来实际执行这个 command。步骤七:断路健康检查Hystrix 会把每一个依赖服务的调用成功、失败、Reject、Timeout 等事件发送给 circuit breaker 断路器。断路器就会对这些事件的次数进行统计,根据异常事件发生的比例来决定是否要进行断路(熔断)。如果打开了断路器,那么在接下来一段时间内,会直接断路,返回降级结果。如果在之后,断路器尝试执行 command,调用没有出错,返回了正常结果,那么 Hystrix 就会把断路器关闭。步骤八:调用 fallback 降级机制在以下几种情况中,Hystrix 会调用 fallback 降级机制。断路器处于打开状态;线程池/队列/semaphore满了;command 执行超时;run() 或者 construct() 抛出异常。一般在降级机制中,都建议给出一些默认的返回值,比如静态的一些代码逻辑,或者从内存中的缓存中提取一些数据,在这里尽量不要再进行网络请求了。
线程池、信号量是否已满?
资源已满给断路器统计
是返回调用结果
调用线程
执行是否出错、是否timetout
创建command
0 条评论
回复 删除
下一页