View a markdown version of this page

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 sedang ditangani oleh fungsi Anda. Ada dua tipe kontrol konkurensi yang tersedia:

  • Konkurensi cadangan — Ini menetapkan jumlah maksimum dan minimum instans bersamaan yang dialokasikan untuk fungsi Anda. Ketika fungsi sudah memiliki konkurensi terpesan, tidak ada fungsi lain yang dapat menggunakan konkurensi tersebut. Konkurensi cadangan berguna untuk memastikan bahwa fungsi paling penting Anda selalu memiliki konkurensi yang cukup untuk menangani permintaan masuk. Selain itu, konkurensi cadangan dapat digunakan untuk membatasi konkurensi untuk mencegah sumber daya hilir yang berlebihan, seperti koneksi database. Konkurensi cadangan bertindak sebagai batas bawah dan atas - ini mencadangkan kapasitas yang ditentukan secara eksklusif untuk fungsi Anda sementara juga mencegahnya menskalakan melampaui batas itu. Mengkonfigurasi konkurensi yang dicadangkan untuk suatu fungsi tidak dikenakan biaya tambahan.

  • Konkurensi yang disediakan — Ini adalah jumlah lingkungan eksekusi pra-inisialisasi yang dialokasikan untuk fungsi Anda. Lingkungan eksekusi ini siap untuk segera merespons permintaan fungsi yang masuk. Konkurensi yang disediakan berguna untuk mengurangi latensi start dingin untuk fungsi dan dirancang untuk membuat fungsi tersedia dengan waktu respons milidetik dua digit. Umumnya, beban kerja interaktif mendapat manfaat paling besar dari fitur ini. Itu adalah aplikasi dengan pengguna yang memulai permintaan, seperti aplikasi web dan seluler, dan yang paling sensitif terhadap latensi. Beban kerja asinkron, seperti pipeline pemrosesan data, seringkali kurang sensitif terhadap latensi sehingga biasanya tidak memerlukan konkurensi yang disediakan. Mengkonfigurasi konkurensi yang disediakan akan dikenakan biaya tambahan kepada Anda. Akun AWS

Topik ini merinci cara mengelola dan mengonfigurasi konkurensi yang disediakan. Untuk ikhtisar konseptual dari kedua jenis kontrol konkurensi ini, lihat Konkurensi cadangan dan konkurensi yang disediakan. Untuk informasi selengkapnya tentang mengonfigurasi konkurensi yang dicadangkan, lihatMengkonfigurasi konkurensi yang dicadangkan untuk suatu fungsi.

catatan

Fungsi lambda yang ditautkan ke pemetaan sumber peristiwa Amazon MQ memiliki konkurensi maksimum default. Untuk Apache Active MQ, jumlah maksimum instance bersamaan adalah 5. Untuk Rabbit MQ, jumlah maksimum instance bersamaan adalah 1. Menyetel konkurensi yang dicadangkan atau disediakan untuk fungsi Anda tidak mengubah batas ini. Untuk meminta peningkatan konkurensi maksimum default saat menggunakan Amazon MQ, hubungi. Dukungan

Mengonfigurasi konkurensi yang tersedia

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

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 kualifikasi, dan alias atau versi.

    catatan

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

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

  6. Masukkan nomor di bawah Konkur ensi yang disediakan.

  7. Pilih Simpan.

Anda dapat mengonfigurasi hingga konkurensi akun Unreservasi di akun Anda, minus 100. Sisa 100 unit konkurensi adalah untuk fungsi yang tidak menggunakan konkurensi yang dicadangkan. Misalnya, jika akun Anda memiliki batas konkurensi 1.000, dan Anda belum menetapkan konkurensi yang dicadangkan atau disediakan untuk 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 yang dicadangkan 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 API Lambda, gunakan operasi API berikut.

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 secara akurat konkurensi yang disediakan yang diperlukan untuk suatu fungsi

Anda dapat melihat metrik konkurensi fungsi aktif apa pun menggunakan met CloudWatch rik. 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 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, tetapkan konkurensi yang disediakan menjadi 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 pengendali fungsi utama untuk menghindari dampak latensi selama pemanggilan fungsi yang sebenarnya. Sebaliknya, menginisialisasi pustaka atau membuat instance klien dalam kode handler 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 cold start. 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

Dalam 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 handler utama, Lambda menjalankan kode itu pada setiap start dingin. Hal ini dapat meningkatkan latensi keseluruhan.

Anda dapat mengukur cold start saat Lambda meningkat dengan menambahkan X-Ray pemantauan ke fungsi Anda. Fungsi yang menggunakan konkurensi yang disediakan tidak menunjukkan perilaku cold start karena lingkungan eksekusi disiapkan sebelum pemanggilan. Namun, konkurensi yang disediakan harus diterapkan ke versi atau alias tertentu dari suatu fungsi, bukan versi $LATEST. Jika Anda terus melihat perilaku cold start, pastikan Anda memanggil versi alias dengan konkurensi yang disediakan dikonfigurasi.

Menggunakan variabel lingkungan untuk melihat dan mengontrol perilaku konkurensi yang disediakan

Dimungkinkan bagi fungsi Anda untuk menggunakan semua konkurensi yang disediakan. Lambda menggunakan instance on-demand untuk menangani lalu lintas berlebih. Untuk menentukan jenis inisialisasi Lambda yang digunakan untuk lingkungan tertentu, periksa nilai variabel AWS_LAMBDA_INITIALIZATION_TYPE lingkungan.

