hystrix隔离策略对比

hystrix隔离策略

zuul的隔离实现是基于hystrix实现的,hystrix支持线程池隔离和信号量的隔离

# 信号量隔离:
  • it executes on the calling thread and concurrent requests are limited by the semaphore count --引自官网
  • 单每次调用线程,当前请求通过技术信号量进行限制,当信号量大于了最大请求数(maxConcurrentRequest)时候,触发限制,调用fallback接口快速返回。

img

此处可能出现的问题在于:信号量的调用是同步的,也就是说,每次调用都会阻塞调用方的线程,一直到结果返回,这样就导致了无法对访问做超时(只能依靠调用协议超时,无法主动释放)

  • 官网对信号量隔离的描述:
    • Generally the only time you should use semaphore isolation for HystrixCommands is when the call is so high volume (hundreds per second, per instance) that the overhead of separate threads is too high; this typically only applies to non-network calls.
  • 两点:
    • 隔离的粒度太细,数百个实例需要隔离,此时用线程池做隔离开销过大
    • 通常这种都是非网络调用的情况下
# 线程池隔离
  • it executes on a separate thread and concurrent requests are limited by the number of threads in the thread-pool -引自官网

通过每次都开启一个单独线程运行,他的隔离是通过线程池,即每个隔离粒度都是线程池,互不干扰。

  • Commands executed in threads have an extra layer of protection against latencies beyond what network timeouts can offer.

线程池隔离方式,等于多了一层保护措施,可以通过hystryx直接设置超时时间,超时后直接返回

img

对比表格‘:

隔离方式是否支持超时是否支持熔断隔离原理是否异步调用资源消耗
线程池隔离支持,可以直接返回支持,当线程池达到maxsize后,再请求会出发fallback熔断每个服务单独用线程池可以是异步,也可以是同步。看调用的方法消耗大,大量线程的上下文切花,容易造成机器负载过高
信号量隔离不支持,如果阻塞,只能通过调用协议比如socket超时返回支持,当信号量达到maxConcurrentRequests后,再请求会触发fallback熔断通过信号量计数器同步调用,不支持异步消耗小,只是一个计数器
  • zuul网关如果使用线程池隔离是属于异步调用,其实查看源码如下:

img

调用的是hystrix command 的excute方法,hytrix的官网原文说明如下:

  • execute() — blocks, then returns the single response received from the dependency (or throws an exception in case of an error)

execute是一个阻塞方法,也就是说,如果不合理的设置线程池的大小,和超时时间,还是有可能把zuul的线程消耗完。从而失去对服务的保护作用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国速度之二神山建设(1):坚强的领导核心,“小团队大后台”组织结构 | IDCF DevOps案例研究...

内容来源:DevOps案例深度研究第4期 – 火神山雷神山 DevOps实践研究战队(本文只展示部分PPT及研究成果,全程视频请移步文末)本案例内容贡献者:赖泽薇、张扬、邓茜芸、韦一、刘德权、候利涛、冯利娟、常相宇、张力、韩丰…

通过Java编写一个服务器理解动态Web,静态Web

静态Web 说到Servlet自然就要说到Web,Web分为静态Web和动态Web,之前我一直都傻傻分不清两者的区别,直到用JAVA编写了一个服务器后才明白二者的区别,所谓静态Web,实际上就是指,客户端要请求的资源文件,服务器…

Hystrix在网关Zuul使用中遇到问题

Hystrix在网关Zuul使用中遇到问题 Zuul默认隔离策略级别是信号量隔离,默认最大隔离信号量是100 信号量隔离和线程隔离的区别:https://blog.csdn.net/liaojiamin0102/article/details/94394956默认的设置如源码: //在ZuulProperties 类下游…

C++ 实现无向图的最小生成树Prim算法(附完整代码)

实现Prim算法,需设置两个辅助一维数组lowcost和closevertex。 其中lowcost用来保存集合V-U中各顶点与集合U中各顶点构成的边中具有最小权值的边的权值;数组closevertex用来保存依附于该边的在集合U中的顶点。 过程: 假设初始状态时,U{u0}&a…

中国速度之二神山建设(2):完善的项目计划,高效能价值流 | IDCF DevOps案例研究...

内容来源:DevOps案例深度研究第4期 – 火神山雷神山 DevOps实践研究战队(本文只展示部分PPT及研究成果,全程视频请移步文末。)本案例内容贡献者:赖泽薇、张扬、邓茜芸、韦一、刘德权、候利涛、冯利娟、常相宇、张力、韩…

C++ 实现无向图的最小生成树Kruskal算法(完整代码)

按照Kruskal思想,n个结点的生成树有n-1条边,故反复上述过程,直到选取了n-1条边为止,就构成了一棵最小生成树。 实现Kruskal算法的关键问题是: 当一条边加入T的边集中后,如何判断是否构成回路。 一种解决方…

MySql 内连接,外连接查询方式区别

