Memahami penskalaan fungsi Lambda - AWS Lambda

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

Memahami penskalaan fungsi Lambda

Konkurensi adalah jumlah permintaan dalam penerbangan yang ditangani oleh AWS Lambda fungsi Anda secara bersamaan. Untuk setiap permintaan bersamaan, Lambda menyediakan instance terpisah dari lingkungan eksekusi Anda. Saat fungsi Anda menerima lebih banyak permintaan, Lambda secara otomatis menangani penskalaan jumlah lingkungan eksekusi hingga Anda mencapai batas konkurensi akun Anda. Secara default, Lambda menyediakan akun Anda dengan batas konkurensi total 1.000 eksekusi bersamaan di semua fungsi dalam file. Wilayah AWS Untuk mendukung kebutuhan akun spesifik Anda, Anda dapat meminta peningkatan kuota dan mengonfigurasi kontrol konkurensi tingkat fungsi sehingga fungsi penting Anda tidak mengalami pelambatan.

Topik ini menjelaskan konsep konkurensi dan penskalaan fungsi di Lambda. Pada akhir topik ini, Anda akan dapat memahami cara menghitung konkurensi, memvisualisasikan dua opsi kontrol konkurensi utama (dicadangkan dan disediakan), memperkirakan pengaturan kontrol konkurensi yang sesuai, dan melihat metrik untuk pengoptimalan lebih lanjut.

Memahami dan memvisualisasikan konkurensi

Lambda memanggil fungsi Anda di lingkungan eksekusi yang aman dan terisolasi. Untuk menangani permintaan, Lambda harus terlebih dahulu menginisialisasi lingkungan eksekusi (fase Init), sebelum menggunakannya untuk memanggil fungsi Anda (fase Invoke):

Siklus hidup khas lingkungan eksekusi, menunjukkan fase Init dan Invoke.
catatan

Durasi Init dan Invoke yang sebenarnya dapat bervariasi tergantung pada banyak faktor, seperti runtime yang Anda pilih dan kode fungsi Lambda. Diagram sebelumnya tidak dimaksudkan untuk mewakili proporsi yang tepat dari durasi fase Init dan Invoke.

Diagram sebelumnya menggunakan persegi panjang untuk mewakili lingkungan eksekusi tunggal. Ketika fungsi Anda menerima permintaan pertamanya (diwakili oleh lingkaran kuning dengan label1), Lambda membuat lingkungan eksekusi baru dan menjalankan kode di luar handler utama Anda selama fase Init. Kemudian, Lambda menjalankan kode handler utama fungsi Anda selama fase Invoke. Selama seluruh proses ini, lingkungan eksekusi ini sibuk dan tidak dapat memproses permintaan lainnya.

Ketika Lambda selesai memproses permintaan pertama, lingkungan eksekusi ini kemudian dapat memproses permintaan tambahan untuk fungsi yang sama. Untuk permintaan berikutnya, Lambda tidak perlu menginisialisasi ulang lingkungan.

Lingkungan eksekusi yang menangani dua permintaan berturut-turut.

Pada diagram sebelumnya, Lambda menggunakan kembali lingkungan eksekusi untuk menangani permintaan kedua (diwakili oleh lingkaran kuning dengan label). 2

Sejauh ini, kami hanya berfokus pada satu contoh lingkungan eksekusi Anda (yaitu, konkurensi 1). Dalam praktiknya, Lambda mungkin perlu menyediakan beberapa instance lingkungan eksekusi secara paralel untuk menangani semua permintaan yang masuk. Ketika fungsi Anda menerima permintaan baru, salah satu dari dua hal dapat terjadi:

  • Jika instance lingkungan eksekusi pra-inisialisasi tersedia, Lambda menggunakannya untuk memproses permintaan.

  • Jika tidak, Lambda membuat instance lingkungan eksekusi baru untuk memproses permintaan.

Misalnya, mari kita jelajahi apa yang terjadi ketika fungsi Anda menerima 10 permintaan:

Fungsi Lambda menangani 10 permintaan. Itu harus menyediakan beberapa lingkungan untuk menangani semua permintaan.

Dalam diagram sebelumnya, setiap bidang horizontal mewakili contoh lingkungan eksekusi tunggal (diberi label dari A melaluiF). Inilah cara Lambda menangani setiap permintaan:

