Mengkonfigurasi konkurensi yang disediakan untuk suatu fungsi - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengkonfigurasi konkurensi yang disediakan untuk suatu fungsi

Di Lambda, konkurensi adalah jumlah permintaan dalam penerbangan yang saat ini ditangani oleh fungsi Anda. Ada dua tipe kontrol konkurensi yang tersedia:

  • Konkurensi cadangan - Ini mewakili jumlah maksimum instans bersamaan yang dialokasikan ke fungsi Anda. Ketika fungsi sudah memiliki konkurensi terpesan, tidak ada fungsi lain yang dapat menggunakan konkurensi tersebut. Konkurensi cadangan berguna untuk memastikan bahwa fungsi Anda yang paling penting selalu memiliki konkurensi yang cukup untuk menangani permintaan yang masuk. Mengkonfigurasi konkurensi cadangan untuk suatu fungsi tidak menimbulkan biaya tambahan.

  • Konkurensi yang disediakan — Ini adalah jumlah lingkungan eksekusi pra-inisialisasi yang dialokasikan untuk fungsi Anda. Lingkungan eksekusi ini siap merespons segera permintaan fungsi yang masuk. Konkurensi yang disediakan berguna untuk mengurangi latensi start dingin untuk fungsi. Mengkonfigurasi konkurensi yang disediakan menimbulkan biaya tambahan untuk Anda. Akun AWS

Topik ini merinci cara mengelola dan mengonfigurasi konkurensi yang disediakan. Untuk gambaran konseptual dari dua jenis kontrol konkurensi ini, lihat Konkurensi cadangan dan konkurensi yang disediakan. Untuk informasi selengkapnya tentang mengonfigurasi konkurensi cadangan, lihat. Mengkonfigurasi konkurensi cadangan untuk suatu fungsi

catatan

Fungsi Lambda yang ditautkan ke pemetaan sumber peristiwa Amazon MQ memiliki konkurensi maksimum default. Untuk Apache Active MQ, jumlah maksimum instans bersamaan adalah 5. Untuk Rabbit MQ, jumlah maksimum instans bersamaan adalah 1. Menyetel konkurensi cadangan atau yang disediakan untuk fungsi Anda tidak mengubah batasan ini. Untuk meminta peningkatan konkurensi maksimum default saat menggunakan Amazon MQ, hubungi. AWS Support

Mengonfigurasi konkurensi yang tersedia

Anda dapat mengonfigurasi pengaturan konkurensi yang disediakan untuk suatu fungsi menggunakan konsol Lambda atau Lambda. API

Untuk mengalokasikan konkurensi yang disediakan untuk fungsi (konsol)
  1. Buka halaman Fungsi di konsol Lambda.

  2. Pilih fungsi yang ingin Anda alokasikan konkurensi yang disediakan.

  3. Pilih Konfigurasi, lalu pilih Konkurensi.

  4. Dalam Konfigurasi konkurensi terprovisi, pilih Tambah konfigurasi.

  5. Pilih jenis qualifier, dan alias atau versi.

    catatan

    Anda tidak dapat menggunakan konkurensi yang disediakan dengan LATEST versi $ dari fungsi apa pun.

    Jika fungsi Anda memiliki sumber peristiwa, pastikan bahwa sumber peristiwa menunjuk ke alias atau versi fungsi yang benar. Jika tidak, fungsi Anda tidak akan menggunakan lingkungan konkurensi yang disediakan.

  6. Masukkan nomor di bawah Konkurensi yang disediakan. Lambda memberikan perkiraan biaya bulanan.

  7. Pilih Simpan.

Anda dapat mengonfigurasi hingga konkurensi akun Unreserved di akun Anda, minus 100. 100 unit konkurensi yang tersisa adalah untuk fungsi yang tidak menggunakan konkurensi cadangan. Misalnya, jika akun Anda memiliki batas konkurensi 1.000, dan Anda belum menetapkan konkurensi cadangan atau ketentuan apa pun ke fungsi lainnya, Anda dapat mengonfigurasi maksimum 900 unit konkurensi yang disediakan untuk satu fungsi.

