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:
- Spesifikasi OpenAPI.
- API SOAP.
- Sumber daya Azure, seperti Aplikasi Fungsi Azure yang dipicu HTTP atau Aplikasi Logika.
API Management juga mendukung penggunaan sumber daya Azure lainnya sebagai backend API, seperti:
- Kluster Microsoft Azure Service Fabric.
- Layanan khusus.
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
- Untuk tingkat Pengembang dan Premium, instans API Management yang diterapkan di jaringan virtual internal dapat menimbulkan kesalahan HTTP 500
BackendConnectionFailure
saat URL titik akhir gateway dan URL backend adalah sama. Jika Anda mengalami batasan ini, ikuti petunjuk di artikel Pembatasan permintaan API Management Rantai Sendiri dalam mode jaringan virtual internal di blog Komunitas Teknologi. - Saat ini, hanya satu aturan yang dapat dikonfigurasi untuk pemutus sirkuit backend.
Konten terkait
- Blog: Menggunakan pemutus sirkuit Azure API Management dan penyeimbangan beban dengan Azure OpenAI Service
- Siapkan backend Service Fabric menggunakan portal Microsoft Azure.