Perilaku Lambda untuk permintaan 1 hingga 10
Permintaan Perilaku Lambda Penalaran

1

Ketentuan lingkungan baru A

Ini adalah permintaan pertama; tidak ada instance lingkungan eksekusi yang tersedia.

2

Ketentuan lingkungan baru B

Lingkungan eksekusi yang ada misalnya A sibuk.

3

Ketentuan lingkungan baru C

Instans lingkungan eksekusi yang ada A dan B keduanya sibuk.

4

Ketentuan lingkungan baru D

Instans lingkungan eksekusi yang ada A, B, dan C semuanya sibuk.

5

Ketentuan lingkungan baru E

Contoh lingkungan eksekusi yang ada A, B, C, dan D semuanya sibuk.

6

Menggunakan kembali lingkungan A

Lingkungan eksekusi instance A telah selesai memproses permintaan 1 dan sekarang tersedia.

7

Menggunakan kembali lingkungan B

Contoh lingkungan eksekusi B telah selesai memproses permintaan 2 dan sekarang tersedia.

8

Menggunakan kembali lingkungan C

Contoh lingkungan eksekusi C telah selesai memproses permintaan 3 dan sekarang tersedia.

9

Ketentuan lingkungan baru F

Contoh lingkungan eksekusi yang ada A, B, C, D, dan E semuanya sibuk.

10

Menggunakan kembali lingkungan D

Contoh lingkungan eksekusi D telah selesai memproses permintaan 4 dan sekarang tersedia.

Saat fungsi Anda menerima lebih banyak permintaan bersamaan, Lambda meningkatkan jumlah instance lingkungan eksekusi sebagai respons. Animasi berikut melacak jumlah permintaan bersamaan dari waktu ke waktu:

Animasi yang menggambarkan permintaan bersamaan dari waktu ke waktu.

Dengan membekukan animasi sebelumnya pada enam titik waktu yang berbeda, kita mendapatkan diagram berikut:

Fungsi konkurensi pada enam titik waktu yang berbeda.

Pada diagram sebelumnya, kita dapat menggambar garis vertikal kapan saja dan menghitung jumlah lingkungan yang memotong garis ini. Ini memberi kita jumlah permintaan bersamaan pada saat itu. Misalnya, pada waktut1, ada tiga lingkungan aktif yang melayani tiga permintaan bersamaan. Jumlah maksimum permintaan bersamaan dalam simulasi ini terjadi pada waktut4, ketika ada enam lingkungan aktif yang melayani enam permintaan bersamaan.

Untuk meringkas, konkurensi fungsi Anda adalah jumlah permintaan bersamaan yang ditangani secara bersamaan. Menanggapi peningkatan konkurensi fungsi Anda, Lambda menyediakan lebih banyak instance lingkungan eksekusi untuk memenuhi permintaan permintaan.

Menghitung konkurensi untuk suatu fungsi

Secara umum, konkurensi suatu sistem adalah kemampuan untuk memproses lebih dari satu tugas secara bersamaan. Di Lambda, konkurensi adalah jumlah permintaan dalam penerbangan yang ditangani fungsi Anda secara bersamaan. Cara cepat dan praktis untuk mengukur konkurensi fungsi Lambda adalah dengan menggunakan rumus berikut:

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

Konkurensi berbeda dari permintaan per detik. Misalnya, fungsi Anda menerima rata-rata 100 permintaan per detik. Jika durasi permintaan rata-rata adalah satu detik, maka memang benar bahwa konkurensi juga 100:

Concurrency = (100 requests/second) * (1 second/request) = 100

Namun, jika durasi permintaan rata-rata adalah 500 ms, maka konkurensi adalah 50:

Concurrency = (100 requests/second) * (0.5 second/request) = 50

Apa arti konkurensi 50 dalam praktik? Jika durasi permintaan rata-rata adalah 500 ms, maka Anda dapat menganggap instance fungsi Anda mampu menangani dua permintaan per detik. Kemudian, dibutuhkan 50 instance fungsi Anda untuk menangani beban 100 permintaan per detik. Konkurensi 50 berarti bahwa Lambda harus menyediakan 50 instance lingkungan eksekusi untuk menangani beban kerja ini secara efisien tanpa pembatasan apa pun. Berikut cara mengekspresikan ini dalam bentuk persamaan:

