一、问题分析
在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,由于网络原因或者 自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络 延迟,此时若有大量的网络涌入,会形成任务累计,导致服务瘫痪。
在SpringBoot程序中,默认使用内置tomcat作为web服务器。单tomcat支持最大的并发请求是有限 的,如果某一接口阻塞,待执行的任务积压越来越多,那么势必会影响其他接口的调用。
二、解决方案
1、线程池隔离:为了不影响其他接口的正常访问,对多个服务之间进行隔离,也就是给每个服务配置一个线程池,从而当某个服务并发量太大时,使服务之间不受影响。
2、信号量隔离:比如说可以在下单方法中可以记录一个请求下单方法的一个阈值,当请求数量超过次阈值,直接报错。
线程池隔离详解:
(1) 配置坐标
为了方便实现线以线程池的形式完成资源隔离,需要引入如下依赖
<!--hystrix-->
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-metrics-event-stream</artifactId>
<version>1.5.12</version>
</dependency>
<dependency>
<groupId>com.netflix.hystrix</</