Terjadi kesalahan jika Anda mencoba mengalokasikan terlalu banyak konkurensi yang disediakan.

Mengkonfigurasi konkurensi yang disediakan untuk suatu fungsi berdampak pada kumpulan konkurensi yang tersedia untuk fungsi lain. Misalnya, jika Anda mengonfigurasi 100 unit konkurensi yang disediakan untukfunction-a, fungsi lain di akun Anda harus berbagi 900 unit konkurensi yang tersisa. Ini benar bahkan jika function-a tidak menggunakan semua 100 unit.

Dimungkinkan untuk mengalokasikan konkurensi cadangan dan konkurensi yang disediakan untuk fungsi yang sama. Dalam kasus seperti itu, konkurensi yang disediakan tidak dapat melebihi konkurensi yang dicadangkan.

Batasan ini meluas ke versi fungsi. Konkurensi maksimum yang disediakan yang dapat Anda tetapkan ke versi fungsi tertentu adalah konkurensi cadangan fungsi dikurangi konkurensi yang disediakan pada versi fungsi lainnya.

Untuk mengonfigurasi konkurensi yang disediakan dengan LambdaAPI, gunakan operasi berikut. API

Misalnya, untuk mengonfigurasi konkurensi yang disediakan dengan AWS Command Line Interface (CLI), gunakan perintah. put-provisioned-concurrency-config Perintah berikut mengalokasikan 100 unit konkurensi yang disediakan untuk BLUE alias fungsi bernama: my-function

aws lambda put-provisioned-concurrency-config --function-name my-function \ --qualifier BLUE \ --provisioned-concurrent-executions 100

Anda akan melihat output yang terlihat seperti berikut:

{ "Requested ProvisionedConcurrentExecutions": 100, "Allocated ProvisionedConcurrentExecutions": 0, "Status": "IN_PROGRESS", "LastModified": "2023-01-21T11:30:00+0000" }

Memperkirakan konkurensi yang disediakan secara akurat untuk suatu fungsi

Anda dapat melihat metrik konkurensi fungsi aktif apa pun menggunakan CloudWatch metrik. Secara khusus, ConcurrentExecutions metrik menunjukkan jumlah pemanggilan bersamaan untuk fungsi di akun Anda.

Grafik yang menunjukkan konkurensi untuk suatu fungsi dari waktu ke waktu.

Grafik sebelumnya menunjukkan bahwa fungsi ini melayani rata-rata 5 hingga 10 permintaan bersamaan pada waktu tertentu, dan memuncak pada 20 permintaan. Misalkan ada banyak fungsi lain di akun Anda. Jika fungsi ini sangat penting untuk aplikasi Anda dan Anda memerlukan respons latensi rendah pada setiap pemanggilan, konfigurasikan setidaknya 20 unit konkurensi yang disediakan.

Ingatlah bahwa Anda juga dapat menghitung konkurensi menggunakan rumus berikut:

Concurrency = (average requests per second) * (average request duration in seconds)

Untuk memperkirakan berapa banyak konkurensi yang Anda butuhkan, kalikan permintaan rata-rata per detik dengan durasi permintaan rata-rata dalam hitungan detik. Anda dapat memperkirakan permintaan rata-rata per detik menggunakan Invocation metrik, dan durasi permintaan rata-rata dalam detik menggunakan Duration metrik.

Saat mengonfigurasi konkurensi yang disediakan, Lambda menyarankan untuk menambahkan buffer 10% di atas jumlah konkurensi yang biasanya dibutuhkan fungsi Anda. Misalnya, jika fungsi Anda biasanya memuncak pada 200 permintaan bersamaan, setel konkurensi yang disediakan ke 220 (200 permintaan bersamaan + 10% = 220 konkurensi yang disediakan).

Mengoptimalkan kode fungsi saat menggunakan konkurensi yang disediakan

