Skip to content

服务容错

含义:在分布式系统中,当某些组件出现故障时,系统仍然能够继续运行并提供服务的能力。

目的:增强系统的鲁棒性,减少单点故障对整体系统的影响。通过合理运用策略,可以显著提升分布式系统的可用性和可靠性。

核心概念

  1. 故障检测: 自动监测服务状态的方法(如心跳机制)。

  2. 故障恢复

    自动重启失败的服务实例。

    数据库事务处理与回滚策略。

  3. 降级处理:当主要服务不可用时,如何切换到备用方案或简化功能以维持基本操作。

  4. 限流与熔断器模式

    实施流量控制防止系统过载。

    使用熔断器避免连锁故障的发生。

常见的技术手段

  • 负载均衡:分散请求压力,提高系统的并发处理能力。
  • 重试机制:对于瞬时错误自动进行重试。
  • 超时设置:为每个外部调用设定合理的超时时间,避免长时间等待导致资源耗尽。
  • 异步通信:利用消息队列实现服务间的异步调用,增强系统的弹性和响应速度。

工具与框架

Hystrix(Java)、Resilience4jIstio等。

熔断器模式(Circuit Breaker Pattern)

当一个服务调用另一个服务失败次数达到一定阈值时,熔断器会“跳闸”,阻止后续的请求直接到达该服务,从而防止雪崩效应。

例子: 假设你有一个电子商务网站,其中订单处理服务依赖于库存检查服务。如果库存检查服务由于过载而变得不可用,熔断器将拦截所有到该服务的请求,并返回预定义的错误或默认响应,而不是让整个订单处理流程崩溃。

超时与重试机制

设置合理的超时时间和适当的重试策略来处理短暂的服务中断。

例子: 在微服务架构中,当用户尝试登录时,身份验证服务可能因为临时网络问题而无法立即响应。通过设置合理的超时时间(如500毫秒),并在首次失败后进行有限次数的重试(比如最多3次),可以提高用户体验和系统的稳定性。

限流

Rate Limiting

控制进入系统的请求数量,以保护系统免受突发流量的影响。

例子: 社交媒体平台可能会对API请求实施限流措施,例如每分钟允许每个用户最多发送100条消息。这样可以避免某个用户突然发送大量请求导致服务器过载。

回退与指数回退

Retry with Exponential Backoff

当请求失败时,等待一段时间后再尝试,且每次重试之间的时间间隔逐渐增加。

例子: 在文件上传服务中,如果初次上传失败,客户端可以在1秒后重试,若再次失败,则等待2秒、4秒等逐步增加的时间间隔进行下一次尝试,直到成功或达到最大重试次数。

数据库事务管理

使用数据库事务确保一系列操作要么全部成功,要么全部不执行,保证数据的一致性和完整性。

例子: 银行转账过程中,从一个账户扣款并同时向另一个账户存款的操作需要在一个事务内完成,以防止资金丢失或重复转移

异步通信与队列

使用异步消息传递机制解耦服务间的直接依赖关系。

例子: 在线购物网站中,下单后立即将订单信息放入消息队列,而非同步地通知仓库管理系统准备发货。这使得前端销售服务不会因为后台物流处理延迟而受到影响。