Dela via


Serverdelar i API Management

GÄLLER FÖR: Alla API Management-nivåer

En serverdel (eller API-serverdel) i API Management är en HTTP-tjänst som implementerar klientdels-API:et och dess åtgärder.

När du importerar vissa API:er konfigurerar API Management API-serverdelen automatiskt. API Management konfigurerar till exempel serverdelswebbtjänsten vid import:

API Management stöder även användning av andra Azure-resurser som en API-serverdel, till exempel:

Fördelar med serverdelar

API Management stöder serverdelsentiteter så att du kan hantera serverdelstjänsterna i ditt API. En serverdelsentitet kapslar in information om serverdelstjänsten, vilket främjar återanvändning mellan API:er och förbättrad styrning.

Använd serverdelar för en eller flera av följande:

  • Auktorisera autentiseringsuppgifterna för begäranden till serverdelstjänsten
  • Dra nytta av API Management-funktioner för att underhålla hemligheter i Azure Key Vault om namngivna värden har konfigurerats för autentisering av huvud- eller frågeparameter.
  • Definiera regler för kretsbrytare för att skydda serverdelen från för många begäranden
  • Dirigera eller belastningsbelasta begäranden till flera serverdelar

Konfigurera och hantera serverdelsentiteter i Azure Portal eller med hjälp av Azure-API:er eller verktyg.

Referensserverdel med set-backend-service-princip

När du har skapat en serverdel kan du referera till serverdelen i dina API:er. set-backend-service Använd principen för att dirigera en inkommande API-begäran till serverdelen. Om du redan har konfigurerat en serverdelswebbtjänst för ett API kan du använda set-backend-service principen för att omdirigera begäran till en serverdelsentitet i stället. Till exempel:

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

Du kan använda villkorsstyrd logik med set-backend-service principen för att ändra den effektiva serverdelen baserat på plats, gateway som anropades eller andra uttryck.

Här är till exempel en princip för att dirigera trafik till en annan serverdel baserat på gatewayen som anropades:

<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/>

Kretsbrytaren

API Management exponerar en kretsbrytaregenskap i serverdelsresursen för att skydda en serverdelstjänst från att överbelastas av för många begäranden.

  • Egenskapen kretsbrytare definierar regler för att snubbla kretsbrytaren, till exempel antalet eller procentandelen felförhållanden under ett definierat tidsintervall och ett intervall med statuskoder som indikerar fel.
  • När kretsbrytaren körs slutar API Management att skicka begäranden till serverdelstjänsten under en definierad tid och returnerar ett svar på 503 Tjänsten är inte tillgänglig för klienten.
  • Efter den konfigurerade resans varaktighet återställs kretsen och trafiken återupptas till serverdelen.

Serverdelsbrytaren är en implementering av kretsbrytarmönstret så att serverdelen kan återställas från överbelastningssituationer. Den utökar allmänna principer för hastighetsbegränsning och samtidighetsbegränsning som du kan implementera för att skydda API Management-gatewayen och dina serverdelstjänster.

Kommentar

  • För närvarande stöds inte serverdelskretsens brytare i förbrukningsnivån för API Management.
  • På grund av den distribuerade karaktären hos API Management-arkitekturen är regler för kretsbrytare ungefärliga. Olika instanser av gatewayen synkroniseras inte och tillämpar regler för kretsbrytare baserat på information om samma instans.
  • För närvarande kan endast en regel konfigureras för en backend-kretsbrytare.

Exempel

Använd API Management REST API eller en Bicep- eller ARM-mall för att konfigurera en kretsbrytare i en serverdel. I följande exempel körs kretsbrytaren i myBackend i API Management-instansen myAPIM när det finns tre eller fler 5xx statuskoder som anger serverfel på en timme.

Kretsbrytaren återställs efter 1 timme. Om ett Retry-After huvud finns i svaret accepterar kretsbrytaren värdet och väntar på den angivna tiden innan begäranden skickas till serverdelen igen.

Inkludera ett kodfragment som liknar följande i Bicep-mallen för en serverdelsresurs med en kretsbrytare:

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
        }
      ]
    }
   }
 }

Belastningsutjämningspool

API Management stöder serverdelspooler när du vill implementera flera serverdelar för ett API och belastningsutjämningsbegäranden över dessa serverdelar.

Använd en serverdelspool för scenarier som följande:

  • Sprid belastningen till flera serverdelar, som kan ha enskilda serverdelsbrytare.
  • Flytta belastningen från en uppsättning serverdelar till en annan för uppgradering (blågrön distribution).

Om du vill skapa en serverdelspool anger du type egenskapen för serverdelen till pool och anger en lista över serverdelar som utgör poolen.

Kommentar

  • För närvarande kan du bara inkludera enskilda serverdelar i en serverdelspool. Du kan inte lägga till en serverdel av typen pool till en annan serverdelspool. Du kan inkludera upp till 30 serverdelar i en pool.
  • På grund av API Management-arkitekturens distribuerade karaktär är belastningsutjämningen för serverdelen ungefärlig. Olika instanser av gatewayen synkroniseras inte och belastningsutjämning baseras på information om samma instans.

Alternativ för belastningsutjämning

API Management stöder följande alternativ för belastningsutjämning för serverdelspooler:

  • Resursallokering: Som standard distribueras begäranden jämnt över serverdelarna i poolen.
  • Viktad: Vikter tilldelas till serverdelarna i poolen och begäranden distribueras över serverdelarna baserat på den relativa vikt som tilldelats varje serverdel. Använd det här alternativet för scenarier som att utföra en blågrön distribution.
  • Prioritetsbaserad: Serverdelar ordnas i prioritetsgrupper och begäranden skickas till serverdelarna i ordning efter prioritetsgrupperna. I en prioritetsgrupp distribueras begäranden antingen jämnt över serverdelarna eller (om de tilldelas) enligt den relativa vikt som tilldelas varje serverdel.

Kommentar

Serverdelar i grupper med lägre prioritet används endast när alla serverdelar i grupper med högre prioritet inte är tillgängliga eftersom regler för kretsbrytare har utlösts.

Exempel

Använd API Management REST API eller en Bicep- eller ARM-mall för att konfigurera en serverdelspool. I följande exempel konfigureras serverdelen myBackendPool i API Management-instansen myAPIM med en serverdelspool. Exempel på serverdelar i poolen heter backend-1 och backend-2. Båda serverdelarna finns i gruppen med högst prioritet. i gruppen har backend-1 en större vikt än backend-2 .

Inkludera ett kodfragment som liknar följande i Bicep-mallen för en serverdelsresurs med en belastningsutjäcknad pool:

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
        }
      ]
    }
  }
}

Begränsningar