关闭

Hystrix系列-5-Hystrix的资源隔离策略

标签: Hystrix资源隔离spring cloud
2998人阅读 评论(0) 收藏 举报
分类:

Hystrix的资源隔离策略有两种,分别为:线程池和信号量。说到资源隔离,那我们就要明白,我们为什么需要资源隔离。

在一个分布式系统中,服务之间都是相互调用的,如下图所示:


例如,我们容器(Tomcat)配置的线程个数为1000,服务A-服务R,其中服务I的并发量非常的大,需要500个线程来执行,此时,服务I又挂了,那么这500个线程很可能就夯死了,那么剩下的服务,总共可用的线程为500个,随着并发量的增大,剩余服务挂掉的风险就会越来越大,最后导致整个系统的所有服务都不可用,直到系统宕机。这就是服务的雪崩效应。Hystrix就是用来做资源隔离的,比如说,当客户端向服务端发送请求时,给服务I分配了10个线程,只要超过了这个并发量就走降级服务,就算服务I挂了,最多也就导致服务I不可用,容器的10个线程不可用了,但是不会影响系统中的其他服务。下面,我们就来具体说下这两种隔离策略:

1、线程池

线程池隔离的示意图如下:


上图的左边2/3是线程池资源隔离示意图,右边的1/3是信号量资源隔离示意图,我们先来看左边的示意图。

当用户请求服务A和服务I的时候,tomcat的线程(图中蓝色箭头标注)会将请求的任务交给服务A和服务I的内部线程池里面的线程(图中橘色箭头标注)来执行,tomcat的线程就可以去干别的事情去了,当服务A和服务I自己线程池里面的线程执行完任务之后,就会将调用的结果返回给tomcat的线程,从而实现资源的隔离,当有大量并发的时候,服务内部的线程池的数量就决定了整个服务的并发度,例如服务A的线程池大小为10个,当同时有12请求时,只会允许10个任务在执行,其他的任务被放在线程池队列中,或者是直接走降级服务,此时,如果服务A挂了,就不会造成大量的tomcat线程被服务A拖死,服务I依然能够提供服务。整个系统不会受太大的影响。

2、信号量

信号量的资源隔离只是起到一个开关的作用,例如,服务X的信号量大小为10,那么同时只允许10个tomcat的线程(此处是tomcat的线程,而不是服务X的独立线程池里面的线程)来访问服务X,其他的请求就会被拒绝,从而达到限流保护的作用。

3、二者的比较

  线程池隔离 信号量隔离
线程 与调用线程非相同线程 与调用线程相同(jetty线程)
开销 排队、调度、上下文开销等 无线程切换,开销低
异步 支持 不支持
并发支持 支持(最大线程池大小) 支持(最大信号量上限)
4、总结

当请求的服务网络开销比较大的时候,或者是请求比较耗时的时候,我们最好是使用线程隔离策略,这样的话,可以保证大量的容器(tomcat)线程可用,不会由于服务原因,一直处于阻塞或等待状态,快速失败返回。而当我们请求缓存这些服务的时候,我们可以使用信号量隔离策略,因为这类服务的返回通常会非常的快,不会占用容器线程太长时间,而且也减少了线程切换的一些开销,提高了缓存服务的效率。

0
0
查看评论

Hystrix学习笔记一

在分布式系统中,通常一个系统会依赖很多个系统,如何保证自身系统不受依赖的系统的影响,导致连锁反应全面崩溃是一个重要的技术难题。所幸 Netflix 开源的 Hystrix框架 帮我们大大简化了超时机制和断路器的实现。 Hystrix是什么? 官方地址:https:...
  • marsflow
  • marsflow
  • 2016-06-07 16:42
  • 2439

二、Hystrix隔离服务的实现原理---线程池隔离

Hystrix组件提供了两种隔离的解决方案:线程池隔离和信号量隔离。两种隔离方式都是限制对共享资源的并发访问量,线程在就绪状态、运行状态、阻塞状态、终止状态间转变时需要由操作系统调度,占用很大的性能消耗;而信号量是在访问共享资源时,进行tryAcquire,tryAcquire成功才允许访问共享资源...
  • klov001
  • klov001
  • 2016-06-08 08:54
  • 7829

Hystrix常见用法说明

Hystrix是Netflix开源的一款容错系统,能帮助使用者码出具备强大的容错能力和鲁棒性的程序。支持降级、熔断、隔离等高可用特效。下面一一介绍。一、基本用法将需要封装接口,继承HystrixCommand,并实现run()方法。HystrixCommand支持4种调用方式。1、execute()...
  • hohojiang
  • hohojiang
  • 2017-07-14 14:16
  • 921

十三、断路器-Hystrix 的隔离策略

断路器-Hystrix 的隔离策略
  • dengqiang123456
  • dengqiang123456
  • 2017-07-23 17:11
  • 860

Hystrix总结

Hystrix是什么? Hystrix 能使你的系统在出现依赖服务失效的时候,通过隔离系统所依赖的服务,防止服务级联失败,同时提供失败回退机制,更优雅地应对失效,并使你的系统能更快地从异常中恢复。 Hystrix能做什么? 在通过第三方客户端访问(通常是通过网络)依赖服务出现高延迟或者失败时,...
  • a298804870
  • a298804870
  • 2016-12-01 22:38
  • 4818

Hystrix 使用与分析

转载请注明出处哈:http://hot66hot.iteye.com/admin/blogs/2155036 一:为什么需要Hystrix? 在大中型分布式系统中,通常系统很多依赖(HTTP,hession,Netty,Dubbo等),如下图:   在高...
  • xiaoyu411502
  • xiaoyu411502
  • 2016-01-28 16:40
  • 7543

Hystrix

一、Hystrix说明 1.服务雪崩效应:是一种因 服务提供者 的不可用导致 服务调用者 的不可用,并将不可用 逐渐放大 的过程。 1) A为服务提供者, B为A的服务调用者, C和D是B的服务调用者. 当A的不可用,引起B的不...
  • ruihin
  • ruihin
  • 2017-08-25 16:41
  • 8542

Hystrix学习(3)隔离

隔离模式 一个形象的解释是:对系统请求按类型划分成若干个的小岛,当某个小岛被火少光了,不会影响到其他的小岛。 Hystrix依赖的隔离架构,如下图:Hystrix在用户请求和服务之间加入了线程池。Hystrix为每个依赖调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采用排队.加速失败...
  • qq_17751605
  • qq_17751605
  • 2016-04-23 12:57
  • 1051

【Hystrix权威指南二】Hystrix隔离策略

微服务组件
  • klov001
  • klov001
  • 2016-12-14 18:15
  • 1807

【Hystrix权威指南三】Hystrix隔离策略源码分析一

微服务组件
  • klov001
  • klov001
  • 2016-12-14 18:16
  • 3818
    个人资料
    • 访问:570520次
    • 积分:6367
    • 等级:
    • 排名:第4576名
    • 原创:128篇
    • 转载:9篇
    • 译文:2篇
    • 评论:395条
    博客专栏
    最新评论