美文网首页Java Web架构设计架构设计微服务实践
分布式服务防雪崩熔断器,Hystrix理论+实战。

分布式服务防雪崩熔断器,Hystrix理论+实战。

作者: Java技术栈 | 来源:发表于2017-12-05 08:03 被阅读169次

Hystrix是什么?

hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Netflix团队将该框架命名为Hystrix,并使用了对应的卡通形象做作为logo。

在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。

为什么需要Hystrix?

在大中型分布式系统中,通常系统很多依赖(HTTP,hession,Netty,Dubbo等),如下图:

image

当依赖I 阻塞时,大多数服务器的线程池就出现阻塞(BLOCK),影响整个线上服务的稳定性.如下图:

image

在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败。高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险。

例如:一个依赖30个SOA服务的系统,每个服务99.99%可用。  
99.99%的30次方 ≈ 99.7%  
0.3% 意味着一亿次请求 会有 3,000,00次失败  
换算成时间大约每月有2个小时服务不稳定.  
随着服务依赖数量的变多,服务不稳定的概率会成指数性提高.

解决问题方案:对依赖做隔离,Hystrix就是处理依赖隔离的框架,同时也是可以帮我们做依赖服务的治理和监控。

Netflix 公司开发并成功使用Hystrix,使用规模如下:

The Netflix API processes 10+ billion HystrixCommand executions per day using thread isolation.   
Each API instance has 40+ thread-pools with 5-20 threads in each (most are set to 10).

Hystrix如何解决依赖隔离?

  1. Hystrix使用命令模式HystrixCommand(Command)包装依赖调用逻辑,每个命令在单独线程中/信号授权下执行。

  2. 可配置依赖调用超时时间,超时时间一般设为比99.5%平均时间略高即可.当调用超时时,直接返回或执行fallback逻辑。

  3. 为每个依赖提供一个小的线程池(或信号),如果线程池已满调用将被立即拒绝,默认不采用排队.加速失败判定时间。

  4. 依赖调用结果分:成功,失败(抛出异常),超时,线程拒绝,短路。 请求失败(异常,拒绝,超时,短路)时执行fallback(降级)逻辑。

  5. 提供熔断器组件,可以自动运行或手动调用,停止当前依赖一段时间(10秒),熔断器默认错误率阈值为50%,超过将自动运行。

  6. 提供近实时依赖的统计和监控。

Hystrix依赖的隔离架构,如下图:

image

Hystrix应用实战

Maven

<dependency>
    <groupId>com.netflix.hystrix</groupId>
    <artifactId>hystrix-core</artifactId>
    <version>1.5.13</version>
</dependency>

源码太多,不一一贴上来,这里只展示主要的测试源码。

public static void main(String[] args) {
    System.out.println(test("javastack"));
}

private static String test(String name) {
    HystrixUtil.HystrixReqConfig hc = HystrixUtil.HystrixReqConfig.withGroupKey("TestGroup").withTimeout(3)
            .withUnit(TimeUnit.SECONDS).withPassNum(64);

    String result = HystrixUtil.getExcuteResult(new HystrixCallableService<String>() {

        @Override
        public String execute() {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "success " + name;
        }

        @Override
        public String fallback() {
            return "fallback " + name;
        }

    }, hc);

    return result;
}

这里设置了3秒超时进入熔断。

测试程序中休眠5秒,进入熔断器并输出:

fallback javastack

测试程序中休眠2秒,进入正常流程并输出:

success javastack

熔断器测试成功,即使某个服务出问题,也不会影响整个系统的正常运行。

获取全部打包源码可以在下方公众号菜单中回复"微信群"加入微信群,并在对应的群文件中下载。

image

这是某微信群友个人付费购买的高级教程<<Vue+Node+MongoDB高级全栈开发>>,现在分享出来,获取下方公众号回复:视频

申明:本视频内容与本公众号无任何关系,仅供学习交流使用。

号外:只要从简书过来关注下方微信公众号的,在公众号中回复MM,可以免费送干货:2TB架构师四阶段视频教程里面的资料。

推荐阅读


分享一套高级视频教程:Dubbo+Zookeeper+ActiveMQ+Redis系列

分享一套分布式架构设计高级视频教程

分享一套Hadoop全套视频教程系列

去BAT面试完的Mysql面试题总结(55道,带完整答案)

阿里高级Java面试题(首发,70道,带详细答案)

2017派卧底去阿里、京东、美团、滴滴带回来的面试题及答案

Spring面试题(70道,史上最全)

通往大神之路,百度Java面试题前200页。

分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。


相关文章

  • 分布式服务防雪崩熔断器,Hystrix理论+实战。

    Hystrix是什么? hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了...

  • 探索Finchley版Spring Cloud(熔断器Hystr

    在复杂的分布式系统中,可能因为某个服务不可用导致整个系统不可用,即雪崩效应。而熔断器Hystrix提供了隔离机制,...

  • 分布式服务-防雪崩利器Hystrix(熔断器)

    前言 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为了应对服...

  • 服务治理 - 熔断保护

    背景 本文讲的熔断器结构参照Hystrix结构。 雪崩 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会...

  • Hystrix、Zuul、Config、Bus

    1.熔断器 Hystrix 1.1. 雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联...

  • Hystrix简介

    Hystrix主要用来隔离分布式故障,避免服务雪崩效应。 Hystrix的作用 提供降级机制。 提供熔断机制:使服...

  • SpringCloudHystrix.md

    SpringCloudHystrix 简介 服务容错机制防雪崩利器基于Netflix对应的Hystrix 功能 1...

  • 熔断器模式

    产生原因 在分布式应用中,容易出现由某个基础服务故障引发整个集群了崩溃,称之为雪崩。 熔断器模式 熔断器模式可以有...

  • 断路器Hystrix(二):Hystrix原理

    关于Hystrix基础应用,请参考断路器Hystrix(一):基础应用。 1. 服务雪崩 服务雪崩效应是一种因服务...

  • Hystrix 实战经验分享

    一、背景 Hystrix是Netlifx开源的一款容错框架,防雪崩利器,具备服务降级,服务熔断,依赖隔离,监控(H...

网友评论

本文标题:分布式服务防雪崩熔断器,Hystrix理论+实战。

本文链接:https://www.haomeiwen.com/subject/hnuvbxtx.html