Concurrency = (100 requests/second) / (2 requests/second) = 50

Jika fungsi Anda menerima dua kali lipat jumlah permintaan (200 permintaan per detik), tetapi hanya membutuhkan separuh waktu untuk memproses setiap permintaan (250 ms), maka konkurensi masih 50:

Concurrency = (200 requests/second) * (0.25 second/request) = 50

Misalkan Anda memiliki fungsi yang membutuhkan, rata-rata, 200 ms untuk dijalankan. Selama beban puncak, Anda mengamati 5.000 permintaan per detik. Apa konkurensi fungsi Anda selama beban puncak?

Durasi fungsi rata-rata adalah 200 ms, atau 0,2 detik. Dengan menggunakan rumus konkurensi, Anda dapat memasukkan angka untuk mendapatkan konkurensi 1.000:

Concurrency = (5,000 requests/second) * (0.2 seconds/request) = 1,000

Atau, durasi fungsi rata-rata 200 ms berarti bahwa fungsi Anda dapat memproses 5 permintaan per detik. Untuk menangani beban kerja 5.000 permintaan per detik, Anda memerlukan 1.000 instance lingkungan eksekusi. Jadi, konkurensi adalah 1.000:

Concurrency = (5,000 requests/second) / (5 requests/second) = 1,000

Membedakan antara konkurensi dan permintaan per detik

Seperti disebutkan di bagian sebelumnya, konkurensi berbeda dari permintaan per detik. Ini adalah perbedaan yang sangat penting untuk dibuat ketika bekerja dengan fungsi yang memiliki durasi permintaan rata-rata kurang dari 100 ms.

Secara umum, setiap instance lingkungan eksekusi Anda dapat menangani paling banyak 10 permintaan per detik. Batas ini berlaku untuk fungsi on-demand sinkron, serta fungsi yang menggunakan konkurensi yang disediakan. Jika Anda tidak terbiasa dengan batas ini, maka Anda mungkin tidak tahu mengapa fungsi tersebut dapat mengalami pelambatan dalam skenario tertentu.

Misalnya, pertimbangkan fungsi dengan durasi permintaan rata-rata 50 ms. Pada 200 permintaan per detik, inilah konkurensi fungsi ini:

Concurrency = (200 requests/second) * (0.05 second/request) = 10

Berdasarkan hasil ini, Anda mungkin berharap bahwa Anda hanya memerlukan 10 instance lingkungan eksekusi untuk menangani beban ini. Namun, setiap lingkungan eksekusi hanya dapat menangani 10 eksekusi per detik. Ini berarti bahwa dengan 10 lingkungan eksekusi, fungsi Anda hanya dapat menangani 100 permintaan per detik dari total 200 permintaan. Fungsi ini mengalami pelambatan.

Pelajarannya adalah Anda harus mempertimbangkan konkurensi dan permintaan per detik saat mengonfigurasi pengaturan konkurensi untuk fungsi Anda. Dalam hal ini, Anda memerlukan 20 lingkungan eksekusi untuk fungsi Anda, meskipun memiliki konkurensi hanya 10.

Misalkan Anda memiliki fungsi yang membutuhkan, rata-rata, 20 ms untuk dijalankan. Selama beban puncak, Anda mengamati 3.000 permintaan per detik. Apa konkurensi fungsi Anda selama beban puncak?

Durasi fungsi rata-rata adalah 20 ms, atau 0,02 detik. Dengan menggunakan rumus konkurensi, Anda dapat memasukkan angka untuk mendapatkan konkurensi 60:

Concurrency = (3,000 requests/second) * (0.02 seconds/request) = 60

Namun, setiap lingkungan eksekusi hanya dapat menangani 10 permintaan per detik. Dengan 60 lingkungan eksekusi, fungsi Anda dapat menangani maksimum 600 permintaan per detik. Untuk mengakomodasi 3.000 permintaan sepenuhnya, fungsi Anda membutuhkan setidaknya 300 instance lingkungan eksekusi.

Memahami konkurensi cadangan dan konkurensi yang disediakan

