SpringCloud学习笔记 -----Hystrix 服务降级、熔断机制、服务隔离

一.什么是服务雪崩效应

服务雪崩效应产生与服务堆积在同一个线程池中,因为所有的请求都是同一个线程池进行处理,这时候如果在高并发情况下,所有的请求全部访问同一个接口,
这时候可能会导致其他服务没有线程进行接受请求,这就是服务雪崩效应效应。

二.怎么解决雪崩效应?

解决雪崩的方案就是 服务降级+服务熔断,服务隔离,服务限流

服务降级

在高并发情况下,防止用户一直等待,使用服务降级方式(直接返回一个友好的提示给客户端,调用fallBack方法)

服务熔断

熔断机制目的为了保护服务,在高并发的情况下,如果请求达到一定极限(可以自己设置阔值)如果流量超出了设置阈值,让后直接拒绝访问,保护当前服务。使用服务降级方式返回一个友好提示,服务熔断和服务降级一起使用

服务隔离

因为默认情况下,只有一个线程池会维护所有的服务接口,如果大量的请求访问同一个接口,达到tomcat 线程池默认极限,可能会导致其他服务无法访问。

解决服务雪崩效应:使用服务隔离机制(线程池方式和信号量),使用线程池方式实現隔离的原理:  相当于每个接口(服务)都有自己独立的线程池,因为每个线程池互不影响,这样的话就可以解决服务雪崩效应。

  线程池隔离:

  每个服务接口,都有自己独立的线程池,每个线程池互不影响。

  信号量隔离:

使用一个原子计数器(或信号量)来记录当前有多少个线程在运行,当请求进来时先判断计数器的数值,若超过设置的最大线程个数则拒绝该请求,若不超过则通行,这时候计数器+1,请求返 回成功后计数器-1。

服务限流

   服务限流就是对接口访问进行限制,常用服务限流算法令牌桶、漏桶。计数器也可以进行粗暴限流实现。

 

三.SpringCloud的组件Hystrix 完美提供了解决方案

Maven依赖信息

<!-- hystrix断路器 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>

</dependency>

开启Hystrix断路器。记得别禁止超时时间,只要把超时时间设置长一点就行了

feign:

  hystrix:

enabled: true

    

#### hystrix禁止服务超时时间

hystrix:  

 command: 

   default: 

      execution: 

       timeout: 

        enabled: false

 

@SpringBootApplication

@EnableEurekaClient

@EnableFeignClients

@EnableHystrix

public class MyApplication{

public static void main(String[] args) {

SpringApplication.run(AppOrder.class, args);

}

 

}

 

 

 

服务降级处理

@HystrixCommand(fallbackMethod = "orderToUserInfoFallback")

@GetMapping("/orderToUserInfo")

public ResponseBase orderToUserInfoHystrix() {

System.out.println("orderToUserInfo:" + "当前线程池名称:" + Thread.currentThread().getName());

return memberServiceFeigin.getUserInfo();

}

 

@RequestMapping("/orderToUserInfoFallback")

public ResponseBase orderToUserInfoFallback() {

return setResultError("系统错误!!!!");

}

使用@HystrixCommand 注解就接口对立一个线程池,就服务隔离的线程池隔离方案,不会影响到其他接口的正常使用,就是对CPU要求有点高,土豪可以无视

Fallback回调

@RequestMapping("/orderToUserInfo")

public ResponseBase orderToUserInfo() {

return memberServiceFeigin.getUserInfo();

}

 

  @Component

public class MemberServiceFallback extends BaseApiService implements   MemberServiceFeigin {

public ResponseBase getUserInfo() {

// 服务降级处理

return setResultError("系统错误,请稍后重试!");

}

 

}

 

 

很高兴能够为你提供关于Spring Cloud的笔记。Spring Cloud是一套基于Spring Boot的微服务框架,它提供了一系列开箱即用的工具和组件,帮助开发者快速构建和部署分布式系统。下面是一些关键的笔记要点: 1. 服务注册与发现:Spring Cloud提供了Eureka、Consul和Zookeeper等注册中心,用于服务的注册与发现,实现了服务之间的自动发现和负载均衡。 2. 服务调用:通过Spring Cloud的RestTemplate或Feign客户端,可以轻松实现服务之间的远程调用。Feign还支持声明式的服务调用,简化了代码的编写。 3. 负载均衡:Spring Cloud提供了Ribbon和LoadBalancer等组件,用于实现负载均衡。通过配置负载均衡策略,可以将请求分发到不同的服务实例上。 4. 服务容错:通过Hystrix或Sentinel等组件,可以实现服务的容错和熔断。当某个服务不可用时,可以快速失败或者返回默认值,保证整个系统的稳定性。 5. 配置中心:Spring Cloud Config提供了集中式的配置管理,可以将配置文件集中存储在Git、SVN等版本控制系统中,并实现配置文件的动态刷新。 6. 链路追踪:通过Spring Cloud Sleuth或Zipkin等工具,可以实现分布式系统的链路追踪和监控。可以了解每个请求经过的各个服务节点,便于排查和解决问题。 7. 消息驱动:Spring Cloud Stream和Spring Cloud Bus等组件,提供了消息驱动的方式来实现服务之间的解耦和异步通信。 这只是对Spring Cloud的一些简单介绍,希望能够帮助到你。如果有具体的问题或者需要进一步的资料,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值