NOTE

2.10 如何设计容错组件

1. 什么是容错 微服务架构下,如果一个服务故障了,那么会影响到整个链路,导致服务整体不可用 2. 为什么需要容错 确保服务的可用性,防止雪崩效应 2.1. 服务雪崩 多个微服务之间调用的时候,假设服务A调用服务B和C,服务B调用服务D和E,服务C调用服务F和服务G...这就叫 扇出 因“服务提供者

Software Architecture & Engineering创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 什么是容错

微服务架构下,如果一个服务故障了,那么会影响到整个链路,导致服务整体不可用

2. 为什么需要容错

确保服务的可用性,防止雪崩效应

2.1. 服务雪崩

多个微服务之间调用的时候,假设服务A调用服务B和C,服务B调用服务D和E,服务C调用服务F和服务G…这就叫扇出 因“服务提供者的不可用”(原因)导致“服务调用者不可用”(结果),并将不可用逐渐放大的现象。换句话说,扇出链路上某一个服务失败,导致整条链路的服务都失败的情形

如图,服务C调用服务D,如果服务D出问题一直没有返回(响应时间过长或者不可用),服务C继续调用服务D,服务D还是没有返回…继续重试直至服务C的线程资源耗尽时无法提供其他服务,调用服务C其他接口的服务A和B也因此受到影响,最后影响到整个微服务系统 ![容错-雪崩](https://raw.githubusercontent.com/TDoct/images/master/1624798477_20210627205332802_11894.png =500x)

3. 如何设计容错组件

3.1. 超时

3.2. 重试

3.3. 限流

3.4. 熔断

  • ![容错-熔断](https://raw.githubusercontent.com/TDoct/images/master/1624798480_20210627205411419_5616.png =500x)
  • 错误数达到阈值时不再调用目标模块,好转则恢复调用
    • 当下游的服务因为某种原因突然变得不可用或响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。
    • 如果目标服务情况好转则恢复调用。
  • 即断路器模式

3.5. 隔离

3.6. 降级

4. 容错组件

4.1. Hystrix

Hystrix.md(关联笔记尚未公开)

5. 参考