Secara default, akun Anda memiliki batas konkurensi 1.000 eksekusi bersamaan di semua fungsi di Wilayah. Fungsi Anda berbagi kumpulan 1.000 konkurensi ini berdasarkan permintaan. Fungsi Anda mengalami pelambatan (yaitu, mereka mulai menghapus permintaan) jika Anda kehabisan konkurensi yang tersedia.

Beberapa fungsi Anda mungkin lebih penting daripada yang lain. Akibatnya, Anda mungkin ingin mengonfigurasi pengaturan konkurensi untuk memastikan bahwa fungsi penting mendapatkan konkurensi yang mereka butuhkan. Ada dua jenis kontrol konkurensi yang tersedia: konkurensi cadangan dan konkurensi yang disediakan.

  • Gunakan konkurensi cadangan untuk memesan sebagian dari konkurensi akun Anda untuk suatu fungsi. Ini berguna jika Anda tidak ingin fungsi lain mengambil semua konkurensi tanpa syarat yang tersedia.

  • Gunakan konkurensi yang disediakan untuk menginisialisasi sejumlah instance lingkungan untuk suatu fungsi. Ini berguna untuk mengurangi latensi start dingin.

Konkurensi terpesan

Jika Anda ingin menjamin bahwa sejumlah konkurensi tersedia untuk fungsi Anda kapan saja, gunakan konkurensi cadangan.

Konkurensi cadangan adalah jumlah maksimum instance bersamaan yang ingin Anda alokasikan ke fungsi Anda. Saat Anda mendedikasikan konkurensi cadangan ke suatu fungsi, tidak ada fungsi lain yang dapat menggunakan konkurensi itu. Dengan kata lain, pengaturan konkurensi cadangan dapat memengaruhi kumpulan konkurensi yang tersedia untuk fungsi lain. Fungsi yang tidak memiliki konkurensi cadangan berbagi kumpulan konkurensi tanpa syarat yang tersisa.

Mengkonfigurasi jumlah konkurensi cadangan terhadap batas konkurensi akun Anda secara keseluruhan. Tidak ada biaya untuk mengonfigurasi konkurensi terpesan untuk fungsi.

Untuk lebih memahami konkurensi cadangan, pertimbangkan diagram berikut:

Perilaku penskalaan fungsi saat Anda mengonfigurasi konkurensi cadangan pada fungsi penting.

Dalam diagram ini, batas konkurensi akun Anda untuk semua fungsi di Wilayah ini berada pada batas default 1.000. Misalkan Anda memiliki dua fungsi penting, function-blue danfunction-orange, yang secara rutin mengharapkan untuk mendapatkan volume pemanggilan yang tinggi. Anda memutuskan untuk memberikan 400 unit konkurensi cadangan kefunction-blue, dan 400 unit konkurensi cadangan untuk. function-orange Dalam contoh ini, semua fungsi lain di akun Anda harus membagikan 200 unit konkurensi tanpa syarat yang tersisa.

Diagram memiliki lima poin menarik:

  • Dit1, keduanya function-orange dan function-blue mulai menerima permintaan. Setiap fungsi mulai menggunakan bagian yang dialokasikan dari unit konkurensi cadangan.

  • Dit2, function-orange dan function-blue terus menerima lebih banyak permintaan. Pada saat yang sama, Anda menerapkan beberapa fungsi Lambda lainnya, yang mulai menerima permintaan. Anda tidak mengalokasikan konkurensi cadangan untuk fungsi-fungsi lain ini. Mereka mulai menggunakan 200 unit konkurensi tanpa syarat yang tersisa.

  • Padat3, function-orange mencapai konkurensi maks 400. Meskipun ada konkurensi yang tidak digunakan di tempat lain di akun Anda, function-orange tidak dapat mengaksesnya. Garis merah menunjukkan bahwa function-orange sedang mengalami pelambatan, dan Lambda dapat membatalkan permintaan.

  • Padat4, function-orange mulai menerima lebih sedikit permintaan dan tidak lagi melambat. Namun, fungsi Anda yang lain mengalami lonjakan lalu lintas dan mulai melambat. Meskipun ada konkurensi yang tidak digunakan di tempat lain di akun Anda, fungsi-fungsi lain ini tidak dapat mengaksesnya. Garis merah menunjukkan bahwa fungsi Anda yang lain mengalami pelambatan.

  • Padat5, fungsi lain mulai menerima lebih sedikit permintaan dan tidak lagi melambat.

