8-18 Hystrix隔离术介绍
线程隔离这块,一定会有线程池,有线程池,我们一般会给他启用一个唯一标识。然后用来对于线程池进行一些相关的操作。就像我们有孩子,我们给他起名字张三、二狗,紧接着呢我想去召唤他什么的,我就用这个名字就可以了。这就是ThreadPoolKey的意思。
ThreadPoolKey不是必填项。Hytrix在你不指定ThreadPoolKey的情况下默认会使用GroupKey命名线程池。
添加线程池的方法
演示怎么改线程池的名称。
信号量是操作系统底层的一个概念。大家如果搜linux的信号量,应该能搜到具体的意思。Hytrix里面信号量的通俗的解释。可以认为它是一种计数器,没进来就加1.当信号量上限满了,我就不允许后面再进来了。说白了它就是一个排队的过程,你进来一个,我就加一个,这就好像停车场,来一个车,车位就数量减1,数量减没了就代表我所有的车就停满了。
信号量不是单起一个线程给你执行业务逻辑,它就在你的主线程上去执行,但是你主线程调用的次数我要限制,超过这个数量,我就不允许你在主线程上继续执行了。 就是信号量本身做的一个事情。这个事情不难理解。
官方图,用来讲解信号量和线程隔离。
当一个请求进来了,它就分为三种情况两大类去执行。首先左边这一块。这一块是线程隔离。
右侧的就是信号量。它有10个计数。
两者主要的区别就在这里,加Denpendency Thread依赖的线程,所以在线程池这块它本身会给我重启线程进行业务处理。而在信号量隔离这里,它不会给我们重启线程,直接就进行执行了。
下面这个图主要讲,线程隔离的好处。这里面有很多的的thread线程。
同一个业务进来了。访问了两个率框和一个红框。访问了这三个框。访问了之后呢,这两个绿框都执行成功了。而红框失执行失败了。
但是这里告诉你了,要么它就重试,要么就超时,然后进行一个快速失败。而并不会影响另外两个地方。所以这个图最主要想讲解的就是,当我们线程隔离以后,这些业务处理当某一个线程出现问题以后,并不会影响其他线程的处理。那这件事情本身就是它隔离术想要做的事情。
一个请求进来分别访问,上两个都可以成功,中间这个就进行一个快速的失败,即便不快速失败也不会影响其他两个线程返回我们正确的结果。这就是它线程隔离的好处。
信号量隔离就不需要图去说了。因为它就是当前线程去执行,和我们原来理解的没有什么差异,他唯独增加的就是我们限流措施,
结束