Hystrix学习

=Start=

缘由:

整理学习Hystrix相关的资料,方便日常参考和学习。

正文:

参考解答:
Hystrix是什么?

在分布式环境下,系统不可避免地会遇到依赖服务失效的问题,这些问题可能是依赖服务的高延迟,或者依赖服务抛出异常。使用 Hystrix 增加延迟/失败容忍逻辑,能帮助你解决这些服务之间交互的问题。

Hystrix 能使你的系统在出现依赖服务失效的时候,通过隔离系统所依赖的服务,防止服务级联失败,同时提供失败回退机制,更优雅地应对失效,并使你的系统能更快地从异常中恢复。

引入Hystrix的目的

分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况,容易造成服务的雪崩,影响系统的稳定性。为了应对服务雪崩,一种常见的做法是手动服务降级。虽然能够防止服务发生雪崩效应,但是手段服务降级的方式过于粗暴,人工操作也有一定的响应延迟。因此为了更好的应对这种服务雪崩的场景,为系统引入熔断机制。

系统依赖梳理

前期对需要接入Hystrix的系统的依赖服务进行梳理,主要梳理服务的QPS、TP99、TimeOut等指标,还有服务的调用方式、服务对上层的行为。在梳理完这些指标后,结合系统自身情况,对服务进行分级(分级可以按照业务的重要性或者访问量来进行分级)。

Hystrix整体生态

主要分为五个部分:

  • 多语言支持:对多语言的支持,目前github已有的项目支持Java、Golang和C#。
  • Spring体系的支持:可以与当前spring的热门组件spring boot、spring cloud相结合。
  • 对Netflix体系内部组件的支持
    Servo:     简化JMX MBean的实现,使性能指标数据更容易获取。用于指标的获取,如线程池。
    Eureka:   服务发现,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。
    Archaius:基于java的配置管理类库,主要用于多配置存储的动态获取。主要功能是对apache common configuration类库的扩展。动态配置靠它。
    Turbine:  监控聚合,使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。
  • 对外部项目的融合:主要是项目的捐赠。
    Javanica:使用注解模式接入hystrix需要此jar包。
  • 支持自定义插件:多种类型的自定义插件,可以自研组件集成。
Hystrix设计思想

整体采用舱壁模式的思想来隔离相互之间的依赖关系,并限制对其中任何一个的并发访问。

Hystrix设计原则
  • 防止单个依赖耗尽容器(例如 Tomcat,Jetty)内所有用户线程。
  • 降低系统负载,对无法及时处理的请求快速失败(fail fast)而不是排队。
  • 提供失败回退,以在必要时让失效对用户透明化。
  • 使用隔离机制(例如『舱壁』/『泳道』模式,熔断器模式等)降低依赖服务对整个系统的影响。
  • 针对系统服务的度量、监控和报警,提供优化以满足近实时性的要求。
  • 在 Hystrix 绝大部分需要动态调整配置并快速部署到所有应用方面,提供优化以满足快速恢复的要求。
  • 能保护应用不受依赖服务的整个执行过程中失败的影响,而不仅仅是网络请求。
参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3847.html

《Hystrix学习》上有1条评论

  1. Spring Cloud与微服务学习笔记-注册与发现
    https://since1986.github.io/blog/17601ed9.html

    1. 前言
    2. 什么是服务注册与发现
    3. 为什么要有“服务注册与发现”
    4. Eureka
      4.1. Eureka的概念
      4.2. 如何使用Eureka
      4.3. 用Eureka来做服务注册与发现的demo
        4.3.1. 单实例eureka server + 单实例service
        4.3.2. 多实例eureka server + 多实例service
      4.4. 深入了解Eureka
        4.4.1. Eureka高层架构
        4.4.2. 了解服务消费端与服务提供端的通讯
    5. 扩展阅读
    6. 总结
    7. 参考资料

发表评论

电子邮件地址不会被公开。 必填项已用*标注