sentinel–基础–5.2–隔离和降级–线程隔离(舱壁模式)
代码位置
https://gitee.com/DanShenGuiZu/learnDemo/tree/master/sentinel_learn/demo01
https://gitee.com/DanShenGuiZu/learnDemo/tree/master/sentinel_learn/demo2
1、线程隔离(舱壁模式)
线程隔离就是通过线程数来控制服务调用并发数。比如给一个请求A配置3个线程,那么请求A的最大并发数就是3。
2、线程隔离的2种方式实现
- 线程池隔离
- 信号量隔离(Sentinel默认采用)
2.1、线程池隔离
就是给每个服务,设置它的线程池大小。
比如上面,给服务A设置线程池大小为10,给服务B设置线程池大小为5
2.1.1、优点
轻量级
无额外开销
2.1.1、缺点
不支持主动超时
不支持异步调用
2.1.1、使用场景
高频调用
高扇出(扇出:A服务调用B服务,B服务调用C1,C2,C3服务,那么B服务的扇出就是C1,C2,C3)
2.2、信号量隔离
通过计数器来控制访问的并发数。比如上面,设置计数器为10,那么这个服务的并发数最大就是10。
2.2.1、优点
支持主动超时
支持异步调用
2.2.1、缺点
线程的额外开销比较大
2.2.1、使用场景
低扇出
3、测试
设置getUserId
接口设置流控规则,线程数不能超过2。
并发线程数:是该资源能使用用的tomcat线程数的最大值。也就是通过限制线程数量,实现舱壁模式