Penskalaan berbasis peristiwa di Azure Functions
Dalam paket Konsumsi, Konsumsi Flex, dan Premium, Azure Functions menskalakan sumber daya dengan menambahkan lebih banyak instans berdasarkan jumlah peristiwa yang memicu fungsi.
Cara aplikasi fungsi Anda menskalakan tergantung pada paket hosting:
Paket konsumsi: Setiap instans host Functions dalam paket Konsumsi dibatasi, biasanya memori 1,5 GB dan satu CPU. Instans host mendukung seluruh aplikasi fungsi. Dengan demikian, semua fungsi dalam sumber daya berbagi aplikasi fungsi dalam instans diskalakan secara bersamaan. Saat aplikasi fungsi berbagi paket Konsumsi yang sama, aplikasi tersebut masih diskalakan secara independen.
Paket Konsumsi Flex: Rencana ini menggunakan strategi penskalaan per fungsi deterministik, di mana setiap fungsi diskalakan secara independen, kecuali untuk fungsi yang dipicu HTTP, Blob, dan Durable Functions yang menskalakan dalam grup mereka sendiri. Untuk informasi selengkapnya, lihat Penskalaan per fungsi. Instans ini kemudian diskalakan berdasarkan konkurensi permintaan Anda.
Paket premium: Ukuran spesifik paket Premium menentukan memori dan CPU yang tersedia untuk semua aplikasi dalam paket tersebut pada instans tersebut. Paket ini menskalakan instansnya berdasarkan kebutuhan penskalaan aplikasi dalam paket, dan aplikasi menskalakan dalam paket sesuai kebutuhan.
File kode fungsi disimpan di berbagi Azure Files di akun penyimpanan utama fungsi. Saat Anda menghapus akun penyimpanan utama aplikasi fungsi, file kode fungsi dihapus dan tidak dapat dipulihkan.
Penskalaan runtime
Azure Functions menggunakan komponen yang disebut pengontrol skala untuk memantau laju peristiwa dan menentukan apakah akan memperbesar atau memperkecil. Pengontrol skala menggunakan heuristik untuk setiap jenis pemicu. Misalnya, saat Anda menggunakan pemicu penyimpanan Azure Queue, pemicu tersebut menggunakan penskalaan berbasis target.
Satuan skala untuk Azure Functions adalah aplikasi fungsi. Saat aplikasi fungsi diskalakan, lebih banyak sumber daya dialokasikan untuk menjalankan beberapa instans host Azure Functions. Sebaliknya, karena permintaan komputasi berkurang, pengontrol skala menghapus instans host fungsi. Jumlah instans akhirnya "diskalakan" ketika tidak ada fungsi yang berjalan dalam aplikasi fungsi.
Cold Start
Jika aplikasi fungsi Anda diam selama beberapa menit, platform mungkin memutuskan untuk menskalakan jumlah instans tempat aplikasi Anda turun menjadi nol. Permintaan berikutnya memiliki latensi penskalaan tambahan dari nol ke satu. Latensi ini disebut sebagai cold start. Jumlah dependensi yang diperlukan oleh aplikasi fungsi Anda dapat memengaruhi waktu mulai dingin. Cold start merupakan masalah untuk operasi sinkron, seperti pemicu HTTP yang harus mengembalikan respons. Jika cold start memengaruhi fungsi Anda, pertimbangkan untuk menggunakan paket selain Konsumsi. Rencana lain menawarkan strategi ini untuk mengurangi atau menghilangkan awal dingin:
Paket premium: mendukung instans yang sudah ada sebelumnya dan instans yang selalu siap, dengan minimal satu instans.
Paket Konsumsi Flex: mendukung jumlah opsional instans yang selalu siap, yang dapat didefinisikan berdasarkan penskalaan per instans.
Paket khusus: paket itu sendiri tidak menskalakan secara dinamis, tetapi Anda dapat menjalankan aplikasi Anda terus-menerus dengan pengaturan Always on diaktifkan.
Memahami perilaku penskalaan
Penskalakan dapat bervariasi berdasarkan beberapa faktor, dan aplikasi menskalakan secara berbeda berdasarkan pemicu dan bahasa yang dipilih. Ada beberapa seluk-beluk perilaku penskalaan yang harus diperhatikan:
- Instans maksimum: Satu aplikasi fungsi hanya menskalakan hingga maksimum yang diizinkan oleh paket. Namun, satu instans dapat memproses lebih dari satu pesan atau permintaan pada satu waktu. Anda dapat menentukan maksimum yang lebih rendah ke skala pembatasan sesuai dengan yang diperlukan.
- Tingkat instans baru: Untuk pemicu HTTP, instans baru dialokasikan, paling banyak, sekali per detik. Untuk pemicu non-HTTP, instans baru dialokasikan paling banyak setiap 30 detik sekali. Penskalaan lebih cepat saat berjalan dalam paket Premium.
- Penskalaan berbasis target: Penskalaan berbasis target menyediakan model penskalaan yang cepat dan intuitif untuk pelanggan dan saat ini didukung untuk antrean dan topik Bus Layanan, antrean Penyimpanan, Azure Event Hubs, Apache Kafka, dan ekstensi Azure Cosmos DB. Pastikan untuk meninjau penskalakan berbasis target untuk memahami perilaku penskalakannya.
- Penskalaan per fungsi: Dengan beberapa pengecualian penting, fungsi yang berjalan dalam skala paket Konsumsi Flex pada instans independen. Pengecualian termasuk pemicu HTTP dan pemicu penyimpanan Blob (Event Grid). Masing-masing jenis pemicu ini menskalakan bersama-sama sebagai grup pada instans yang sama. Demikian juga, semua pemicu Durable Functions juga berbagi instans dan menskalakan bersama-sama. Untuk informasi selengkapnya, lihat penskalaan per fungsi.
- Pemicu maksimum yang dipantau: Saat ini, pengontrol skala hanya dapat memantau hingga 100 pemicu untuk membuat keputusan penskalakan. Saat aplikasi Anda memiliki lebih dari 100 pemicu berbasis peristiwa, keputusan skala dibuat hanya berdasarkan 100 pemicu pertama yang dijalankan. Untuk informasi selengkapnya, lihat Praktik dan pola terbaik untuk aplikasi yang dapat diskalakan.
Batasi peluasan skala
Anda dapat memutuskan untuk membatasi jumlah maksimum instans yang dapat digunakan aplikasi untuk peluasan skala. Ini paling umum untuk kasus di mana komponen hilir seperti database memiliki throughput terbatas. Untuk batas skala maksimum saat menjalankan berbagai paket hosting, lihat Batas skala.
Paket Konsumsi Flex
Secara default, aplikasi yang berjalan dalam paket Konsumsi Flex memiliki batas instans 100
keseluruhan. Saat ini nilai jumlah instans maksimum terendah adalah 40
, dan nilai jumlah instans maksimum tertinggi yang didukung adalah 1000
. Saat Anda menggunakan az functionapp create
perintah untuk membuat aplikasi fungsi dalam paket Konsumsi Flex, gunakan --maximum-instance-count
parameter untuk mengatur jumlah instans maksimum ini untuk aplikasi Anda.
Perhatikan bahwa meskipun Anda dapat mengubah jumlah instans maksimum aplikasi Konsumsi Flex hingga 1000, aplikasi Anda akan mencapai batas kuota sebelum mencapai angka tersebut. Tinjau Kuota memori langganan regional untuk detail selengkapnya.
Contoh ini membuat aplikasi dengan jumlah 200
instans maksimum :
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_ACCOUNT_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --maximum-instance-count 200
Contoh ini menggunakan perintah untuk mengubah jumlah instans az functionapp scale config set
maksimum untuk aplikasi yang ada menjadi 150
:
az functionapp scale config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --maximum-instance-count 150
Paket Konsumsi/Premium
Dalam paket Konsumsi atau Elastic Premium, Anda dapat menentukan batas maksimum yang lebih rendah untuk aplikasi Anda dengan memodifikasi nilai functionAppScaleLimit
pengaturan konfigurasi situs. functionAppScaleLimit
Dapat diatur ke 0
atau null
untuk tidak dibatasi, atau nilai yang valid antara dan 1
aplikasi maksimum.
az resource update --resource-type Microsoft.Web/sites -g <RESOURCE_GROUP> -n <FUNCTION_APP-NAME>/config/web --set properties.functionAppScaleLimit=<SCALE_LIMIT>
Perilaku penskalaan
Penskalaan berbasis peristiwa secara otomatis mengurangi kapasitas saat permintaan untuk fungsi Anda berkurang. Ini dilakukan dengan menguras instans eksekusi fungsi mereka saat ini dan kemudian menghapus instans tersebut. Perilaku ini dicatat sebagai mode pengosongan. Masa tenggang untuk fungsi yang saat ini dijalankan dapat diperpanjang hingga 10 menit untuk aplikasi paket Konsumsi dan hingga 60 menit untuk aplikasi paket Flex Consumption dan Premium. Penskalaan berbasis peristiwa dan perilaku ini tidak berlaku untuk aplikasi Paket khusus.
Pertimbangan berikut berlaku untuk perilaku penskalaan:
- Untuk aplikasi yang berjalan di Windows dalam paket Konsumsi, hanya aplikasi yang dibuat setelah Mei 2021 yang memiliki perilaku mode pengosongan yang diaktifkan secara default.
- Untuk mengaktifkan fitur matikan dengan baik untuk fungsi menggunakan pemicu Azure Service Bus, gunakan versi 4.2.0 atau versi Ekstensi Azure Service Bus yang lebih baru.
Penskalakan per fungsi
Hanya berlaku untuk paket Konsumsi Flex (pratinjau).
Paket Konsumsi Flex unik karena menerapkan perilaku penskalakan per fungsi. Dalam penskalaan per fungsi, kecuali untuk pemicu HTTP, pemicu Blob (Event Grid), dan Durable Functions, semua jenis pemicu fungsi lainnya dalam skala aplikasi Anda pada instans independen. Pemicu HTTP di aplikasi Anda semuanya diskalakan bersama sebagai grup pada instans yang sama, seperti halnya semua Blob (Event Grid), dan semua pemicu Durable Functions, yang memiliki instans bersama mereka sendiri.
Pertimbangkan aplikasi fungsi yang menghosting paket Konsumsi Flex yang memiliki fungsi ini:
function1 | function2 | function3 | function4 | function5 | function6 | function7 |
---|---|---|---|---|---|---|
Pemicu HTTP | Pemicu HTTP | Pemicu orkestrasi (Tahan lama) | Pemicu aktivitas (Tahan Lama) | Pemicu Azure Service Bus | Pemicu Azure Service Bus | Pemicu Azure Event Hubs |
Dalam contoh ini:
- Dua fungsi yang dipicu HTTP (
function1
danfunction2
) keduanya berjalan bersama pada instans mereka sendiri dan menskalakan bersama-sama sesuai dengan pengaturan konkurensi HTTP. - Dua fungsi Durable (
function3
danfunction4
) keduanya berjalan bersama pada instans mereka sendiri dan menskalakan bersama-sama berdasarkan pembatasan konkurensi yang dikonfigurasi. - Fungsi
function5
yang dipicu Bus layanan berjalan sendiri dan diskalakan secara independen sesuai dengan aturan penskalaan berbasis target untuk antrean dan topik Bus Layanan. - Fungsi
function6
yang dipicu Bus layanan berjalan sendiri dan diskalakan secara independen sesuai dengan aturan penskalaan berbasis target untuk antrean dan topik Bus Layanan. - Pemicu Azure Event Hubs (
function7
) berjalan dalam instansnya sendiri dan diskalakan secara independen sesuai dengan aturan penskalaan berbasis target untuk Azure Event Hubs.
Praktik dan pola terbaik untuk aplikasi yang dapat diskalakan
Ada banyak aspek dari aplikasi fungsi yang memengaruhi aplikasi menskalakan, termasuk konfigurasi host, jejak waktu proses, dan efisiensi sumber daya. Untuk informasi selengkapnya, lihat bagian skalabilitas dari artikel pertimbangan performa. Anda juga harus menyadari bagaimana koneksi berperilaku sebagai skala aplikasi fungsi Anda. Untuk informasi selengkapnya, lihat Cara mengelola koneksi di Azure Functions.
Jika aplikasi Anda memiliki lebih dari 100 fungsi yang menggunakan pemicu berbasis peristiwa, pertimbangkan untuk memecah aplikasi menjadi satu atau beberapa aplikasi, di mana setiap aplikasi memiliki kurang dari 100 fungsi berbasis peristiwa.
Untuk informasi selengkapnya tentang penskalaan di Python dan Node.js, lihat panduan pengembang Azure Functions Python - Penskalaan dan konkurensi dan panduan pengembang Azure Functions Node.js - Penskalaan dan konkurensi.
Langkah berikutnya
Untuk mempelajari selengkapnya, lihat artikel berikut ini: