跳到主要内容

Circuit Breaker

概述

Circuit Breaker 策略旨在通过监控上游服务的健康状况并在服务变得不稳定时阻止请求,从而防止微服务架构中的级联故障。这确保了系统的稳定性、改善了用户体验,并加快了故障恢复的速度。

电路断路器在 three states 之间转换:

  • Closed: 请求正常处理。
  • Open: 由于高故障率,请求被阻止。
  • Half-Open: 发送有限数量的测试请求以检查服务是否已恢复。

该策略有助于 prevent excessive retriesreduce latencyensure fault tolerance 在分布式系统中的应用。

配置详情

字段配置

电路断路器策略提供了几个 configurable parameters,用于确定在系统故障的情况下何时以及如何阻止请求。

Field nameKeyTypeRequiredDescription
错误测量单位时间(秒)window_timenumber​true​窗口大小(秒)​
错误率(%)failure_percent_threshold​number​true​应该失败以打开电路的请求百分比​
最小请求数量*min_calls_in_windownumber​true​开始计算所需的窗口内最小调用次数​
API 超时设置(毫秒)api_call_timeout_ms​number​true​请求超时并计为失败之前的等待时间​
开放状态持续时间 (秒)wait_duration_in_open_state​number​true​在自动从开放状态转换到半开放状态之前等待的持续时间(秒)​
半开放状态持续时间 (秒)wait_duration_in_half_open_state​number​true​在半开放状态下等待的持续时间(秒),然后自动转换到关闭状态​
半开放状态下的最小请求数*half_open_min_calls_in_window​number​true​在半开放状态下开始计算所需的最小调用数​
半开放状态下的最大请求数*half_open_max_calls_in_window​number​true​半开放状态下允许的最大调用数​
设置响应错误代码*error_status_code​number​false​在发生错误时覆盖响应状态代码(电路断路器阻止请求)​
设置响应错误消息*error_msg_override​string​false​在发生错误时用自定义消息覆盖​
设置响应头*response_header_override​string​false​在发生错误时覆盖“Content-Type”响应头​
设置异常路径*excluded_apis​string​true​字符串化的 JSON,以防止在这些 API 上运行电路断路器​.
可以通过单击每个路径上的加号或减号按钮添加或删除其他路径。
活动回退路径fallback pathstringfalse定义了一个回退路径,以处理主服务不可用时的请求。

关于电路断路器行为的附加说明

Circuit Breaker 基于故障检测周期运行,并在三个状态之间转换:

  1. Closed: 正常状态,流量通过并监控错误率。
  2. Open: 当错误率阈值被超过时触发,暂时阻止所有传入流量。
  3. Half-Open: 在配置的时间后,允许有限的流量以测试系统恢复。
  4. Recovery: 如果测试流量没有问题,系统将恢复正常(关闭)。

每个设置都有助于控制这个生命周期:

FieldDescription
最小请求数在单位时间内开始测量错误所需的最小请求数。
API 超时如果请求超过此阈值,则视为失败。
开放状态持续时间电路保持开放的持续时间(以秒为单位)。
半开放持续时间电路保持半开放状态的持续时间(以秒为单位)。
半开放中的最小请求数半开放期间开始观察错误率所需的最小流量。
半开放中的最大请求数评估恢复的最大测试请求数。

响应配置选项

  • Custom Error Code: 当流量被阻止时返回的错误代码。
  • Custom Error Message: 当流量被阻止时返回的消息体。
  • Custom Error Content-Type: 错误响应的内容类型。

异常路径配置

定义不应应用电路断路器的特定路径。

备注

格式:METHOD + PATH

例如,GET /example/v1

回退路径配置

如果电路断路器被激活,请求可以重定向到备用页面:

  • 回退路径允许为被阻止的请求定义自定义重定向路由。
  • 默认路径将被使用,除非定义了回退路径。
  • 要重定向到同一 API 中的特定路径,请将所需的 API PATH 指定为回退路径。