问答题275/1053什么是服务熔断?什么是服务降级?

难度:
2021-11-02 创建

参考答案:

服务熔断服务降级是分布式系统中常用的容错设计模式,用于应对服务故障,避免故障扩展和雪崩效应,提升系统的可用性和稳定性。

服务熔断(Circuit Breaker)

服务熔断是一种设计模式,旨在防止在某个服务出现故障时,导致请求持续失败并传递给下游系统,从而产生更大范围的故障。熔断器机制在服务的请求失败达到一定阈值时,自动切断对故障服务的请求,避免系统持续处于故障状态,提供了容错能力。

工作原理

服务熔断通常有三种状态:

  1. 闭合状态(Closed):当服务正常工作时,请求可以直接通过。如果请求失败超过设定阈值(如超时、500错误等),熔断器进入“打开状态”。
  2. 打开状态(Open):如果连续失败的请求达到一定数量,熔断器会“打开”,拒绝所有请求,避免对失败的服务继续请求。此时,所有请求都会直接返回错误(例如返回 500 错误)。
  3. 半开状态(Half-Open):熔断器在一定时间后转为半开状态,允许少量请求通过,检测服务是否恢复。若这些请求成功,熔断器恢复到闭合状态;若失败,则回到打开状态。

优点

  • 保护下游服务:避免了服务故障的蔓延,保护了系统中其他正常运行的服务。
  • 提高系统可用性:即使部分服务不可用,系统仍能继续提供部分功能,减少系统的整体宕机时间。

常见实现

  • Hystrix:Netflix 提供的一个常用熔断器框架。
  • Resilience4j:另一个现代化的熔断器框架,适用于 Java 微服务架构。

示例

假设某个服务无法响应或出现大量超时,熔断器会启动并停止所有请求,防止因服务崩溃而进一步影响系统。并在恢复后通过半开状态逐步恢复流量,避免瞬时恢复导致系统再次崩溃。


服务降级(Service Degradation)

服务降级是一种应急机制,指在系统负载过高、某个服务不可用或响应超时时,主动地提供一个简化的、较为基础的功能版本,而不是直接让整个服务不可用。通过降级,系统依然能够提供部分功能,减少对用户的影响。

工作原理

服务降级通常是在某个功能的高复杂度操作出现问题时,替换为简单的、成本低的操作或返回一个默认值。例如,原本复杂的计算任务可以在降级时返回缓存数据,或者返回一个“服务繁忙”消息。

常见方式

  1. 默认值返回:当服务出现问题时,可以返回一个固定的默认值。例如:某个查询服务宕机时,返回一个空的数据列表。
  2. 降级路径:系统可以根据流量、负载等因素动态决定是否启用降级,可能会选择低优先级的服务,甚至关闭一些不必要的功能。
  3. 缓存数据:在服务不可用时,返回最近缓存的数据,而不是从后端服务请求。

优点

  • 提升可用性:即使某个服务发生故障,也能通过降级保证系统的基础功能仍然可用,避免完全不可用。
  • 减少对用户的影响:用户仍能获得某些服务的响应,尽管功能可能被简化。

常见实现

  • Spring Cloud 提供的 @HystrixCommand 注解来标记哪些方法需要降级。
  • Nginx 或其他负载均衡工具也可以通过配置策略实现流量的降级。

示例

比如,假设一个支付系统中的结算服务出现了故障,系统可以启用降级逻辑,返回一个“支付繁忙”的提示,而不是让用户等待无限长时间或者直接返回错误。

最近更新时间:2024-12-11