服务容错

服务容错的背景:
 服务容错是高并发所带来的问题,在微服务架构中,服务于服务之间可以互相调用,但是由于网络原因或者自身的原因,我们并不能保证服务一直可以使用。所以当一个服务出现了问题,我们在调用这个服务的时候就会出现线程阻塞的情况,此时如果有大量的请求涌入,就会出现多线程阻塞等待,从而导致服务器瘫痪,由于服务之间的依赖性,故障就会传播上去,最终导致服务器整个崩溃。这就是“雪崩效应”。

常见的服务容错模式:

1、超时:最简单的容错方式,在调用方为服务调用设置一个超时时间,避免无限制的等待下游系统造成的线程堆积。

微服务调用时间设置 微服务之间调用超时_jar

2、限流:在提供方一端限制进入的流量,保证服务不会因为超负荷流量而崩溃。

微服务调用时间设置 微服务之间调用超时_java_02

3、仓壁模式:资源的隔离手段。在调用方进行资源隔离,比如线程池,保证消耗的资源有上限,避免无限量调用资源占用其它请求的资源。

微服务调用时间设置 微服务之间调用超时_spring_03

4、熔断器:在调用方进行控制,根据策略定义失败情况,失败数字达到阀值时打开熔断器,不再调用底层服务,熔断器窗口(一段时间后)达到时,释放一个请求进入底层,如果请求执行成功则关闭熔断器,正常调用,如果请求失败则继续保持熔断器打开知道下一个熔断窗口达到。

微服务调用时间设置 微服务之间调用超时_xml_04


5、降级:为服务提供一个托体方案,一旦服务无法正常调用,就使用这个托底方案。

微服务调用时间设置 微服务之间调用超时_java_05

sentinel的基本使用

概念:sentinel是以流量为切入点,从流量控制、熔断降级、系统负载保护等多个方面保护服务的稳定性。

sentinel的使用:
1、添加依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  <!--排除依赖,解决@RestController的类返回为xml格式的问题-->
  <exclusions>
    <exclusion>
      <artifactId>jackson-dataformat-xml</artifactId>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、修改配置:暴露actutor的端点

# 应用名称
spring:
  application:
    name: sentineldemo
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
server:
  port: 8005
# actuator
management:
  endpoints:
    web:
      exposure:
        include: '*'

3、整合sentinel控制台,sentinel控制台是懒加载,所以我们需要先发请求,才能看到配置
4、下载jar包,启动

java -Dserver.port=8840 -Dcsp.sentinel.dashboard.server=localhost:8840 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.7.1.jar

5、修改应用配置、链接sentinel-dashboard