Bagikan melalui


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.

Penting

Paket Konsumsi Flex saat ini dalam pratinjau.

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.

Peristiwa pemantauan pengontrol skala dan membuat instans

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.

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 200instans 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 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:

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.

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: