zoukankan      html  css  js  c++  java
  • Spring Cloud Hystrix 学习(一)

    在学习Hystrix之前,首先引入一个问题场景,服务雪崩。如下图所示:

    可以看到,三个入口服务A、B、C最终都会请求到服务T。当服务T的请求过载,打满CPU都无法匹配请求的频率时,同步调用的上级服务就会逐级发生阻塞,最终导致所有服务陷入瘫痪状态,这就是服务雪崩的一种场景。如何解决雪崩?常见的几种方式就是降级、隔离、熔断、请求缓存以及请求合并。那么Hystrix是如何实现这几个功能的呢?在开始代码实践前,有必要对原理进行一定程度的了解。

    再通过一张流程图来加深对上方图中链路的理解:

    1. 构造一个 HystrixCommand或HystrixObservableCommand对象,用于封装请求,并在构造方法 配置请求被执行需要的参数;

    2. 执行命令,Hystrix提供了4种执行命令的方法,后面详述;

    3. 判断是否使用缓存响应请求,若启用了缓存,且缓存可用,直接使用缓存响应请求。Hystrix支持请求缓存,但需要用户自定义启动;

    4. 判断熔断器是否打开,如果打开,跳到第8步;

    5. 判断线程池/队列/信号量是否已满,已满则跳到第8步;

    6. 执行HystrixObservableCommand.construct()或HystrixCommand.run(),如果执行失败或者超时跳,到第8步;否则,跳到第9步;

    7. 统计熔断器监控指标;

    8. 走Fallback备用逻辑;

    9. 返回请求响应

    参考资料:

    https://www.cnblogs.com/yb-ken/p/15068392.html

    http://www.uml.org.cn/wfw/201906063.asp?artid=22057

  • 相关阅读:
    cuda基础----流
    cuda基础---异步并行执行
    cuda基础---cuda通信机制
    cuda基础-----cuda编程模型/软件体系/存储器模型
    大顶堆 小顶堆应用----中位数查找
    Maven配置阿里云镜像
    C++中bool型变量按位取反总是为true
    区分C++的继承、覆盖、隐藏、重载
    C++Primer第5章 语句
    C++Primer第4章 表达式
  • 原文地址:https://www.cnblogs.com/xuzichao/p/15308752.html
Copyright © 2011-2022 走看看