Dari contoh ini, perhatikan bahwa reserving concurrency memiliki efek sebagai berikut:

  • Fungsi Anda dapat menskalakan secara independen dari fungsi lain di akun Anda. Semua fungsi akun Anda di Wilayah yang sama yang tidak memiliki konkurensi cadangan berbagi kumpulan konkurensi tanpa syarat. Tanpa konkurensi cadangan, fungsi lain berpotensi menggunakan semua konkurensi yang tersedia. Ini mencegah fungsi penting meningkat jika diperlukan.

  • Fungsi Anda tidak dapat skala di luar kendali. Konkurensi cadangan membatasi konkurensi maksimum fungsi Anda. Ini berarti bahwa fungsi Anda tidak dapat menggunakan konkurensi yang dicadangkan untuk fungsi lain, atau konkurensi dari kumpulan yang tidak dipesan. Anda dapat memesan konkurensi untuk mencegah fungsi Anda menggunakan semua konkurensi yang tersedia di akun Anda, atau dari kelebihan sumber daya hilir.

  • Anda mungkin tidak dapat menggunakan semua konkurensi akun Anda yang tersedia. Reservasi konkurensi diperhitungkan terhadap batas konkurensi akun Anda, tetapi ini juga berarti bahwa fungsi lain tidak dapat menggunakan potongan konkurensi cadangan itu. Jika fungsi Anda tidak menggunakan semua konkurensi yang Anda pesan untuk itu, Anda secara efektif membuang-buang konkurensi itu. Ini bukan masalah kecuali fungsi lain di akun Anda bisa mendapatkan keuntungan dari konkurensi yang terbuang.

Untuk mempelajari cara mengelola setelan konkurensi cadangan untuk fungsi Anda, lihatMengkonfigurasi konkurensi cadangan untuk suatu fungsi.

Konkurensi terprovisi

Anda menggunakan konkurensi cadangan untuk menentukan jumlah maksimum lingkungan eksekusi yang dicadangkan untuk fungsi Lambda. Namun, tidak satu pun dari lingkungan ini yang diinisialisasi sebelumnya. Akibatnya, pemanggilan fungsi Anda mungkin memakan waktu lebih lama karena Lambda harus terlebih dahulu menginisialisasi lingkungan baru sebelum dapat menggunakannya untuk memanggil fungsi Anda. Ketika Lambda harus menginisialisasi lingkungan baru untuk melaksanakan doa, ini dikenal sebagai awal yang dingin. Untuk mengurangi start dingin, Anda dapat menggunakan konkurensi yang disediakan.

Konkurensi yang disediakan adalah jumlah lingkungan eksekusi pra-inisialisasi yang ingin Anda alokasikan ke fungsi Anda. Jika Anda menyetel konkurensi yang disediakan pada suatu fungsi, Lambda menginisialisasi jumlah lingkungan eksekusi tersebut sehingga mereka siap untuk segera merespons permintaan fungsi.

catatan

Menggunakan konkurensi yang disediakan menimbulkan biaya tambahan ke akun Anda. Jika Anda bekerja dengan runtime Java 11 atau Java 17, Anda juga dapat menggunakan SnapStart Lambda untuk mengurangi masalah start dingin tanpa biaya tambahan. SnapStart menggunakan snapshot cache dari lingkungan eksekusi Anda untuk meningkatkan kinerja startup secara signifikan. Anda tidak dapat menggunakan keduanya SnapStart dan konkurensi yang disediakan pada versi fungsi yang sama. Untuk informasi selengkapnya tentang SnapStart fitur, batasan, dan Wilayah yang didukung, lihatMeningkatkan kinerja startup dengan Lambda SnapStart.

Saat menggunakan konkurensi yang disediakan, Lambda masih mendaur ulang lingkungan eksekusi di latar belakang. Namun, pada waktu tertentu, Lambda selalu memastikan bahwa jumlah lingkungan pra-inisialisasi sama dengan nilai setelan konkurensi yang disediakan fungsi Anda. Perilaku ini berbeda dari konkurensi cadangan, di mana Lambda dapat sepenuhnya mengakhiri lingkungan setelah periode tidak aktif. Diagram berikut mengilustrasikan hal ini dengan membandingkan siklus hidup lingkungan eksekusi tunggal saat Anda mengonfigurasi fungsi menggunakan konkurensi cadangan dibandingkan dengan konkurensi yang disediakan.

