您现在的位置是:首页 >学无止境 >微服务保护(线程隔离、降级、熔断)网站首页学无止境

微服务保护(线程隔离、降级、熔断)

sgmwgntw 2024-06-17 10:32:07
简介微服务保护(线程隔离、降级、熔断)

线程隔离

线程隔离有两种方式实现:

  • 线程池隔离
  • 信号量隔离

线程池隔离

假设服务A依赖于服务B和服务C,那么服务A就会分别对服务B和服务C创建线程池,当有请求进来时不会使用服务A本身的线程,而是到对应的线程池中取一个线程来调用feign的客户端来发起远程调用。

此时如果服务B出现故障,最多只会把服务A中对应服务B的线程池占满,不会影响到服务A访问服务C

优点:支持主动超时、支持异步调用

缺点:线程的额外开销比较大 

信号量隔离

信号量不会去创建独立的线程池,而是直接使用服务A原始的线程去请求,但是它维持了一个计数器。假设这个计数器总量为10,每当服务A向服务B发起请求时计数器就会减一,当请求处理完后在归还信号。当计数器减至为0时如果再有请求进来就会直接被拒绝。

优点:轻量级,无额外开销 

缺点:不支持主动超时、不支持异步调用

 

降级

概念:当莫个接口不可用,有请求进来该接口时,直接返回“你的网络有问题,请稍后再试”。当降级太多就会触发熔断机制

 

熔断

其思路是由断路器统计服务调用的异常比例、慢请求比例,如果超出阈值则会熔断该服务。即拦截访问该服务的一切请求;而当服务恢复时,断路器会放行访问该服务的请求。

服务熔断:默认是关闭的,如果需要开启需要在引导类上添加注解:@EnableCircuitBreaker

Closed这种状态下断容器不会拦截任何请求但是断容器会统计调用的异常比例,如果异常比例超过一个阀值就会进入Open状态。

Open拦截进入该服务的请求,也就相当于进入熔断状态但是它不会一直熔断,而是有一个期限,当熔断期限结束后就会进入Half-Open半开状态

Half-Open:它会每隔5秒重新尝试请求微服务,然后根据这次请求的结果来进行选择。

  • 当结果为失败时:再次进Open状态入
  • 当结果为成功时:将会切换到Closed状态
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。