Jika Anda menggunakan konkurensi yang disediakan, pertimbangkan untuk merestrukturisasi kode fungsi Anda untuk mengoptimalkan latensi rendah. Untuk fungsi yang menggunakan konkurensi yang disediakan, Lambda menjalankan kode inisialisasi apa pun, seperti memuat pustaka dan membuat instance klien, selama waktu alokasi. Oleh karena itu, disarankan untuk memindahkan sebanyak mungkin inisialisasi di luar penangan fungsi utama untuk menghindari dampak latensi selama pemanggilan fungsi aktual. Sebaliknya, menginisialisasi pustaka atau membuat instance klien dalam kode pengendali utama Anda berarti fungsi Anda harus menjalankan ini setiap kali dipanggil (ini terjadi terlepas dari apakah Anda menggunakan konkurensi yang disediakan).

Untuk pemanggilan sesuai permintaan, Lambda mungkin perlu menjalankan ulang kode inisialisasi Anda setiap kali fungsi Anda mengalami awal yang dingin. Untuk fungsi tersebut, Anda dapat memilih untuk menunda inisialisasi kemampuan tertentu sampai fungsi Anda membutuhkannya. Misalnya, pertimbangkan alur kontrol berikut untuk handler Lambda:

def handler(event, context): ... if ( some_condition ): // Initialize CLIENT_A to perform a task else: // Do nothing

Pada contoh sebelumnya, alih-alih menginisialisasi CLIENT_A di luar handler utama, pengembang menginisialisasinya dalam pernyataan. if Dengan melakukan ini, Lambda menjalankan kode ini hanya jika some_condition terpenuhi. Jika Anda menginisialisasi CLIENT_A di luar penangan utama, Lambda menjalankan kode itu di setiap awal yang dingin. Ini dapat meningkatkan latensi keseluruhan.

Menggunakan variabel lingkungan untuk melihat dan mengontrol perilaku konkurensi yang disediakan

Dimungkinkan bagi fungsi Anda untuk menggunakan semua konkurensi yang disediakan. Lambda menggunakan instans sesuai permintaan untuk menangani kelebihan lalu lintas. Untuk menentukan jenis inisialisasi Lambda yang digunakan untuk lingkungan tertentu, periksa nilai variabel lingkungan. AWS_LAMBDA_INITIALIZATION_TYPE Variabel ini memiliki dua nilai yang mungkin: provisioned-concurrency atauon-demand. Nilai AWS_LAMBDA_INITIALIZATION_TYPE tidak dapat diubah dan tetap konstan sepanjang masa hidup lingkungan. Untuk memeriksa nilai variabel lingkungan dalam kode fungsi Anda, lihatMengambil variabel lingkungan Lambda.

Jika Anda menggunakan. NET6 atau. NET7 runtime, Anda dapat mengonfigurasi variabel AWS_LAMBDA_DOTNET_PREJIT lingkungan untuk meningkatkan latensi fungsi, bahkan jika mereka tidak menggunakan konkurensi yang disediakan. Itu. NETruntime menggunakan kompilasi dan inisialisasi malas untuk setiap pustaka yang dipanggil kode Anda untuk pertama kalinya. Akibatnya, pemanggilan pertama fungsi Lambda mungkin memakan waktu lebih lama dari yang berikutnya. Untuk mengurangi ini, Anda dapat memilih salah satu dari tiga nilai untuk: AWS_LAMBDA_DOTNET_PREJIT

  • ProvisionedConcurrency: Lambda melakukan ahead-of-time JIT kompilasi untuk semua lingkungan menggunakan konkurensi yang disediakan. Ini adalah nilai default.

  • Always: Lambda melakukan ahead-of-time JIT kompilasi untuk setiap lingkungan, meskipun fungsinya tidak menggunakan konkurensi yang disediakan.

  • Never: Lambda menonaktifkan ahead-of-time JIT kompilasi untuk semua lingkungan.

Memahami perilaku pencatatan dan penagihan dengan konkurensi yang disediakan

