Bagikan melalui


Backend di API Management

BERLAKU UNTUK: Semua tingkatAN API Management

Sebuah backend (atau backend API) di API Management adalah layanan HTTP yang mengimplementasikan API front-end dan operasinya.

Saat mengimpor API tertentu, API Management mengonfigurasi backend API secara otomatis. Misalnya, API Management mengonfigurasi layanan web backend saat mengimpor:

API Management juga mendukung penggunaan sumber daya Azure lainnya sebagai backend API, seperti:

Manfaat backend

API Management mendukung entitas backend sehingga Anda dapat mengelola layanan backend API Anda. Entitas backend merangkum informasi tentang layanan backend, mempromosikan penggunaan kembali di seluruh API dan meningkatkan tata kelola.

Gunakan backend untuk satu atau beberapa hal berikut:

  • Mengotorisasi kredensial permintaan ke layanan backend
  • Manfaatkan fungsionalitas API Management untuk mempertahankan rahasia di Azure Key Vault jika nilai bernama dikonfigurasi untuk autentikasi parameter header atau kueri.
  • Tentukan aturan pemutus sirkuit untuk melindungi backend Anda dari terlalu banyak permintaan
  • Merutekan atau menyeimbangkan beban permintaan ke beberapa backend

Mengonfigurasi dan mengelola entitas backend di portal Azure, atau menggunakan API atau alat Azure.

Mereferensikan backend menggunakan kebijakan layanan set-backend

Setelah membuat backend, Anda dapat mereferensikan backend di API Anda. set-backend-service Gunakan kebijakan untuk mengarahkan permintaan API masuk ke backend. Jika Anda sudah mengonfigurasi layanan web backend untuk API, Anda dapat menggunakan set-backend-service kebijakan untuk mengalihkan permintaan ke entitas backend sebagai gantinya. Contohnya:

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

Anda dapat menggunakan logika kondisional dengan set-backend-service kebijakan untuk mengubah backend yang efektif berdasarkan lokasi, gateway yang dipanggil, atau ekspresi lainnya.

Misalnya, berikut adalah kebijakan untuk merutekan lalu lintas ke backend lain berdasarkan gateway yang dipanggil:

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

Pemutus sirkuit

API Management mengekspos properti pemutus sirkuit di sumber daya backend untuk melindungi layanan backend agar tidak kewalahan oleh terlalu banyak permintaan.

  • Properti pemutus arus menentukan aturan untuk melakukan perjalanan pemutus sirkuit, seperti jumlah atau persentase kondisi kegagalan selama interval waktu yang ditentukan dan rentang kode status yang menunjukkan kegagalan.
  • Ketika perjalanan pemutus sirkuit, API Management berhenti mengirim permintaan ke layanan backend untuk waktu yang ditentukan, dan mengembalikan respons 503 Layanan Tidak Tersedia kepada klien.
  • Setelah durasi perjalanan yang dikonfigurasi, sirkuit mengatur ulang dan lalu lintas dilanjutkan ke backend.

Pemutus sirkuit backend adalah implementasi pola pemutus sirkuit untuk memungkinkan backend pulih dari situasi kelebihan beban. Ini menambah kebijakan pembatasan tarif umum dan pembatasan konkurensi yang dapat Anda terapkan untuk melindungi gateway API Management dan layanan backend Anda.

Catatan

  • Saat ini, pemutus sirkuit backend tidak didukung di tingkat Konsumsi API Management.
  • Karena sifat arsitektur API Management yang didistribusikan, aturan tripping pemutus arus adalah perkiraan. Instans gateway yang berbeda tidak disinkronkan dan akan menerapkan aturan pemutus arus berdasarkan informasi pada instans yang sama.
  • Saat ini, hanya satu aturan yang dapat dikonfigurasi untuk pemutus sirkuit backend.

Contoh

Gunakan API Management REST API atau templat Bicep atau ARM untuk mengonfigurasi pemutus sirkuit di backend. Dalam contoh berikut, pemutus sirkuit di myBackend dalam perjalanan myAPIM instans API Management ketika ada tiga atau beberapa 5xx kode status yang menunjukkan kesalahan server dalam 1 jam.

Pemutus sirkuit diatur ulang setelah 1 jam. Retry-After Jika header ada dalam respons, pemutus sirkuit menerima nilai dan menunggu waktu yang ditentukan sebelum mengirim permintaan ke backend lagi.

Sertakan cuplikan yang mirip dengan yang berikut ini di templat Bicep Anda untuk sumber daya backend dengan pemutus sirkuit:

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

Kumpulan seimbang beban

API Management mendukung kumpulan backend, saat Anda ingin menerapkan beberapa backend untuk API dan permintaan load-balance di seluruh backend tersebut.

Gunakan kumpulan backend untuk skenario seperti berikut ini:

  • Sebarkan beban ke beberapa backend, yang mungkin memiliki pemutus sirkuit backend individual.
  • Geser beban dari satu set backend ke yang lain untuk peningkatan (penyebaran biru-hijau).

Untuk membuat kumpulan backend, atur type properti backend ke pool dan tentukan daftar backend yang membentuk kumpulan.

Catatan

  • Saat ini, Anda hanya dapat menyertakan backend tunggal dalam kumpulan backend. Anda tidak dapat menambahkan backend jenis pool ke kumpulan backend lain. Anda dapat menyertakan hingga 30 backend dalam kumpulan.
  • Karena sifat terdistribusi dari arsitektur API Management, penyeimbangan beban backend adalah perkiraan. Instans gateway yang berbeda tidak disinkronkan dan akan memuat keseimbangan berdasarkan informasi pada instans yang sama.

Opsi penyeimbangan muatan

API Management mendukung opsi penyeimbangan beban berikut untuk kumpulan backend:

  • Round-robin: Secara default, permintaan didistribusikan secara merata di seluruh backend di kumpulan.
  • Tertimbang: Bobot ditetapkan ke backend di kumpulan, dan permintaan didistribusikan di seluruh backend berdasarkan bobot relatif yang ditetapkan untuk setiap backend. Gunakan opsi ini untuk skenario seperti melakukan penyebaran biru-hijau.
  • Berbasis prioritas: Backend diatur dalam grup prioritas, dan permintaan dikirim ke backend dalam urutan grup prioritas. Dalam grup prioritas, permintaan didistribusikan secara merata di seluruh backend, atau (jika ditetapkan) sesuai dengan bobot relatif yang ditetapkan untuk setiap backend.

Catatan

Backend dalam grup prioritas yang lebih rendah hanya akan digunakan ketika semua backend dalam grup prioritas yang lebih tinggi tidak tersedia karena aturan pemutus sirkuit tersandung.

Contoh

Gunakan API Management REST API atau templat Bicep atau ARM untuk mengonfigurasi kumpulan backend. Dalam contoh berikut, backend myBackendPool dalam instans API Management myAPIM dikonfigurasi dengan kumpulan backend. Contoh backend di kumpulan diberi nama backend-1 dan backend-2. Kedua backend berada dalam grup prioritas tertinggi; dalam grup, backend-1 memiliki bobot yang lebih besar daripada backend-2 .

Sertakan cuplikan yang mirip dengan yang berikut ini di templat Bicep Anda untuk sumber daya backend dengan kumpulan seimbang beban:

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

Batasan