线程隔离和信号量隔离

Hystrix 里面核心的一项功能,其实就是所谓的资源隔离,要解决的最最核心的问题,就是将多个依赖服务的调用分别隔离到各自的资源池内。避免说对某一个依赖服务的调用,因为依赖服务的接口调用的延迟或者失败,导致服务所有的线程资源全部耗费在这个服务的接口调用上。一旦说某个服务的线程资源全部耗尽的话,就可能导致服务崩溃,甚至说这种故障会不断蔓延。 资源隔离主要分为如下两种方式

  • 线程池
  • 信号量

信号量机制

信号量的资源隔离只是起到一个开关的作用,比如,服务 A 的信号量大小为 10,那么就是说它同时只允许有 10 个 tomcat线程来访问服务 A,其它的请求都会被拒绝,从而达到资源隔离和限流保护的作用。

线程池机制

线程池隔离技术,并不是说去控制类似 tomcat 这种 web 容器的线程。更加严格的意义上来说,Hystrix 的线程池隔离技术,控制的是 tomcat 线程的执行。Hystrix 线程池满后,会确保说,tomcat 的线程不会因为依赖服务的接口调用延迟或故障而被 hang 住,tomcat 其它的线程不会卡死,可以快速返回,然后支撑其它的事情。

信号量机制与线程池机制的区别

线程池隔离技术,是用 Hystrix 自己的线程去执行调用;而信号量隔离技术,是直接让 tomcat 线程去调用依赖服务。信号量隔离,只是一道关卡,信号量有多少,就允许多少个 tomcat 线程通过它,然后去执行。

适用场景

  • 线程池技术,适合绝大多数场景,比如说我们对依赖服务的网络请求的调用和访问、需要对调用的 timeout 进行控制(捕捉 timeout 超时异常)。 适用于请求并发量大,并且耗时长(一般是计算量大或者读数据库):采用线程池隔离,这样的话,可以保证大量的容器线程可用,不会由于服务原因,一直处于阻塞或者等待状态,快速失败返回。
  • 信号量技术,适合说你的访问不是对外部依赖的访问,而是对内部的一些比较复杂的业务逻辑的访问,并且系统内部的代码,其实不涉及任何的网络请求,那么只要做信号量的普通限流就可以了,因为不需要去捕获 timeout 类似的问题。适用于请求并发量大,并且耗时短(一般是计算量小,或读缓存):采用信号量隔离:因为这类服务的返回往往非常快,不会占用容器线程太长时间,并且减少了线程切换的一些开销,提高了缓存服务的效率。

Hystrix请求命令 HystrixCommand、HystrixObservableCommand

  • HystrixCommand用在依赖服务返回单个操作结果的时候。又两种执行方式

   -execute():同步执行。从依赖的服务返回一个单一的结果对象,或是在发生错误的时候抛出异常。

   -queue();异步执行。直接返回一个Future对象,其中包含了服务执行结束时要返回的单一结果对象。

    

  • HystrixObservableCommand 用在依赖服务返回多个操作结果的时候。它也实现了两种执行方式

   -observe():返回Obervable对象,他代表了操作的多个结果,他是一个HotObservable

   -toObservable():同样返回Observable对象,也代表了操作多个结果,但它返回的是一个Cold Observable。

Soul中配置失败降级URL

soul中Hystrix的CallBackUri()需要写在soul-boostrap项目中,因为集成网关之后,http请求的本体项目是没有集成Hystrix的,所以网关只能进入自己的uri中,当然我们如果需要获取本体项目的一些信息或者数据,那么我们可以在boostrap中通过某种方式向本体服务拿到数据或请求再返回。 可以类比的是,其他的限流插件可能CallBackUri()都必须写在soul-boostrap中了

疑问

HystrixObservableCommand,HystrixCommand与隔离机制之间的对应关系的具体原因?

参考博客https://www.imooc.com/article/296565 , https://www.cnblogs.com/pretttyboy/p/13519823.html ,https://cloud.tencent.com/developer/article/1600695 ,https://www.cnblogs.com/happyflyingpig/p/8079308.html

欢迎搜索关注本人的公众号【微瞰技术】,以及总结的分类面试题https://github.com/zhendiao/JavaInterview

