Hystrix两种隔离方式对比
在微服务架构中,我们不可避免的与Hystrix打交道,最近在面试过程中,也总是被问到Hystrix两种熔断方式的区别,今天,就给大家做个小结。
首先,Hystrix熔断方式主要有两种:
线程池隔离
信号量隔离
我们知道,线程池其实相当于一个容器(池子),容器只有那么大,超过了其限定额度,就溢出啦,线程池有哪些参数,这里就不再给大家赘述了,有兴趣的朋友可以看看我之前发表的文章,有详细的解释。那么信号量隔离是什么呢?相信有朋友已经想到了,对,就是Semaphore。那么Semaphore是怎么使用的呢?刚好之前写了一段demo,给大家展示下
public static void main(String[] args) {
Semaphore semaphore = new Semaphore(3); ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
final long num = i;
executorService.submit(new Runnable() {
@Override
public void run() {
try {
//获取许可
semaphore.acquire();
//执行
System.out.println("Accessing: " + num);
Thread.sleep(new Random().nextInt(5000)); // 模拟随机执行时长
//释放
semaphore.release();
System.out.println("Release..." + num);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
} executorService.shutdown(); }
可以看到,Semaphore其实也是限定大小,同时访问的线程会去争抢获取一个标识,相当于获取token秘钥,拿到的人才有机会执行该逻辑,同时,尤其记住执行完毕之后需要手动释放该标识。
下面,我们就来说说线程池和信号量隔离的区别:
线程池 | 信号量 | |
线程 | 请求线程和调用provider线程不是同一条线程 | 请求线程和调用provider线程是同一条线程 |
开销 | 排队、调度、上下文切换等 | 无线程切换,开销低 |
异步 | 支持 | 不支持 |
并发支持 | 支持:最大线程池大小 | 支持:最大信号量上限 |
传递Header | 不支持 | 支持 |
支持超时 | 支持 | 不支持 |
那么,他们两又是各自在什么情况下使用呢?
线程池隔离
请求并发量大,并且耗时长(一般是计算量大或者读数据库):采用线程池隔离,这样的话,可以保证大量的容器线程可用,不会由于服务原因,一直处于阻塞或者等待状态,快速失败返回。
信号量隔离
请求并发量大,并且耗时短(一般是计算量小,或读缓存):采用信号量隔离:因为这类服务的返回往往非常快,不会占用容器线程太长时间,并且减少了线程切换的一些开销,提高了缓存服务的效率
Hystrix两种隔离方式对比的更多相关文章
- spring-data-mongodb两种实现方式对比
spring-data-mongodb两种实现方式对比 参考链接:https://blog.csdn.net/feinifi/article/details/83752862
- hystrix两种隔离模式分析
hystrix隔离模式目前有两种方式:信号量模式和线程池模式. 但信号量并不支持超时,当被调服务发生问题时,有少部分用户会长时间无法得到响应. 另外,使用线程池模式无法传递Header,我估计是由于线 ...
- 单例模式的两种实现方式对比:DCL (double check idiom)双重检查 和 lazy initialization holder class(静态内部类)
首先这两种方式都是延迟初始化机制,就是当要用到的时候再去初始化. 但是Effective Java书中说过:除非绝对必要,否则就不要这么做. 1. DCL (double checked lockin ...
- Java中常用到的文件操作那些事(二)——使用POI解析Excel的两种常用方式对比
最近生产环境有个老项目一直内存报警,不时的还出现内存泄漏,导致需要重启服务器,已经严重影响正常服务了.获取生成dump文件后,使用MAT工具进行分析,发现是其中有个Excel文件上传功能时,经常会导致 ...
- Hystrix-基本概念(设计原则和两种隔离技术)
一.Hystrix是什么在微服务的架构系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务.有的时候某些依赖服务出现故障也是很正常的.Hystrix可以让我们在对服务间的调用进行控制 ...
- Java多线程13:读写锁和两种同步方式的对比
读写锁ReentrantReadWriteLock概述 大型网站中很重要的一块内容就是数据的读写,ReentrantLock虽然具有完全互斥排他的效果(即同一时间只有一个线程正在执行lock后面的任务 ...
- Windows校验文件哈希hash的两种常用方式
大家经常都到哪儿去下载软件和应用程序呢?有没想过下载回来的软件.应用程序或资源是否安全呢?在 Windows 10 和 Office 2016 发布当初,很多没权限的朋友都使用第三方网站去下载安装映像 ...
- 动态代理的两种实现方式(JDK/Cglib)
=========================================== 原文链接: 动态代理的两种实现方式(JDK/Cglib) 转载请注明出处! ================== ...
- mongodb 系列 ~ mongo的两种引擎介绍对比
一 简介 两种引擎方式的对比二 对比与说明 1 版本支持 MMAP引擎 3.2版本之前,默认引擎 WT 引擎 3.2版本之后,默认引擎 2 并发性能(核心) M ...
- Nginx 和 PHP 的两种部署方式比较
2种部署方式简介 第一种 前置1台nginx服务器做HTTP反向代理和负载均衡 后面多态服务器部署Nginx Web服务和php-fpm提供的fast cgi服务 第二种 前置1台nginx服务器做W ...
随机推荐
- Redis服务安装和卸载,redis命令行使用
redis安装包文件夹处, 唤出cmd 创建服务:redis-server --service-install redis.windows-service.conf --loglevel verbos ...
- API网关-APISIX简介
本文分享自天翼云开发者社区<API网关-APISIX简介>,作者:w****n Apache APISIX 是一个动态.实时.高性能的云原生 API 网关,提供了负载均衡.动态上游.灰度发 ...
- SNMP简介
复习几组概念带内管理和带外管理区别:传送的物理通道不同.1.带内管理是管理控制信息与数据信息使用统一物理通道进行传送.当网络出现故障中断时数据传输和管理都无法正常进行.2.带外管理在于通过不同的物理通 ...
- Qt数据库驱动编译(MySQL)
Qt数据库驱动编译(MySQL) 哈喽!我是 Pro_er,一名热爱编程的小伙伴.在这里我会分享一些实用的开发技巧和经验心得.如果你也对编程充满热情,欢迎关注并一起交流学习! 第一步:安装所需文件 / ...
- 本地部署DeepSeek-R1并使用自定义的知识库AnythingLLM
一.基础信息 1.概述 以下是私有化部署方案的优势: 性能卓越:提供媲美商业模型的对话交互体验 环境隔离:完全离线运行,杜绝数据外泄风险 数据可控:完全掌控数据资产,符合合规要求 2.硬件环境 CPU ...
- Excel中使用VLOOKUP对两个单元格关联
一.背景 exl中需要关联两个Excel,根据主键合并两个单元格数据 二.使用方法 1.表1---列包含在id.姓名.年龄 2.表2---列包含姓名.性别 3.期望根据[姓名]列为主键,关联两个表数据 ...
- 并发编程 - 线程同步(九)之信号量Semaphore
前面对自旋锁SpinLock进行了详细学习,今天我们将学习另一个种同步机制--信号量Semaphore. 01.信号量是什么? 在 C# 中,信号量(Semaphore)是一种用于线程同步的机制,能够 ...
- test1111
了解客户端和服务端的请求原理 HTTP协议及其组成 HTTPS交互原理分析 访问支付宝,微信的开放接口 都是基于HTTP 对外提供的开放服务 API都是基于HTTP协议的, 微服务中的服务之间的调用大 ...
- autMan奥特曼机器人-Linux、Windows、docker安装教程
autMan简介 autMan是机器人牵引的扩展性极强的一站式解决方案 原生支持对接qq框架.qq频道.微信框架(酷V西瓜可爱猫千寻鲲鹏). 内置微信.微信客服.公众号.钉钉.飞书.tg客户端.tg机 ...
- 利用JS 代码块 为你的 Typecho博客添加一个 Copy 按钮
引入 JS 将以下代码添加到主题 header.php 中的 </head> 标签前,本主题也可以前往 控制台 - 设置外观 - 主题自定义扩展,将它添加到 自定义 HTML 元素拓展 - ...