微服务的断路器实现图解Golang通用版
断路器背景 微服务连锁故障场景 在分布式环境中,各个微服务相互调用,当某些情况下,比如后端中间件服务故障、第三方服务中断导致某个服务无限期不可用,短时间无法恢复,则可能会导致连锁故障,最终影响压垮整个业务集群 断路器与重试 断路器模式不同于重试模式,重试模式是使应用程序可以重试操作以期望它会成功,而断路器模式是防止应用程序执行一个可能失败的操作,减少执行可能失败操作的CPU、内存、线程等资源的浪费,从而保证服务的整体可用 断路器设计解析 基于代理模式的断路器 断路器相当于一个请求操作执行的代理,托管请求操作的执行 实现原理流程: 拦截服务执行的请求,通过当前状态决定是否直接返回,如果否则执行后续操作 尝试执行操作,并获取返回结果 根据返回结果和当前统计信息,决定当前断路器的状态,修改状态 返回执行结果 断路器状态机  断路器状态机实现上有三种状态:Closed(断路器关闭)、Open(开放)、HalfOpen(半开放) 状态 说明 备注 Closed 关闭 断路器关闭正常执行操作 Open 打开 断路器开放,所有请求直接返回错误,不执行任何请求 HalfOpen 半开放 允许有限数量的请求通过,如果执行成功,恢复到关闭状态,如果仍然失败