文章

服务保障

服务保障

在 Spring Cloud 中,能够使用的服务保证,如下:

  • spring-cloud-netflix-hystrix ,基于 Hystrix 实现。
  • Resilience4j
  • spring-cloud-alibaba-sentinel ,基于 Sentinel 实现。

为什么要使用服务保障?

在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC)。为了保证其高可用,单个服务又必须集群部署。由于网络原因或者自身的原因,服务并不能保证服务的 100% 可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务累积,导致服务瘫痪,甚至导致服务“雪崩”。为了解决这个问题,就出现断路器模型。

详细的内容,可以看看 《为什么要使用断路器 Hystrix?》

Hystrix

  • 作用:断路器,保护系统,控制故障范围。
  • 简介:Hystrix 是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。

Hystrix 原理,整体如下图:

关于 Hystrix 的源码解析,可以看看艿艿写的 《Hystrix 源码解析系列》 。

Hystrix 隔离策略?

Hystrix 有两种隔离策略:

  • 线程池隔离
  • 信号量隔离

实际场景下,使用线程池隔离居多,因为支持超时功能。

详细的,可以看看 《Hystrix 的资源隔离策略》 文章。

聊聊 Hystrix 缓存机制?

Hystrix 提供缓存功能,作用是:

减少重复的请求数。在同一个用户请求的上下文中,相同依赖服务的返回数据始终保持一致。详细的,可以看看 《Hystrix 缓存功能的使用》 文章。

什么是 Hystrix 断路器?

Hystrix 断路器通过 HystrixCircuitBreaker 实现。

HystrixCircuitBreaker 有三种状态 :

  • CLOSED :关闭
  • OPEN :打开
  • HALF_OPEN :半开

其中,断路器处于 OPEN 状态时,链路处于非健康状态,命令执行时,直接调用回退逻辑,跳过正常逻辑。

HystrixCircuitBreaker 状态变迁如下图 :

  • 红线健康 :初始时,断路器处于 CLOSED 状态,链路处于 状态。当满足如下条件,断路器从 CLOSED 变成 OPEN 状态:
    • 周期( 可配,HystrixCommandProperties.default_metricsRollingStatisticalWindow = 10000 ms )内,总请求数超过一定量( 可配,HystrixCommandProperties.circuitBreakerRequestVolumeThreshold = 20 ) 。
    • 错误比例 请求占总请求数超过一定 ( 可配,HystrixCommandProperties.circuitBreakerErrorThresholdPercentage = 50% ) 。

什么是 Hystrix 服务降级?

在 Hystrix 断路器熔断时,可以调用一个降级方法,返回相应的结果。当然,降级方法需要配置和编码,如果胖友不需要,也可以不写,也就是不会有服务降级的功能。

具体的使用方式,可以看看 《通过 Hystrix 理解熔断和降级》

本文由作者按照 CC BY 4.0 进行授权