Soul网关Hystrix插件相关知识点扫盲相关推荐

  1. Soul源码解析(16)-Soul网关熔断插件使用及源码解读

    一.目标 1.使用Soul网关熔断插件: 2.解读熔断插件关键代码: 二.内容 2.1 背景 熔断:在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时 ...

  2. soul网关-2-divide插件

    先来设想一下,网关如果收到了一个请求http://xxx.com/openapi/appname/order/findById?id=3,那么怎么将请求转发给对应的业务? 可以想象一下大概是这几个步骤 ...

  3. soul网关-4-sign插件签名认证

    一个网关的下游是多个业务线,如果这些业务线都有鉴权的需求,那么可以使用网关的鉴权功能,没必要每个业务线都自己实现一套鉴权的代码.除非是与业务强相关的鉴权,是那种不具有普适性的需求. soul网关的鉴权 ...

  4. soul网关监控插件的使用

    本篇主要讲解soul网关插件监控插件的使用 流程图: 技术方案 监控插件,使用influxdb来进行存储,使用前请你确保你正确的安装了influxdb.采用异步的disruptor进行保存.监控网关的 ...

  5. Soul网关-day16

    Soul网关-day16 Soul网关-hystrix插件(二) 今天这篇文章主要是为了勘误,还有把上次没跑通的东西跑通-惭愧-源码解读仍然还在路上. ​ 上一篇文章的操作有一定的不正确性,主要在我开 ...

  6. Soul网关-day17

    Soul网关-day17 Soul网关-hystrix插件(三) ​ 今天正式开始读hystrix的源码,昨天大概复现了熔断,同时发现在Soul-admin控制台处设置的一个参数:ErrorThres ...

  7. VMware 虚拟机的虚拟磁盘编程知识点扫盲之一

    目录 目录 前言 VMware 虚拟机文件类型 VMware 虚拟机的快照 Quiseced Snapshot Quiseced Snapshot 的创建过程 创建快照 创建快照的执行过程及原理 删除 ...

  8. soul网关mysql8_Dubbo学习系列之十七(微服务Soul网关)

    论起微服务,哪能不谈网关,老将有Zuul,后继有Gateway,但这些都和SpringCloud关系密切,其他网关如Kong,因Lua原因,玩起来略不顺手.这不,就来了个Soul,我顺便拿来整进了我在 ...

  9. Soul网关源码学习(14)- hystrix,resilienc4j,sentinel 插件的使用和对比

    文章目录 前言 hystrix 使用 resilienc4j 使用 sentinel 使用 对比 总结 前言 在前面第6~13章中,我们分析了 Soul 网关核心功能"代理转发"的 ...

最新文章

  1. minicom的使用,发送AT指令
  2. windows下带超时的telnet探测IP和端口
  3. 【专访】PP租车孙览江:与有梦想的人一拍即合,PM都有改变世界的小情怀
  4. android.animation(1) - ValueAnimator的ofInt(), ofFloat(), addUpdateListener(), addListener()(转)
  5. 乱谈数学--我理解的函数极限运算
  6. li 字多出了省略号_文字溢出自动显示省略号css方法 -
  7. 五年级计算机下册工作计划,五年级下学期工作计划
  8. java学习(172): 使用class实现反射编程,创建对象
  9. 招聘ASP.net高级Web开发工程师
  10. silverlight 中缓存应用程序相应的库文件
  11. 好用的小工具系列之---lombok--扔掉傻瓜式书写,精简你的代码,节约你的时间
  12. 关于购买域名的一些建议
  13. 创建一个员工类(Employee),其中包括:1) 4个私有属性:员工姓名(name)、员工年龄(age)、员工职位(position)、工资(salary)
  14. 轻松与劳氏Lowe‘s 对接 EDI 要准备什么?
  15. 微表情数据集汇总(全)
  16. win7连接sftp_WinSCP官方版下载_WinSCP(SFTP客户端) v5.17.1中文版 - Win7旗舰版
  17. 李彦宏:为理想找到归宿
  18. C++解一元二次方程
  19. cat全链路监控_CAT分布式监控系统(一):CAT功能介绍 CAT监控系统是什么、能做什么?...
  20. 【JVM】垃圾回收算法

热门文章

  1. Windows中文账户名修改为英文
  2. python中result的用法_关于Python中的列表理解及用法
  3. python并集_python去并集
  4. 向日葵Android受控端老版本,向日葵Android端版本更新:支持远程开关机
  5. 追问上交所资金校验缺失系统老化
  6. 微信门户开发框架-使用指导说明书
  7. android中 textview.setVisibility(View.VISIBLE)失效问题
  8. 无法识别 移动固态硬盘_M.2固态硬盘不能识别怎么办 Bios开启CSM识别M.2固态硬盘方法...
  9. 微型计算机也称为个人计算机由,微型计算机概述计算机概述微型电脑组装系统台式电脑...
  10. 工业互联网2.0体系下的边缘计算和云计算