共用方式為


API 管理中的後端

適用於:所有 APIM 階層

API 管理中的「後端」 (或 API 後端) 是一種 HTTP 服務,可實作您的前端 API 及其作業。

匯入特定 API 時,API 管理會自動設定 API 後端。 例如,API 管理在匯入時設定後端 Web 服務:

API 管理也支援使用其他 Azure 資源做為 API 後端,例如:

後端的優點

APIM 支援後端實體,因此您可以管理 API 的後端服務。 後端實體會封裝後端服務的相關資訊,促進跨 API 的重複使用性,並改善治理。

針對下列一或多個項目使用後端:

  • 授權對後端服務的要求認證
  • 如果已針對標頭或查詢參數驗證設定具名值,請利用 APIM 功能來維護 Azure Key Vault 中的密碼。
  • 定義斷路器規則,以保護後端免於太多要求
  • 將要求路由或負載平衡至多個後端

設定和管理 Azure 入口網站中的後端實體,或使用 Azure API 或工具。

使用 set-backend-service 原則參考後端

建立後端之後,您可以在 API 中參考後端。 使用 set-backend-service 原則將連入 API 要求導向後端。 如果您已為 API 設定後端 Web 服務,您可以使用 set-backend-service 原則,改為將要求重新導向至後端實體。 例如:

<policies>
    <inbound>
        <base />
        <set-backend-service backend-id="myBackend" />
    </inbound>
    [...]
<policies/>

您可以搭配 set-backend-service 原則使用條件式邏輯,根據所呼叫的位置、閘道或其他運算式來變更有效的後端。

例如,以下是根據所呼叫閘道將流量路由傳送至另一個後端的原則:

<policies>
    <inbound>
        <base />
        <choose>
            <when condition="@(context.Deployment.Gateway.Id == "factory-gateway")">
                <set-backend-service backend-id="backend-on-prem" />
            </when>
            <when condition="@(context.Deployment.Gateway.IsManaged == false)">
                <set-backend-service backend-id="self-hosted-backend" />
            </when>
            <otherwise />
        </choose>
    </inbound>
    [...]
<policies/>

斷路器

APIM 會在後端資源中公開斷路器屬性,以保護後端服務不至負荷過多要求。

  • 斷路器屬性會定義規則來中斷斷路器,例如定義時間間隔期間失敗狀況的數目或百分比,以及指出失敗的狀態代碼範圍。
  • 斷路器跳脫時,API 管理會在定義的時間內停止將要求傳送至後端服務,並將 503 服務無法使用的回應傳回給用戶端。
  • 設定的跳脫持續時間之後,線路會重設,流量會繼續傳到後端。

後端斷路器是斷路器模式的實作,可讓後端從多載情況復原。 其可增強一般速率限制並行限制原則,您可以實作這些原則來保護 API 管理閘道和後端服務。

注意

  • 目前,API 管理的取用層不支援後端斷路器。
  • 由於 API 管理架構的分散式本質,斷路器跳脫規則大致近似。 網路閘道的不同執行個體不會同步處理,而且會根據相同執行個體上的資訊套用斷路器規則。
  • 目前,後端斷路器只能設定一個規則。

範例

使用 API 管理 REST API 或 Bicep 或 ARM 範本,在後端設定斷路器。 在下列範例中,當有三個以上的 5xx 狀態碼指出伺服器在 1 小時內發生錯誤時,在 APIM 執行個體 myAPIMmyBackend 中的斷路器會跳掉。

斷路器會在 1 小時後重設。 如果回應中有 Retry-After 標頭,斷路器會接受值,並在再次將要求傳送至後端之前等候指定的時間。

在具有斷路器的後端資源的 Bicep 範本中包含類似下面的程式碼片段:

resource symbolicname 'Microsoft.ApiManagement/service/backends@2023-09-01-preview' = {
  name: 'myAPIM/myBackend'
  properties: {
    url: 'https://mybackend.com'
    protocol: 'http'
    circuitBreaker: {
      rules: [
        {
          failureCondition: {
            count: 3
            errorReasons: [
              'Server errors'
            ]
            interval: 'PT1H' 
            statusCodeRanges: [
              {
                min: 500
                max: 599
              }
            ]
          }
          name: 'myBreakerRule'
          tripDuration: 'PT1H'  
          acceptRetryAfter: true
        }
      ]
    }
   }
 }

負載平衡的集區

當您想要針對 API 實作多個後端,並跨這些後端平衡負載要求時,APIM 會支援後端集區

針對下列案例使用後端集區:

  • 將負載分散到多個後端,這可能會有個別的後端斷路器。
  • 將負載從一組後端轉移到另一組後端以進行升級 (藍綠部署)。

若要建立後端集區,請將後端的 type 屬性設定為 pool,並指定組成集區的後端清單。

注意

  • 目前,您只能在後端集區中包含單一後端。 您無法將類型 pool 的後端新增至另一個後端集區。 您可以在集區中包含最多 30 個後端。
  • 由於 API 管理架構的分散式本質,後端負載平衡大致近似。 網路閘道的不同執行個體不會同步處理,而且會根據相同執行個體上的資訊進行負載平衡。

負載平衡選項

APIM 支援後端集區的下列負載平衡選項:

  • 循環配置資源:根據預設,要求會平均分散到集區中的後端。
  • 加權:權數會指派給集區中的後端,而要求會根據指派給每個後端的相對權數分散到後端。 針對執行藍綠部署等案例,請使用此選項。
  • 優先順序型:後端會組織在優先順序群組中,而要求會依優先順序群組的順序傳送至後端。 在優先順序群組中,要求會平均分散到後端,或根據指派給每個後端的相對權數來分配 (如果已指派)。

注意

只有在高優先順序群組中的所有後端無法使用時,才會使用較低優先順序群組中的後端,因為斷路器規則已中斷。

範例

使用 API 管理 REST API 或 Bicep 或 ARM 範本來設定後端集區。 在下列範例中,API 管理執行個體 myAPIM 中的後端 myBackendPool 會設定為後端集區。 集區中的範例後端名為 backend-1backend-2。 這兩個後端都位於最高優先順序群組中;在群組內,backend-1 的權數大於 backend-2

在具有負載平衡集區的後端資源的 Bicep 範本中包含類似下面的程式碼片段:

resource symbolicname 'Microsoft.ApiManagement/service/backends@2023-09-01-preview' = {
  name: 'myAPIM/myBackendPool'
  properties: {
    description: 'Load balancer for multiple backends'
    type: 'Pool'
    pool: {
      services: [
        {
          id: '/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ApiManagement/service/<APIManagementName>/backends/backend-1'
          priority: 1
          weight: 3
        }
        {
          id: '/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ApiManagement/service/<APIManagementName>/backends/backend-2'
          priority: 1
          weight: 1
        }
      ]
    }
  }
}

限制