Bagaimana perilaku lingkungan fungsi berbeda di bawah model konkurensi cadangan dibandingkan dengan model konkurensi yang disediakan.

Diagram memiliki empat tempat menarik:

Waktu Konkurensi terpesan Konkurensi terprovisi

t1

Tidak ada yang terjadi.

Lambda melakukan pra-inisialisasi instance lingkungan eksekusi.

t2

Permintaan 1 masuk. Lambda harus menginisialisasi instance lingkungan eksekusi baru.

Permintaan 1 masuk. Lambda menggunakan instance lingkungan pra-inisialisasi.

t3

Setelah beberapa tidak aktif, Lambda menghentikan instance lingkungan aktif.

Tidak ada yang terjadi.

t4

Permintaan 2 masuk. Lambda harus menginisialisasi instance lingkungan eksekusi baru.

Permintaan 2 masuk. Lambda menggunakan instance lingkungan pra-inisialisasi.

Untuk lebih memahami konkurensi yang disediakan, pertimbangkan diagram berikut:

Perilaku penskalaan fungsi saat Anda mengonfigurasi konkurensi yang disediakan pada fungsi penting.

Dalam diagram ini, Anda memiliki batas konkurensi akun 1.000. Anda memutuskan untuk memberikan 400 unit konkurensi yang disediakan ke. function-orange Semua fungsi di akun Anda, termasukfunction-orange, dapat menggunakan sisa 600 unit konkurensi tanpa syarat.

Diagram memiliki lima poin menarik:

  • Padat1, function-orange mulai menerima permintaan. Karena Lambda memiliki 400 instance lingkungan eksekusi yang telah diinisialisasi sebelumnya, function-orange siap untuk pemanggilan segera.

  • Padat2, function-orange mencapai 400 permintaan bersamaan. Akibatnya, function-orange kehabisan konkurensi yang disediakan. Namun, karena masih ada konkurensi tanpa syarat yang tersedia, Lambda dapat menggunakan ini untuk menangani permintaan tambahan function-orange (tidak ada pembatasan). Lambda harus membuat instance baru untuk melayani permintaan ini, dan fungsi Anda mungkin mengalami latensi start dingin.

  • Padat3, function-orange kembali ke 400 permintaan bersamaan setelah lonjakan lalu lintas singkat. Lambda sekali lagi dapat menangani semua permintaan tanpa latensi start dingin.

  • Dit4, fungsi di akun Anda mengalami ledakan lalu lintas. Burst ini dapat berasal dari function-orange atau fungsi lain di akun Anda. Lambda menggunakan konkurensi tanpa syarat untuk menangani permintaan ini.

  • Dit5, fungsi di akun Anda mencapai batas konkurensi maksimum 1.000, dan mengalami pelambatan.

Contoh sebelumnya dianggap hanya konkurensi yang disediakan. Dalam praktiknya, Anda dapat mengatur konkurensi yang disediakan dan konkurensi cadangan pada suatu fungsi. Anda dapat melakukan ini jika Anda memiliki fungsi yang menangani beban pemanggilan yang konsisten pada hari kerja, tetapi secara rutin melihat lonjakan lalu lintas pada akhir pekan. Dalam hal ini, Anda dapat menggunakan konkurensi yang disediakan untuk menetapkan jumlah dasar lingkungan untuk menangani permintaan selama hari kerja, dan menggunakan konkurensi cadangan untuk menangani lonjakan akhir pekan. Pertimbangkan diagram berikut:

Perilaku penskalaan fungsi saat Anda menggunakan konkurensi cadangan dan ketentuan.

Dalam diagram ini, misalkan Anda mengonfigurasi 200 unit konkurensi yang disediakan dan 400 unit konkurensi cadangan untuk. function-orange Karena Anda mengonfigurasi konkurensi cadangan, function-orange tidak dapat menggunakan salah satu dari 600 unit konkurensi tanpa syarat.

