熔断设计:防止应用程序不断地尝试执行可能会失败的操作,使得应用程序继续执行而不用等待修正错误,或者浪费 CPU 时间去等待长时间的超时产生。
熔断器模式也可以使应用程序能够诊断错误是否已经修正。如果已经修正,应用程序会再次尝试调用操作。
熔断器的状态机举例:
1. 闭合(Closed)状态:
失败次数计数器->超过阈值->切换到断开 (Open) 状态->开启超时时钟->时钟超过指定时间->切换到半断开(Half-Open)状态(修正导致调用失败的错误,以回到正常工作的状态)。
在 Closed 状态下,错误计数器在特定的时间间隔内会自动重置,防止某次偶然错误导致熔断器进入断开状态。
2. 断开 (Open) 状态:在该状态下,对应用程序的请求会立即返回错误响应,而不调用后端的服务。
3. 半开(Half-Open)状态:允许应用程序一定数量的请求去调用服务。如果:调用成功->认为错误已经修正->熔断器切换到闭合状态->将错误计数器重置;如果:调用失败->认为问题仍然存在->熔断器切回到断开状态->重置计时器来给系统一定的时间来恢复。
熔断设计的重点
1. 错误的类型。
2. 日志监控。
3. 测试服务是否可用。
4. 手动重置。
5. 并发问题。熔断器的实现不应该阻塞并发的请求或者增加每次请求调用的负担。
6. 资源分区。
7. 重试错误的请求。