Untuk lingkungan konkurensi yang disediakan, kode inisialisasi fungsi Anda berjalan selama alokasi, dan secara berkala saat Lambda mendaur ulang instance lingkungan Anda. Anda dapat melihat waktu inisialisasi di log dan jejak setelah instance lingkungan memproses permintaan. Penting untuk dicatat bahwa Lambda menagih Anda untuk inisialisasi meskipun instance lingkungan tidak pernah memproses permintaan. Konkurensi yang disediakan berjalan terus menerus dan menimbulkan penagihan terpisah dari biaya inisialisasi dan pemanggilan. Untuk detail selengkapnya, lihat AWS Lambda Harga.

Selain itu, saat Anda mengonfigurasi fungsi Lambda dengan konkurensi yang disediakan, Lambda melakukan pra-inisialisasi lingkungan eksekusi tersebut sehingga tersedia sebelum permintaan pemanggilan fungsi. Namun, fungsi Anda menerbitkan log pemanggilan CloudWatch hanya ketika fungsi tersebut benar-benar dipanggil. Oleh karena itu, bidang Init Duration muncul di baris REPORT log dari pemanggilan fungsi pertama, meskipun inisialisasi terjadi sebelumnya. Ini tidak berarti fungsi mengalami awal yang dingin.

Menggunakan Application Auto Scaling untuk mengotomatiskan manajemen konkurensi yang disediakan

Anda dapat menggunakan Application Auto Scaling untuk mengelola konkurensi yang disediakan sesuai jadwal atau berdasarkan pemanfaatan. Jika fungsi Anda menerima pola lalu lintas yang dapat diprediksi, gunakan penskalaan terjadwal. Jika Anda ingin fungsi Anda mempertahankan persentase pemanfaatan tertentu, gunakan kebijakan penskalaan pelacakan target.

Penskalaan terjadwal

Dengan Application Auto Scaling, Anda dapat mengatur jadwal penskalaan Anda sendiri sesuai dengan perubahan beban yang dapat diprediksi. Untuk informasi dan contoh selengkapnya, lihat Penskalaan terjadwal untuk Application Auto Scaling di Panduan Pengguna Application Auto Scaling, AWS Lambda dan Scheduling Provisioned Concurrency untuk penggunaan puncak berulang di Blog Komputasi. AWS

Pelacakan target

Dengan pelacakan target, Application Auto Scaling membuat dan mengelola serangkaian CloudWatch alarm berdasarkan cara Anda menentukan kebijakan penskalaan Anda. Ketika alarm ini diaktifkan, Application Auto Scaling secara otomatis menyesuaikan jumlah lingkungan yang dialokasikan menggunakan konkurensi yang disediakan. Gunakan pelacakan target untuk aplikasi yang tidak memiliki pola lalu lintas yang dapat diprediksi.

Untuk menskalakan konkurensi yang disediakan menggunakan pelacakan target, gunakan operasi Application Auto PutScalingPolicy Scaling RegisterScalableTarget dan Application. API Misalnya, jika Anda menggunakan AWS Command Line Interface (CLI), ikuti langkah-langkah berikut:

  1. Daftarkan alias fungsi sebagai target penskalaan. Contoh berikut mendaftarkan BLUE alias fungsi bernama: my-function

    aws application-autoscaling register-scalable-target --service-namespace lambda \ --resource-id function:my-function:BLUE --min-capacity 1 --max-capacity 100 \ --scalable-dimension lambda:function:ProvisionedConcurrency
  2. Terapkan kebijakan penskalaan ke target. Contoh berikut mengonfigurasi Application Auto Scaling untuk menyesuaikan konfigurasi konkurensi yang disediakan untuk alias agar pemanfaatan tetap mendekati 70 persen, tetapi Anda dapat menerapkan nilai apa pun antara 10% dan 90%.

    aws application-autoscaling put-scaling-policy \ --service-namespace lambda \ --scalable-dimension lambda:function:ProvisionedConcurrency \ --resource-id function:my-function:BLUE \ --policy-name my-policy \ --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration '{ "TargetValue": 0.7, "PredefinedMetricSpecification": { "PredefinedMetricType": "LambdaProvisionedConcurrencyUtilization" }}'

