服务降级和熔断

如何解决服务雪崩问题?(大量请求同时涌入系统,超过系统处理能力,导致服务响应时间增加,进而影响其它服务。)

1.服务降级

概念:

服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样,虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性。

使用场景:

当整个微服务架构整体的负载超出了预设的上限阈值或即将到来的流量预计将会超过预设的阈值时,为了保证重要或基本的服务能正常运行,可以将一些 不重要 或 不紧急 的服务或任务进行服务的 延迟使用 或 暂停使用。降级的方式可以根据业务来,可以延迟服务,比如延迟给用户增加积分,只是放到一个缓存中,等服务平稳之后再执行 ;或者在粒度范围内关闭服务,比如关闭相关文章的推荐。当服务提供者出现问题时,及时返回一个错误结果给服务消费者,避免服务消费者出现级联失败。

2.熔断器

服务降级和熔断_第1张图片

像这种调用链路的连锁故障,叫做雪崩。

正所谓刮骨疗毒,壮士断腕。在这种时候,就需要我们的熔断机制来挽救整个系统。熔断机制的大体流程和刚才所讲的考试策略如出一辙。

3.服务降级和服务熔断联合使用

服务降级和服务熔断可以单独使用,但联合使用可以提供更好的服务可用性和用户体验。

服务降级是指在系统压力过大或出现故障的情况下,通过降低服务的质量或功能,来保证系统的稳定性和可用性。例如,可以暂时关闭某些非核心功能或者限制某些用户的访问。

服务熔断是指在服务出现故障或超时等异常情况时,通过快速失败的方式,阻止请求继续发送,从而减轻对故障服务的压力,保护系统的稳定性。例如,可以设置一个阈值,当请求失败率达到一定比例时,自动触发熔断机制,停止向该服务发送请求。

配置文件:

feign:
  # 开启feign对hystrix熔断降级的支持
  hystrix:
    enabled: true
  # 修改调用超时时间
  client:
    config:
      default:
        connectTimeout: 2000
        readTimeout: 2000
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 2000

这段配置是针对Feign客户端使用Hystrix进行熔断降级的设置,具体含义如下:

  1. feign.hystrix.enabled: true:开启Feign对Hystrix熔断降级的支持。这意味着当调用的服务出现故障或超时时,Feign将使用Hystrix来处理熔断和降级逻辑。

  2. feign.client.config.default.connectTimeout: 2000:修改Feign客户端的连接超时时间为2000毫秒。这表示当Feign发起请求时,如果在2000毫秒内无法建立连接,将会触发超时处理。

  3. feign.client.config.default.readTimeout: 2000:修改Feign客户端的读取超时时间为2000毫秒。这表示当Feign发起请求后,如果在2000毫秒内无法获取到响应数据,将会触发超时处理。

  4. hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 2000:设置Hystrix命令的执行超时时间为2000毫秒。这表示当Hystrix执行一个命令时,如果在2000毫秒内没有得到响应,将会触发熔断降级逻辑。

总体来说,这段配置的作用是开启Feign对Hystrix熔断降级的支持,并对连接超时时间和读取超时时间进行了配置,同时设置了Hystrix命令的执行超时时间。这样可以在调用其他服务时,当服务出现故障或超时时,及时进行熔断降级,保证系统的稳定性和可用性。

你可能感兴趣的:(spring,cloud,spring,后端)