Variabel ini memiliki dua nilai yang mungkin: provisioned-concurrency atauon-demand. Nilai tidak dapat AWS_LAMBDA_INITIALIZATION_TYPE diubah dan tetap konstan sepanjang masa hidup lingkungan. Untuk memeriksa nilai variabel lingkungan dalam kode fungsi Anda, lihatMengambil variabel lingkungan Lambda.

Jika Anda menggunakan runtime .NET 8, Anda dapat mengonfigurasi variabel AWS_LAMBDA_DOTNET_PREJIT lingkungan untuk meningkatkan latensi fungsi, bahkan jika fungsi tersebut tidak menggunakan konkurensi yang disediakan. Runtime.NET menggunakan kompilasi dan inisialisasi yang lambat untuk setiap pustaka yang dipanggil kode Anda untuk pertama kalinya. Akibatnya, pemanggilan pertama dari fungsi Lambda mungkin memakan waktu lebih lama daripada yang berikutnya. Untuk mengurangi ini, Anda dapat memilih salah satu dari tiga nilai untukAWS_LAMBDA_DOTNET_PREJIT:

  • ProvisionedConcurrency: Lambda melakukan kompilasi JIT sebelumnya untuk semua lingkungan menggunakan konkurensi yang disediakan. Ini adalah nilai default.

  • Always: Lambda melakukan kompilasi JIT sebelumnya untuk setiap lingkungan, bahkan jika fungsinya tidak menggunakan konkurensi yang disediakan.

  • Never: Lambda menonaktifkan kompilasi JIT sebelumnya 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. 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.

Saat Anda mengonfigurasi fungsi Lambda dengan konkurensi yang disediakan, Lambda melakukan pra-inisialisasi lingkungan eksekusi sehingga tersedia sebelum permintaan pemanggilan. Lambda mencatat bidang Durasi Init dari fungsi dalam peristiwa log platform-initReport dalam format logging JSON setiap kali lingkungan diinisialisasi. Untuk melihat peristiwa log ini, konfigurasikan level log JSON Anda setidaknyaINFO. Anda juga dapat menggunakan API Telemetri untuk menggunakan peristiwa platform tempat bidang Durasi Init dilaporkan.

Menggunakan Application Auto Scaling untuk mengotomatiskan manajemen konkurensi yang disediakan

Anda dapat menggunakan Penskalaan Otomatis Aplikasi 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.

catatan

Jika Anda menggunakan Penskalaan Otomatis Aplikasi untuk mengelola konkurensi yang disediakan fungsi Anda, pastikan Anda mengonfigurasi nilai konkurensi awal yang disediakan terlebih dahulu. Jika fungsi Anda tidak memiliki nilai konkurensi awal yang disediakan, Penskalaan Otomatis Aplikasi mungkin tidak menangani penskalaan fungsi dengan benar.

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 Ter jadwal untuk Penskalaan Otomatis Aplikasi di Panduan Pengguna Penskalaan Otomatis Aplikasi, dan Pen jadwal AWS Lambda an Konkurensi yang Disediakan untuk penggunaan puncak berulang di Blog AWS Komputasi.

Pelacakan Target

Dengan pelacakan target, Penskalaan Otomatis Aplikasi membuat dan mengelola serangkaian CloudWatch alarm berdasarkan cara Anda menentukan kebijakan penskalaan. Ketika alarm ini diaktifkan, Penskalaan Otomatis Aplikasi 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 RegisterScalableTarget dan Appl PutScalingPolicy ication Auto Scaling API. Misalnya, jika Anda menggunakan AWS Command Line Interface (CLI), ikuti langkah-langkah berikut:

  1. Daftarkan alias fungsi sebagai target penskalaan. Contoh berikut mendaftarkan alias BLUE dari fungsi bernamamy-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 Penskalaan Otomatis Aplikasi 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" } ] }

Aplikasi Auto Scaling membuat dua alarm di CloudWatch. Alarm pertama dipicu 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 memicu ketika pemanfaatan secara konsisten kurang dari 63% (90 persen dari target 70%). Jika hal ini terjadi, Application Auto Scaling mengurangi konkurensi terprovisi alias.

catatan

Lambda memancarkan ProvisionedConcurrencyUtilization metrik hanya ketika fungsi Anda aktif dan menerima permintaan. Selama periode tidak aktif, tidak ada metrik yang dipancarkan, dan alarm penskalaan otomatis Anda memasuki INSUFFICIENT_DATA status. Akibatnya, Penskalaan Otomatis Aplikasi tidak akan dapat menyesuaikan konkurensi yang disediakan fungsi Anda. Hal ini dapat menyebabkan penagihan yang tidak terduga.

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 = open requests. Permintaan terbuka

  • Diagonal orange stripes = provisioned concurrency. Konkurensi terprovisi

  • Vertical orange stripes = standard concurrency. Konkurensi standar

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

Kedua alarm Penskalaan Otomatis Aplikasi menggunakan statistik rata-rata secara default. Fungsi yang mengalami ledakan 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 Rat a-rata dapat lebih efektif dalam menskalakan konkurensi yang disediakan untuk meminimalkan cold start.

Untuk informasi selengkapnya tentang kebijakan penskalaan pelacakan target, lihat Kebijakan penskalaan pelacakan target untuk Penskalaan Otomatis Aplikasi.