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

(0)

相关推荐

  • 喜马拉雅自研网关架构演进过程

    背景 网关是一个比较成熟的产品,基本上各大互联网公司都会有网关这个中间件,来解决一些公有业务的上浮,而且能快速的更新迭代,如果没有网关,要更新一个公有特性,就要推动所有业务方都更新和发布,那是效率极低 ...

  • Hystrix高可用系统容错框架,资源隔离,熔断,限流

    hystrix 作用 做资源隔离,限流,熔断,降级,运维监控. 直白说,hystrix一定程度上能保障了微服务架构系统服务的高可用性,避免了很多服务雪崩,系统彻底瘫痪的情况,提高了系统容错性 hyst ...

  • Soul网关限流插件Sentinel和Resilience4J扫盲

    首先看Soul中Sebtinel可以配置的项目 对应的配置的含义 degrade count:熔断阈值 whether to open the degrade (1 or 0):是否开启熔断,1开启 ...

  • Soul网关插件之Spring Cloud

    com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known serve ...

  • 很全面!PID相关知识点汇总

    PID的数学模型 在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握PID算法的设计与实现过程,对于一般的研发人员来讲,应该是足够应对一般研发问题了,而难能可 ...

  • Soul限流插件之RateLimiter插件

    从Soul的RateLimiter插件的配置可以看到 RateLimiter是依赖于Redis的,可以看到限流也可以基于Redis的三种模式的单机(standlone),集群(cluster)和哨兵( ...

  • 高中数学导数相关知识点总结+解题技巧

    一. 导数概念的引入 1.  导数的物理意义 瞬时速率.一般的,函数y=f(x)在x= 处的瞬时变化率是 2.  导数的几何意义 曲线的切线,当点 趋近于P时,直线 PT 与曲线相切.容易知道,割线的 ...

  • 常用钢热处理回火计算相关知识点

    钢的回火硬度(H)取决于回火温度(T)和回火时间(t),三者之间存在着一定的函数关系,即H = f(T,t).当 t为定值时,H和T的函数关系可划分为四种类型: 1)直线型: 2)抛物线型: 3)幂函 ...

  • Soul网关同步数据逻辑初探

    Http同步数据 按照前面两个同步数据的分析,可以看到Http同步跟其他的同步的加载基本一样.不同的地方主要是加载数据的操作 加载数据的过程主要是 private void start() { // ...

  • 高中化学:原电池和电解池相关知识点总结!考前复习一定要看!

    一.理解掌握原电池和电解池的构成条件和工作原理 二.掌握电解反应产物及电解时溶液pH值的变化规律及有关电化学的计算 1.要判断电解产物是什么 必须理解溶液中离子放电顺序,阴极放电的总是溶液中的阳离子, ...

  • 高中化学原电池和电解池相关知识点总结

    一.理解掌握原电池和电解池的构成条件和工作原理 二.掌握电解反应产物及电解时溶液pH值的变化规律及有关电化学的计算 1.要判断电解产物是什么 必须理解溶液中离子放电顺序,阴极放电的总是溶液中的阳离子, ...