APIM премиум-класса обеспечивают мультирегиональные возможности.Это гарантирует, что узел APIM находится ближе к возможному клиенту, и, кроме того, в случае сбоя одного из регионов трафик будет перенаправлен в другие регионы.Но это гарантируется только между клиентом и узлом APIM, такие гарантии не предоставляются для бэкэнд-связи APIM <->, так как со стороны APIM нет способа вывести вашу бэкэнд-инфраструктуру.Таким образом, для этого требуется некоторая конфигурация.
Вы можете использовать Traffic Manager перед вашим бэкендом для объединения нескольких конечных точек бэкэнда в одну и полагаться на зонды работоспособности для маршрутизации трафика (так же, как 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 в случае инцидента.