MySql 内连接,外连接查询方式 CREATE TABLE question_test (q_id int(11) DEFAULT NULL,q_name varchar(10) DEFAULT NULL,q_part varchar(10) DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8CREATE TABLE answer_test (a_id int(11) DEFAULT NULL,a_name varch…

让我的 .NET Core 博客系统支持 Docker

点击上方蓝字关注“汪宇杰博客”导语我的博客(https://edi.wang)所使用的博客系统 Moonglade 开源已经一年多了。目前已有至少4位社区朋友使用此系统在 Azure、阿里云上部署了自己的博客。可惜长久以来该系统一直缺乏 Docker 支持,而 .NET Co…

C++ 实现带权有向图的单源点最短路径Dijkstra算法(完整代码)

首先,引进一个辅助向量D,它的每个分量D[i]表示当前所找到的从始点v0到每个终点vi的最短路径的长度。 它的初态为:若从v0到vi有弧,则D[i]为弧上的权值;否则,置D[i]为∞。 显然,长度为 D[j]Min{…

Eureka与Zookeeper

CAP理论 C(Consistency):一致性 A(Avaliability):高可用 P(Partition tolerance):分区容错性 Eureka & Zookeeper Eureka强调的是AP,即高可用,分区容错性Zookeeper强调的是CP,即一致性&#xff0c…

[ASP.NET Core MVC] 如何实现运行时动态定义Controller类型?

昨天有个朋友在微信上问我一个问题:他希望通过动态脚本的形式实现对ASP.NET Core MVC应用的扩展,比如在程序运行过程中上传一段C#脚本将其中定义的Controller类型注册到应用中,问我是否有好解决方案。这是一个挺有意思的问题,我们…

C++ 实现带权有向图的每对顶点之间的最短路径Floyd算法(完整代码)

基本思想是: 假设求从顶点vi到vj的最短路径。 如果从vi到vj有弧,则从vi到vj存在一条长度为arcs[i][j]的路径,该路径不一定是最短路径,尚需进行n次试探。 首先考虑路径(vi, v0, vj)是否存在(判别…

等额本息,等额本金区别

等额本金,等额本息区别 买房银行贷款分为两种: 等额本金和等额本息 等额本息 等额本息定义:还款本金占比逐月递增,利息占比逐月递减,月还款数不变由于每月的还款额度是一样的,其中每个月的还款包括了根…

【视频回放与课件】Build your AI solution with MLOps

4月8日在Global AI Community on Vitural Tour与大家分享了Build your AI solution with MLOps的专题,本课程主要介绍了微软Azure Machine Learning如何使用 , 以及如何通过Azure Machine Learning 结合 MLOps的概念完成机器学习项目的工作。本次Global AI Communit…

C++ 实现分块查找(顺序存储结构)(完整代码)

代码如下: #include <iostream> using namespace std; const int Maxsize 1000; const int MINNUM -999999; class Index_table {friend class SeqList; private:int key;int address; };class SeqList {//该顺序表从下标为0开始 public:~SeqList(){delete[] elem;del…

计算机网络知识扫盲

网络分层 主机网络层–数据链路层 主机网络层定义了一个特定的网络接口比如网卡或者wifi天线&#xff0c;如果通过物理连接向本地网络或者世界其他地方发送IP数据报。主机网络层中有链接不同计算机的硬件&#xff08;电缆&#xff0c;光纤&#xff0c;无线电波等&#xff09;…

《五分钟商学院》管理篇学习笔记

【商业知识】| 作者 / Edison Zhou这是恰童鞋骚年的第213篇原创文章在商业篇中&#xff0c;主要探讨的是企业如何处理与外部&#xff08;比如客户&#xff09;的关系。而在管理篇中&#xff0c;关注的重点则是企业如何处理与内部的关系。外部的世界很精彩&#xff0c;而内部的世…

如何在.NET应用程序中分析CPU使用率过高的问题

原文来自互联网&#xff0c;由长沙DotNET技术社区编译。如译文侵犯您的署名权或版权&#xff0c;请联系小编&#xff0c;小编将在24小时内删除。限于译者的能力有限&#xff0c;个别语句翻译略显生硬&#xff0c;还请见谅。作者:胡安帕勃罗希达&#xff0c;JUAN PABLO SCIDA是一…

HashMap实现原理

HashMap HashMap基础数据结构&#xff1a; 如上结构课看出&#xff0c;HashMap主要是有一个链表的形式来存储数据 &#xff0c;上面Node类和C语言中的结构体很像&#xff0c;如上可以看出HashMap底层由是一个数组结构&#xff0c;数组中的每一项又是一个链表&#xff0c;新建一…

做好技术管理,你必须要跨越的4道槛

点击蓝字关注&#xff0c;回复“职场进阶”获取职场进阶精品资料一份读者群里有不少刚开始做管理的技术人&#xff0c;很多都和我谈过他们的困惑。总结下来主要是不知道继续晋升需要培养哪方面的能力。技术经理其实是技术人最难做好的管理岗&#xff0c;原因主要有两方面&#…