那显而易见,做服务隔离的目的就是避免服务之间相互影响。毕竟谁也不能说自己的微服务百分百可用,如果不做隔离,一旦一个服务出现了问题,整个系统的稳定性都会受到影响! 因此,做服务隔离是很有必要的。
什么是线程池隔离
将用户请求线程和服务执行线程分割开来,同时约定了每个服务最多可用线程数。
使用线程池隔离后
解释:
动物园有了新规矩-线程隔离,就是说每个服务单独设置一个小房间(独立线程池),把大厅区域和服务区域隔离开来,每个服务房间也有接待数量限制,比如我设置了熊猫馆最多接纳10人,犀牛管最多5人,大象馆20人。这样,即便来了20个人想你熊猫,我们也只能接待10人,剩下的10个人就会收到Thread Pool Rejects。如此一来,也不会耽搁动物园为用户提供其他服务。
什么是信号量隔离
小时候我们就知道“红灯停,绿灯行”,跟着交通信号的指示过马路。信号量也是这么一种放行、禁行的开关作用。它和线程池技术一样,控制了服务可以被同时访问的并发数量。
线程池隔离和信号量隔离区别
隔离方式 | 是否支持超时 | 是否支持熔断 | 隔离原理 | 是否是异步调用 | 资源消耗 |
---|---|---|---|---|---|
线程池隔离 | 支持,可直接返回 | 支持,当线程池到达maxSize后,再请求会触发fallback接口进行熔断 | 每个服务单独用线程池 | 可以是异步,也可以是同步。看调用的方法 | 大,大量线程的上下文切换,容易造成机器负载高 |
信号量隔离 | 不支持,如果阻塞,只能通过调用协议(如:socket超时才能返回) | 支持,当信号量达到maxConcurrentRequests后。再请求会触发fallback | 通过信号量的计数器 | 同步调用,不支持异步 | 小,只是个计数器 |