Hystrix入门研究

1、Hystrix是什么

Hystrix 是Netflix开源的一个针对分布式容错和库。Hystrix的主要功能是隔离分布式系统之间的故障,防止故障带来的雪崩效应。同时也能提供一个分布式服务的优雅的降级方案。从而提高系统的可用性的组件。

2、Hystrix设计理念是什么(其实也是高可用系统设计的理念)?

  1. 防止单个系统故障后,造成容器(tomcat,scf)的线程全部占满,影响服务响应。
  2. 使用快速失败和泄洪代替队列等待。
  3. 在系统故障之后提供优雅的降级措施。
  4. 使用隔离技术降低故障影响面。
  5. 提供准实时的监控报警系统。
  6. 提供准实时动态的配置系统。å
  7. 客户端感知下游服务状态,防止错误的发展,而不通过真实的调用就能感知。

3、Hystrix怎么用

  • Hello World:
public class CommandHelloWorld extends HystrixCommand<String>{
 
    private final String name;
 
    public CommandHelloWorld(String name){
        super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
        this.name = name;
    }
 
    protected String run() throws Exception {
        return "Hello " + name;
    }
  
    public static void main(String[] args) throws ExecutionException, InterruptedException {
    String s = new CommandHelloWorld("BoB").execute();
 
    System.out.println(s);
 
    }
}
  • 降级:
public class CommandHelloFailure extends HystrixCommand<String> {
 
    private final String name;
 
    public CommandHelloFailure(String name) {
        super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
        this.name = name;
    }
 
    @Override
    protected String run() {
        throw new RuntimeException("this command always fails");
    }
 
    @Override
    protected String getFallback() {
        return "Hello Failure " + name + "!";
    }
}

4、Hystrix实现思路分析

1、数据流

数据流
  1. 初始化 HystrixCommand 或者 HystrixObservableCommand 对象。
  2. 执行。
  3. 判断是否有缓存?
  4. 判断是否调用链路是否通畅?
  5. 判断线程池/队列/信号量 是否满了?
  6. 执行HystrixObservableCommand.construct() 或者HystrixCommand.run()方法
  7. 计算调用下游的健康程度
  8. 判断时候需要降级
  9. 完成请求

2、熔断器


每个熔断器维护10个buckets窗口,每秒生成一个新的bucket,把最早的bucket抛弃,每个bucket记录了调用的,成功、失败、超时、拒绝的次数,如果失败数量达到某个阈值,就会触发熔断。

3、隔离

线程隔离

每个下游调用使用独立的线程池,而非与请求的调用共用一个线程池,这样可以防止失败的调用占用共用的线程池,造成整个系统拒绝服务。

优缺点

优点:
相互独立,减少互相影响的风险,总的来说就是隔离解耦,不会互相影响》
缺点:
过多的线程池造成cpu计算能力的消耗,和增加代码的复杂度。

信号量隔离

信号隔离也可以用于限制并发访问,防止阻塞扩散, 与线程隔离最大不同在于执行依赖代码的线程依然是请求线程(该线程需要通过信号申请),
如果客户端是可信的且可以快速返回,可以使用信号隔离替换线程隔离,降低开销.

4、请求折叠

可以使用组件HystrixCollapser把前端的多个请求折叠为单一的一个后端请求。减少线程和链接的开销。

5、请求缓存

把请求缓存起来。这个不过多解释了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容