使用Azure API管理模拟故障转移

时间:2018-12-17 05:52:26

标签: azure azure-api-management

Azure API管理支持多区域部署,这对于我们的API和后端服务的HA非常有用。我们正在使用此工具测试我们的多区域部署,但是,我们如何测试呢?如何在API Management上模拟或手动触发故障转移?

预先感谢

2 个答案:

答案 0 :(得分:2)

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策略。

答案 1 :(得分:0)

您可以尝试将状态代码设置为302,当它满足状态代码时,它将使用相应的后端服务。这是示例代码:

<when condition="condition="@(context.Response != null && (context.Response.StatusCode==302))">

有关更多详细信息,您可以参考此article和此one