Diagram ini memiliki lima poin menarik:

  • Padat1, function-orange mulai menerima permintaan. Karena Lambda telah menginisialisasi 200 instance lingkungan eksekusi sebelumnya, function-orange siap untuk pemanggilan segera.

  • Dit2, function-orange menggunakan semua konkurensi yang disediakan. function-orangedapat terus melayani permintaan menggunakan konkurensi cadangan, tetapi permintaan ini mungkin mengalami latensi awal yang dingin.

  • Padat3, function-orange mencapai 400 permintaan bersamaan. Akibatnya, function-orange menggunakan semua konkurensi yang dicadangkan. Karena function-orange tidak dapat menggunakan konkurensi tanpa syarat, permintaan mulai melambat.

  • Padat4, function-orange mulai menerima lebih sedikit permintaan, dan tidak lagi throttle.

  • Padat5, function-orange turun ke 200 permintaan bersamaan, sehingga semua permintaan kembali dapat menggunakan konkurensi yang disediakan (yaitu, tidak ada latensi start dingin).

Baik konkurensi cadangan maupun konkurensi yang disediakan dihitung terhadap batas konkurensi akun Anda dan kuota Regional. Dengan kata lain, mengalokasikan konkurensi yang dicadangkan dan disediakan dapat memengaruhi kumpulan konkurensi yang tersedia untuk fungsi lain. Mengkonfigurasi konkurensi yang disediakan menimbulkan biaya ke Anda. Akun AWS

catatan

Jika jumlah konkurensi yang disediakan pada versi dan alias fungsi ditambahkan ke konkurensi cadangan fungsi, maka semua pemanggilan berjalan pada konkurensi yang disediakan. Konfigurasi ini juga memiliki efek membatasi versi fungsi yang tidak dipublikasikan ($LATEST), yang mencegahnya dijalankan. Anda tidak dapat mengalokasikan lebih banyak konkurensi terprovisi dari konkurensi terpesan untuk fungsi.

Untuk mengelola setelan konkurensi yang disediakan untuk fungsi Anda, lihat. Mengkonfigurasi konkurensi yang disediakan untuk suatu fungsi Untuk mengotomatiskan penskalaan konkurensi yang disediakan berdasarkan jadwal atau pemanfaatan aplikasi, lihat. Menggunakan Application Auto Scaling untuk mengotomatiskan manajemen konkurensi yang disediakan

Bagaimana Lambda mengalokasikan konkurensi yang disediakan

Konkurensi yang disediakan tidak langsung online setelah Anda mengonfigurasinya. Lambda mulai mengalokasikan konkurensi terprovisi setelah satu atau dua menit persiapan. Untuk setiap fungsi, Lambda dapat menyediakan hingga 6.000 lingkungan eksekusi setiap menit, terlepas dari itu. Wilayah AWS Ini persis sama dengan tingkat penskalaan konkurensi untuk fungsi.

Saat Anda mengirimkan permintaan untuk mengalokasikan konkurensi yang disediakan, Anda tidak dapat mengakses salah satu lingkungan tersebut hingga Lambda benar-benar selesai mengalokasikannya. Misalnya, jika Anda meminta 5.000 konkurensi yang disediakan, tidak ada permintaan yang dapat menggunakan konkurensi yang disediakan hingga Lambda benar-benar selesai mengalokasikan 5.000 lingkungan eksekusi.

Membandingkan konkurensi cadangan dan konkurensi yang disediakan

Tabel berikut merangkum dan membandingkan konkurensi yang dicadangkan dan disediakan.

Topik Konkurensi terpesan Konkurensi terprovisi

Definisi

Jumlah maksimum instance lingkungan eksekusi untuk fungsi Anda.

Tetapkan jumlah instance lingkungan eksekusi yang telah disediakan sebelumnya untuk fungsi Anda.

Perilaku penyediaan

Lambda menyediakan instans baru berdasarkan permintaan.

Instans pra-ketentuan Lambda (yaitu, sebelum fungsi Anda mulai menerima permintaan).

Perilaku awal dingin

Latensi start dingin dimungkinkan, karena Lambda harus membuat instance baru sesuai permintaan.

Latensi start dingin tidak dimungkinkan, karena Lambda tidak harus membuat instance sesuai permintaan.

Perilaku melambat

Fungsi dibatasi ketika batas konkurensi cadangan tercapai.

