微服务之服务容错

服务容错

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

常见的服务容错模式:

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

2、限流:在提供方一端限制进入的流量,保证服务不会因为超负荷流量而崩溃。
微服务之服务容错_第2张图片

3、仓壁模式:资源的隔离手段。在调用方进行资源隔离,比如线程池,保证消耗的资源有上限,避免无限量调用资源占用其它请求的资源。
微服务之服务容错_第3张图片

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

微服务之服务容错_第4张图片
5、降级:为服务提供一个托体方案,一旦服务无法正常调用,就使用这个托底方案。
微服务之服务容错_第5张图片

sentinel的基本使用

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

sentinel的使用:
1、添加依赖

<dependency>
  <groupId>org.springframework.bootgroupId>
  <artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
  <groupId>org.springframework.bootgroupId>
  <artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
  <groupId>com.alibaba.cloudgroupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
  <groupId>com.alibaba.cloudgroupId>
  <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
  
  <exclusions>
    <exclusion>
      <artifactId>jackson-dataformat-xmlartifactId>
      <groupId>com.fasterxml.jackson.dataformatgroupId>
    exclusion>
  exclusions>
dependency>
<dependency>
  <groupId>org.springframework.cloudgroupId>
  <artifactId>spring-cloud-starter-openfeignartifactId>
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

你可能感兴趣的:(分布式,java)