服务容错
在分布式架构的应用中,由于服务数量的增加,不可避免的会在某些时候产生依赖服务故障,在高并发的时候,当前服务如果没有容错处理,极大可能会导致服务崩溃。
案例
由一个最底层的原子服务实例发生故障时,处理请求缓慢或者不响应,会导致它的调用服务实例随着一起变得缓慢,长时间的请求堆积,会导致服务压力过大,从而导致更多的服务出现故障。
解决方法
1、超时:调用者服务实例,在服务调用时,一段时间内未得到响应则结束此次请求。
2、限流: 提供者服务实例,限制同一时间进入服务的请求数量,保证服务的正常运转。
3、舱壁模式:资源隔离,在服务调用者使用线程池等方式将依赖服务做隔离处理,限制依赖服务的资源
消耗在合理的范围内。
4、熔断器:在服务调用者,调用服务服务时,如果发现某个依赖服务故障,则自行熔断,不在调用,
在指定时间后再次检测当前依赖服务是否恢复,如果恢复,则恢复到集群环境中。
阿里巴巴 Sentinel
限流
1、流控模式:直接 ,流控效果:快速失败
对一个资源请求设置单机阈值,当每秒请求大于当前阈值时进行限流,拒绝剩余的请求。
2、流控模式:关联,流控效果:快速失败
设置一个关联请求,当关联请求达到每秒阈值时,对当前请求进行限流。
3、流控模式:直接,流控效果:Warm Up,默认冷加载因子是3
设置一个目标阈值,起始阈值为:目标阈值/冷加载因子,设定预热时间。
当每秒请求次数大于起始阈值时,阈值会在设定的预热时间内达到目标阈值。
4、流控模式:直接,流控效果:排队等待
设置一个阈值和超时时间,在当前请求数量大于阈值时,放行等阈值的请求数量,剩余请求进入
排队等待状态,若果超出设定的超时时间,当前请求被拒绝。