Jika konkurensi cadangan tidak disetel: fungsi menggunakan konkurensi tanpa syarat saat batas konkurensi yang disediakan tercapai.

Jika set konkurensi cadangan: fungsi dibatasi saat batas konkurensi cadangan tercapai.

Perilaku default jika tidak disetel

Fungsi menggunakan konkurensi tanpa syarat yang tersedia di akun Anda.

Lambda tidak menyediakan instans apa pun terlebih dahulu. Sebaliknya, jika konkurensi cadangan tidak disetel: fungsi menggunakan konkurensi tanpa syarat yang tersedia di akun Anda.

Jika set konkurensi cadangan: fungsi menggunakan konkurensi cadangan.

Harga

Tidak ada biaya tambahan.

Mengalami biaya tambahan.

Kuota konkurensi

Lambda menetapkan kuota untuk jumlah total konkurensi yang dapat Anda gunakan di semua fungsi di Wilayah. Kuota ini ada pada dua tingkatan:

  • Pada tingkat akun, fungsi Anda dapat memiliki hingga 1.000 unit konkurensi secara default. Untuk meningkatkan batas ini, lihat Meminta peningkatan kuota pada Panduan Pengguna Service Quotas.

  • Pada tingkat fungsi, Anda dapat memesan hingga 900 unit konkurensi di semua fungsi Anda secara default. Terlepas dari total batas konkurensi akun Anda, Lambda selalu mencadangkan 100 unit konkurensi untuk fungsi Anda yang tidak secara eksplisit mencadangkan konkurensi. Misalnya, jika Anda meningkatkan batas konkurensi akun Anda menjadi 2.000, maka Anda dapat memesan hingga 1.900 unit konkurensi di tingkat fungsi.

Untuk memeriksa kuota konkurensi tingkat akun Anda saat ini, gunakan AWS Command Line Interface (AWS CLI) untuk menjalankan perintah berikut:

aws lambda get-account-settings

Anda akan melihat output yang terlihat seperti berikut:

{ "AccountLimit": { "TotalCodeSize": 80530636800, "CodeSizeUnzipped": 262144000, "CodeSizeZipped": 52428800, "ConcurrentExecutions": 1000, "UnreservedConcurrentExecutions": 900 }, "AccountUsage": { "TotalCodeSize": 410759889, "FunctionCount": 8 } }

ConcurrentExecutionsadalah total kuota konkurensi tingkat akun Anda. UnreservedConcurrentExecutionsadalah jumlah konkurensi cadangan yang masih dapat Anda alokasikan ke fungsi Anda.

Saat fungsi Anda menerima lebih banyak permintaan, Lambda secara otomatis meningkatkan jumlah lingkungan eksekusi untuk menangani permintaan ini hingga akun Anda mencapai kuota konkurensinya. Namun, untuk melindungi dari penskalaan berlebih sebagai respons terhadap ledakan lalu lintas yang tiba-tiba, Lambda membatasi seberapa cepat fungsi Anda dapat menskalakan. Tingkat penskalaan konkurensi ini adalah tingkat maksimum di mana fungsi di akun Anda dapat menskalakan sebagai respons terhadap peningkatan permintaan. (Artinya, seberapa cepat Lambda dapat membuat lingkungan eksekusi baru.) Tingkat penskalaan konkurensi berbeda dari batas konkurensi tingkat akun, yang merupakan jumlah total konkurensi yang tersedia untuk fungsi Anda.

Di masing-masing Wilayah AWS, dan untuk setiap fungsi, tingkat penskalaan konkurensi Anda adalah 1.000 instance lingkungan eksekusi setiap 10 detik. Dengan kata lain, setiap 10 detik, Lambda dapat mengalokasikan paling banyak 1.000 instance lingkungan eksekusi tambahan untuk setiap fungsi Anda.

Biasanya, Anda tidak perlu khawatir tentang batasan ini. Tingkat penskalaan Lambda cukup untuk sebagian besar kasus penggunaan.

Yang penting, tingkat penskalaan konkurensi adalah batas tingkat fungsi. Ini berarti bahwa setiap fungsi di akun Anda dapat menskalakan secara independen dari fungsi lainnya.

Untuk informasi selengkapnya tentang perilaku penskalaan, lihatPerilaku penskalaan Lambda.