服务雪崩产生原因及解决办法

定义:

服务雪崩效应产生与服务堆积在同一个线程池中,因为所有的请求都是同一个线程池进行处理,这时候如果在高并发情况下,所有的请求全部访问同一个接口,
这时候可能会导致其他服务没有线程进行接受请求,这就是服务雪崩效应效应。
tomcat有个线程池,每个线程去处理客户端发送的每次请求。
服务雪崩产生原因及解决办法_第1张图片

解决雪崩效应@HystrixCommand
2、服务降级
3、服务熔断
4、服务隔离机制

代码

 /**
     * 解决服务雪崩效应
     *  Hystrix 有两种方式配置保护服务 通过注解和接口形式
* fallbackMethod 方法的作用 :服务降级执行
* Hystrix默认开启线程池隔离方式,服务降级,服务熔断
* @return */
@HystrixCommand(fallbackMethod = "orderToMemberGetUserInfoHystrixFallback") @RequestMapping("/orderToMemberGetUserInfoHystrix") public ResponseBase orderToMemberGetUserInfoHystrix() { log.info("orderToMemberGetUserInfo beginning!!"); System.out.println("orderToMemberGetUserInfoHystrix 线程池名称 : " + Thread.currentThread().getName()); return memberServiceFeign.getUserInfo(); } public ResponseBase orderToMemberGetUserInfoHystrixFallback() { return setResultSuccess("返回一个友好的提示。。。。服务降级,服务器忙请稍后重试"); }

application.yml

 ### 开启Hystrix断路器
feign:
  hystrix:
    enabled: true
    #### hystrix禁止服务超时时间
hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: false

jar包

        <!-- hystrix断路器 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

2、服务降级 在高并发情况下,防止用户一直等待(返回一个友好的提示,直接给客户端,
不会去处理请求,调用fallBack本地方法),目的是为了用户体验。 秒杀----当前请求人数过多,请稍后重试
3、服务熔断
熔断机制目的为了保护服务,在高并发的情况下,如果请求达到一定极限(可以自己设置阔值)如果流量超出了设置阈值,让后直接拒绝访问,保护当前服务。使用服务降级方式返回一个友好提示,服务熔断和服务降级一起使用
4、服务隔离机制 因为默认情况下,只有一个线程池会维护所有的服务接口,如果大量的请求访问同一个接口,达到tomcat
线程池默认极限,可能会导致其他服务无法访问。 解决服务雪崩效应:使用服务隔离机制(线程池方式和信号量),使用线程池方式实現隔离的原理:
相当于每个接口(服务)都有自己独立的线程池,因为每个线程池互不影响,这样的话就可以解决服务雪崩效应。 线程池隔离:
每个服务接口,都有自己独立的线程池,每个线程池互不影响。 信号量隔离:
使用一个原子计数器(或信号量)来记录当前有多少个线程在运行,当请求进来时先判断计数器的数值,若超过设置的最大线程个数则拒绝该请求,若不超过则通行,这时候计数器+1,请求返
回成功后计数器-1。

你可能感兴趣的:(springcloud)