Anda akan melihat output seperti ini:

{ "PolicyARN": "arn:aws:autoscaling:us-east-2:123456789012:scalingPolicy:12266dbb-1524-xmpl-a64e-9a0a34b996fa:resource/lambda/function:my-function:BLUE:policyName/my-policy", "Alarms": [ { "AlarmName": "TargetTracking-function:my-function:BLUE-AlarmHigh-aed0e274-xmpl-40fe-8cba-2e78f000c0a7", "AlarmARN": "arn:aws:cloudwatch:us-east-2:123456789012:alarm:TargetTracking-function:my-function:BLUE-AlarmHigh-aed0e274-xmpl-40fe-8cba-2e78f000c0a7" }, { "AlarmName": "TargetTracking-function:my-function:BLUE-AlarmLow-7e1a928e-xmpl-4d2b-8c01-782321bc6f66", "AlarmARN": "arn:aws:cloudwatch:us-east-2:123456789012:alarm:TargetTracking-function:my-function:BLUE-AlarmLow-7e1a928e-xmpl-4d2b-8c01-782321bc6f66" } ] }

Application Auto Scaling membuat dua alarm masuk. CloudWatch Alarm pertama terpicu ketika pemanfaatan konkurensi yang disediakan secara konsisten melebihi 70%. Jika hal ini terjadi, Application Auto Scaling mengalokasikan lebih banyak konkurensi terprovisi untuk mengurangi penggunaan. Alarm kedua terpicu ketika pemanfaatan secara konsisten kurang dari 63% (90 persen dari target 70%). Jika hal ini terjadi, Application Auto Scaling mengurangi konkurensi terprovisi alias.

Dalam contoh berikut, fungsi menskalakan antara jumlah konkurensi terprovisi minimum dan maksimum berdasarkan penggunaan.

Penskalaan otomatis konkurensi terprovisi dengan pelacakan target Application Auto Scaling.
Legenda
  • Orange line = function instances Instans fungsi

  • Gray line = function instances Permintaan terbuka

  • Diagonal orange stripes = provisioned concurrency. Konkurensi terprovisi

  • Vertical orange stripes = standard concurrency. Konkurensi standar

Ketika jumlah permintaan terbuka meningkat, Application Auto Scaling meningkatkan konkurensi yang disediakan dalam langkah-langkah besar hingga mencapai maksimum yang dikonfigurasi. Setelah ini, fungsi dapat terus menskalakan pada konkurensi standar tanpa syarat jika Anda belum mencapai batas konkurensi akun Anda. Saat pemanfaatan turun dan tetap rendah, Application Auto Scaling mengurangi konkurensi yang disediakan dalam langkah-langkah periodik yang lebih kecil.

Kedua alarm Application Auto Scaling menggunakan statistik rata-rata secara default. Fungsi yang mengalami semburan lalu lintas cepat mungkin tidak memicu alarm ini. Misalnya, misalkan fungsi Lambda Anda dijalankan dengan cepat (yaitu 20-100 ms) dan lalu lintas Anda datang dalam ledakan cepat. Dalam hal ini, jumlah permintaan melebihi konkurensi yang disediakan yang dialokasikan selama burst. Namun, Application Auto Scaling membutuhkan beban burst untuk bertahan setidaknya selama 3 menit untuk menyediakan lingkungan tambahan. Selain itu, kedua CloudWatch alarm memerlukan 3 titik data yang mencapai rata-rata target untuk mengaktifkan kebijakan penskalaan otomatis. Jika fungsi Anda mengalami ledakan lalu lintas yang cepat, menggunakan statistik Maksimum alih-alih statistik Rata-rata dapat lebih efektif dalam menskalakan konkurensi yang disediakan untuk meminimalkan start dingin.

Untuk informasi selengkapnya tentang kebijakan penskalaan pelacakan target, lihat Kebijakan penskalaan pelacakan target untuk Application Auto Scaling.