使用 Azure API 管理模拟故障转移
Simulating a failover with Azure API Management
Azure API Management 支持多区域部署,这对我们 API 和后端服务的 HA 非常有用。我们正在使用它测试我们的多区域部署,但是,我们如何测试它呢?我们如何在 API 管理上模拟或手动触发故障转移?
提前致谢
您可以尝试将您的状态码设置为302,当满足状态码时会使用相应的后台服务。这是示例代码:
<when condition="condition="@(context.Response != null && (context.Response.StatusCode==302))">
APIM 的溢价捆绑提供了多区域功能。这确保 APIM 节点更接近可能的客户端,此外,如果其中一个区域出现故障,流量将被重新路由到其他区域。但这仅在客户端和 APIM 节点之间得到保证,APIM<-> 后端通信没有此类保证,因为从 APIM 端无法推断您的后端基础结构。所以这需要一些配置。
您可以在后端前面使用流量管理器将多个后端端点聚合为一个,并依靠运行状况探测来路由流量(很像 APIM 对其自己的区域端点所做的那样)。
或者,您可以在 APIM 策略中处理多个后端端点,在某些情况下在一个和另一个之间切换流量。这是一些简单的实现:
<policies>
<inbound>
<base />
</inbound>
<backend>
<retry condition="@(context.Response.StatusCode >= 500)" count="1" interval="0" first-fast-retry="true">
<choose>
<when condition="@(context.Response.StatusCode >= 500)">
<set-backend-service base-url="https://my-second-endpoint" />
</when>
</choose>
<forward-request />
</retry>
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
现在这是非常低效的,因为它总是第一次调用默认端点,等待 500,然后第二次调用另一个替代端点。您可以通过使用缓存策略来存储活动端点来改进它,并在检测到 500 时进行切换。
或者您可以使用静态配置并依靠外部健康探测和自动化来更新 APIM 策略以防万一。
Azure API Management 支持多区域部署,这对我们 API 和后端服务的 HA 非常有用。我们正在使用它测试我们的多区域部署,但是,我们如何测试它呢?我们如何在 API 管理上模拟或手动触发故障转移?
提前致谢
您可以尝试将您的状态码设置为302,当满足状态码时会使用相应的后台服务。这是示例代码:
<when condition="condition="@(context.Response != null && (context.Response.StatusCode==302))">
APIM 的溢价捆绑提供了多区域功能。这确保 APIM 节点更接近可能的客户端,此外,如果其中一个区域出现故障,流量将被重新路由到其他区域。但这仅在客户端和 APIM 节点之间得到保证,APIM<-> 后端通信没有此类保证,因为从 APIM 端无法推断您的后端基础结构。所以这需要一些配置。
您可以在后端前面使用流量管理器将多个后端端点聚合为一个,并依靠运行状况探测来路由流量(很像 APIM 对其自己的区域端点所做的那样)。
或者,您可以在 APIM 策略中处理多个后端端点,在某些情况下在一个和另一个之间切换流量。这是一些简单的实现:
<policies>
<inbound>
<base />
</inbound>
<backend>
<retry condition="@(context.Response.StatusCode >= 500)" count="1" interval="0" first-fast-retry="true">
<choose>
<when condition="@(context.Response.StatusCode >= 500)">
<set-backend-service base-url="https://my-second-endpoint" />
</when>
</choose>
<forward-request />
</retry>
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
现在这是非常低效的,因为它总是第一次调用默认端点,等待 500,然后第二次调用另一个替代端点。您可以通过使用缓存策略来存储活动端点来改进它,并在检测到 500 时进行切换。
或者您可以使用静态配置并依靠外部健康探测和自动化来更新 APIM 策略以防万一。