服务保障
服务保障
在 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 进行授权


