在微服务系统中,各服务之间必然存在着某种依赖关系。服务容错指的是某个服务宕机时,依赖服务能够检测并执行容错处理。
容错策略
-
故障转移(failed over):在多实例的场景下,某个实例异常时自动切换到其他实例进行重试。
-
快速失败(failed fast):快速返回异常,而不是等待超时或多次重试
-
安全失败(failed safe):走默认的处理逻辑
-
沉默失败(failed silent):若大量请求失败,停止继续提供服务,防止异常在整个系统传播
-
故障恢复(failed back):异步处理请求
容错设计模式
-
断路器模式
为每个服务维护断路器状态:OPEN(完全放开请求)、CLOSED(所有请求直接失败failed fast)、HALF OPEN(允许少许请求)。
ON===连续失败多次==>CLOSED===一段时间后==>HALF OEPN
HALF OEPN===连续多个请求成功==>ON
HALF OEPN===连续多个请求失败==>OFF
-
舱壁隔离模式
即资源隔离模式,为每个服务分配有限的资源,避免某个服务异常耗尽所有资源。
线程池模式:每个服务对应一个N线程的线程池处理请求
信号量模式:每个服务使用N个信号量控制请求量
-
重试模式
即failed over和failed back的实践,都是采用重试的思想。
重试要求请求具有幂等性,且有终止条件(时间或次数)
采用重试模式必须充分考虑重试带来的额外请求负载。