Soul网关Hystrix插件相关知识点扫盲
线程隔离和信号量隔离
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插件相关知识点扫盲相关推荐
- Soul源码解析(16)-Soul网关熔断插件使用及源码解读
一.目标 1.使用Soul网关熔断插件: 2.解读熔断插件关键代码: 二.内容 2.1 背景 熔断:在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时 ...
- soul网关-2-divide插件
先来设想一下,网关如果收到了一个请求http://xxx.com/openapi/appname/order/findById?id=3,那么怎么将请求转发给对应的业务? 可以想象一下大概是这几个步骤 ...
- soul网关-4-sign插件签名认证
一个网关的下游是多个业务线,如果这些业务线都有鉴权的需求,那么可以使用网关的鉴权功能,没必要每个业务线都自己实现一套鉴权的代码.除非是与业务强相关的鉴权,是那种不具有普适性的需求. soul网关的鉴权 ...
- soul网关监控插件的使用
本篇主要讲解soul网关插件监控插件的使用 流程图: 技术方案 监控插件,使用influxdb来进行存储,使用前请你确保你正确的安装了influxdb.采用异步的disruptor进行保存.监控网关的 ...
- Soul网关-day16
Soul网关-day16 Soul网关-hystrix插件(二) 今天这篇文章主要是为了勘误,还有把上次没跑通的东西跑通-惭愧-源码解读仍然还在路上. 上一篇文章的操作有一定的不正确性,主要在我开 ...
- Soul网关-day17
Soul网关-day17 Soul网关-hystrix插件(三) 今天正式开始读hystrix的源码,昨天大概复现了熔断,同时发现在Soul-admin控制台处设置的一个参数:ErrorThres ...
- VMware 虚拟机的虚拟磁盘编程知识点扫盲之一
目录 目录 前言 VMware 虚拟机文件类型 VMware 虚拟机的快照 Quiseced Snapshot Quiseced Snapshot 的创建过程 创建快照 创建快照的执行过程及原理 删除 ...
- soul网关mysql8_Dubbo学习系列之十七(微服务Soul网关)
论起微服务,哪能不谈网关,老将有Zuul,后继有Gateway,但这些都和SpringCloud关系密切,其他网关如Kong,因Lua原因,玩起来略不顺手.这不,就来了个Soul,我顺便拿来整进了我在 ...
- Soul网关源码学习(14)- hystrix,resilienc4j,sentinel 插件的使用和对比
文章目录 前言 hystrix 使用 resilienc4j 使用 sentinel 使用 对比 总结 前言 在前面第6~13章中,我们分析了 Soul 网关核心功能"代理转发"的 ...
最新文章
- minicom的使用,发送AT指令
- windows下带超时的telnet探测IP和端口
- 【专访】PP租车孙览江:与有梦想的人一拍即合,PM都有改变世界的小情怀
- android.animation(1) - ValueAnimator的ofInt(), ofFloat(), addUpdateListener(), addListener()(转)
- 乱谈数学--我理解的函数极限运算
- li 字多出了省略号_文字溢出自动显示省略号css方法 -
- 五年级计算机下册工作计划,五年级下学期工作计划
- java学习(172): 使用class实现反射编程,创建对象
- 招聘ASP.net高级Web开发工程师
- silverlight 中缓存应用程序相应的库文件
- 好用的小工具系列之---lombok--扔掉傻瓜式书写,精简你的代码,节约你的时间
- 关于购买域名的一些建议
- 创建一个员工类(Employee),其中包括:1) 4个私有属性:员工姓名(name)、员工年龄(age)、员工职位(position)、工资(salary)
- 轻松与劳氏Lowe‘s 对接 EDI 要准备什么?
- 微表情数据集汇总(全)
- win7连接sftp_WinSCP官方版下载_WinSCP(SFTP客户端) v5.17.1中文版 - Win7旗舰版
- 李彦宏:为理想找到归宿
- C++解一元二次方程
- cat全链路监控_CAT分布式监控系统(一):CAT功能介绍 CAT监控系统是什么、能做什么?...
- 【JVM】垃圾回收算法
热门文章
- Windows中文账户名修改为英文
- python中result的用法_关于Python中的列表理解及用法
- python并集_python去并集
- 向日葵Android受控端老版本,向日葵Android端版本更新:支持远程开关机
- 追问上交所资金校验缺失系统老化
- 微信门户开发框架-使用指导说明书
- android中 textview.setVisibility(View.VISIBLE)失效问题
- 无法识别 移动固态硬盘_M.2固态硬盘不能识别怎么办 Bios开启CSM识别M.2固态硬盘方法...
- 微型计算机也称为个人计算机由,微型计算机概述计算机概述微型电脑组装系统台式电脑...
- 工业互联网2.0体系下的边缘计算和云计算