View a markdown version of this page

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 pada saat yang 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 sebuah. 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 dalam 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 menciptakan 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 lain.

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

Lingkungan eksekusi menangani dua permintaan secara berurutan.

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

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.

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

Fungsi Lambda menyediakan beberapa lingkungan untuk menangani 10 permintaan.

Pada diagram sebelumnya, setiap bidang horizontal mewakili contoh lingkungan eksekusi tunggal (diberi label dari A sampaiF). Berikut cara Lambda menangani setiap permintaan:

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

Instans lingkungan eksekusi yang ada A sedang 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

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

6

Menggunakan kembali lingkungan A

Instance lingkungan eksekusi A telah selesai memproses permintaan 1 dan sekarang tersedia.

7

Menggunakan kembali lingkungan B

Eksekusi lingkungan instance B telah selesai memproses permintaan 2 dan sekarang tersedia.

8

Menggunakan kembali lingkungan C

Eksekusi lingkungan instance C telah selesai memproses permintaan 3 dan sekarang tersedia.

9

Ketentuan lingkungan baru F

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

10

Menggunakan kembali lingkungan D

Instance 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 tanggapan. Animasi berikut melacak jumlah permintaan bersamaan dari waktu ke waktu:

Sebuah animasi yang menggambarkan permintaan bersamaan dari waktu ke waktu.

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

Konkurensi fungsi pada enam titik waktu yang berbeda.

Pada diagram sebelumnya, kita dapat menggambar garis vertikal pada setiap titik waktu dan menghitung jumlah lingkungan yang memotong garis ini. Ini memberi kita jumlah permintaan bersamaan pada saat itu. Misalnya, pada saat itut1, 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 pada saat yang sama. 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 pada saat yang 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 benar bahwa konkurensinya juga 100:

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

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

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

Apa arti konkurensi 50 dalam praktiknya? 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 mengekspresikannya 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 setengah waktu untuk memproses setiap permintaan (250 ms), maka konkurensinya 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. Berapa 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. Dengan demikian, konkurensinya adalah 1.000:

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

Memahami konkurensi yang dicadangkan 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 membatalkan permintaan) jika Anda kehabisan konkurensi yang tersedia.

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

  • Gunakan konkurensi yang dicadangkan untuk menetapkan jumlah maksimum dan minimum instans bersamaan 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. Ketika fungsi sudah memiliki konkurensi terpesan, tidak ada fungsi lain yang dapat menggunakan konkurensi tersebut.

  • Gunakan konkur ensi yang disediakan untuk melakukan pra-inisialisasi 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 yang dicadangkan.

Konkurensi cadangan menetapkan jumlah maksimum dan minimum instans bersamaan yang ingin Anda alokasikan ke fungsi Anda. Ketika Anda mendedikasikan konkurensi yang dicadangkan untuk suatu fungsi, tidak ada fungsi lain yang dapat menggunakan konkurensi itu. Dengan kata lain, pengaturan konkurensi yang dicadangkan dapat memengaruhi kumpulan konkurensi yang tersedia untuk fungsi lain. Fungsi yang tidak memiliki konkurensi cadangan berbagi kumpulan konkurensi tanpa reservasi yang tersisa.

Mengkonfigurasi konkurensi yang dipesan diperhitungkan terhadap batas konkurensi akun Anda secara keseluruhan. Tidak ada biaya untuk mengonfigurasi konkurensi terpesan untuk fungsi.

Untuk lebih memahami konkurensi yang dicadangkan, pertimbangkan diagram berikut:

Perilaku penskalaan fungsi saat Anda mengonfigurasi konkurensi yang dicadangkan 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 yang dicadangkan kepadafunction-blue, dan 400 unit konkurensi yang dicadangkan kepada. function-orange Dalam contoh ini, semua fungsi lain di akun Anda harus berbagi sisa 200 unit konkurensi tanpa syarat.

Diagram memiliki lima titik menarik:

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

  • 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 yang dicadangkan ke fungsi-fungsi lain ini. Mereka mulai menggunakan sisa 200 unit konkurensi tanpa syarat.

  • Padat3, function-orange mencapai konkurensi maksimum 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 mungkin membatalkan permintaan.

  • Padat4, function-orange mulai menerima lebih sedikit permintaan dan tidak lagi melambatkan. Namun, fungsi Anda yang lain mengalami lonjakan lalu lintas dan mulai melambatkan. 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 melambatkan.

Dari contoh ini, perhatikan bahwa reservasi konkurensi 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 reservasi. Tanpa konkurensi yang dicadangkan, fungsi lain berpotensi menggunakan semua konkurensi yang tersedia. Ini mencegah fungsi kritis ditingkatkan jika diperlukan.

  • Fungsi Anda tidak dapat menskalakan di luar kendali. Konkurensi cadangan membatasi konkurensi maksimum dan minimum fungsi Anda. Ini berarti bahwa fungsi Anda tidak dapat menggunakan konkurensi yang disediakan untuk fungsi lain, atau konkurensi dari kumpulan tanpa reservasi. Selain itu, konkurensi yang dicadangkan bertindak sebagai batas bawah dan atas - ini mencadangkan kapasitas yang ditentukan secara eksklusif untuk fungsi Anda sementara juga mencegahnya menskalakan melampaui batas itu. Anda dapat memesan konkurensi untuk mencegah fungsi Anda menggunakan semua konkurensi yang tersedia di akun Anda, atau membebani sumber daya hilir secara berlebihan.

  • Anda mungkin tidak dapat menggunakan semua konkurensi yang tersedia di akun Anda. Reservasi konkurensi diperhitungkan terhadap batas konkurensi akun Anda, tetapi ini juga berarti bahwa fungsi lain tidak dapat menggunakan potongan konkurensi yang dicadangkan itu. Jika fungsi Anda tidak menggunakan semua konkurensi yang Anda pesan untuk itu, Anda secara efektif menyia-nyiakan konkurensi itu. Ini bukan masalah kecuali fungsi lain di akun Anda dapat mengambil manfaat dari konkurensi yang terbuang.

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

Konkurensi yang disediakan

Anda menggunakan konkurensi yang dicadangkan untuk menentukan jumlah maksimum lingkungan eksekusi yang disediakan untuk fungsi Lambda. Namun, tidak satu pun dari lingkungan ini telah 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 melakukan pemanggilan, ini dikenal sebagai start dingin. Untuk mengurangi cold start, Anda dapat menggunakan konkurensi yang disediakan.

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

catatan

Menggunakan konkurensi yang disediakan akan dikenakan biaya tambahan ke akun Anda. Jika Anda bekerja dengan runtime Java 11 atau Java 17, Anda juga dapat menggunakan Lambda SnapStart untuk mengurangi masalah cold start 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. Misalnya, ini dapat terjadi setelah kegagalan pemanggilan. Namun, pada waktu tertentu, Lambda selalu memastikan bahwa jumlah lingkungan pra-inisialisasi sama dengan nilai setelan konkurensi yang disediakan fungsi Anda. Yang penting, meskipun Anda menggunakan konkurensi yang disediakan, Anda masih dapat mengalami penundaan start dingin jika Lambda harus mengatur ulang lingkungan eksekusi.

Sebaliknya, ketika menggunakan konkurensi yang dicadangkan, Lambda mungkin sepenuhnya menghentikan lingkungan setelah periode tidak aktif. Diagram berikut menggambarkan hal ini dengan membandingkan siklus hidup lingkungan eksekusi tunggal saat Anda mengonfigurasi fungsi menggunakan konkurensi yang dicadangkan dibandingkan dengan konkurensi yang disediakan.

Perbandingan konkurensi yang dicadangkan dan perilaku konkurensi yang disediakan.

Diagram memiliki empat titik menarik:

Waktu Konkurensi terpesan Konkurensi yang disediakan

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 mengakhiri 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 untuk. function-orange Semua fungsi di akun Anda, termasuk function-orange, dapat menggunakan sisa 600 unit konkurensi tanpa reservasi.

Diagram memiliki lima titik menarik:

  • Padat1, function-orange mulai menerima permintaan. Karena Lambda telah melakukan pra-inisialisasi 400 instance lingkungan eksekusi, function-orange siap untuk pemanggilan segera.

  • Padat2, function-orange mencapai 400 permintaan bersamaan. Akibatnya, ke function-orange habisan konkurensi yang disediakan. Namun, karena masih ada konkurensi tanpa syarat yang tersedia, Lambda dapat menggunakan ini untuk menangani permintaan tambahan ke function-orange (tidak ada pelambatan). 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.

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

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

Contoh sebelumnya hanya dianggap konkurensi yang disediakan. Dalam praktiknya, Anda dapat mengatur konkurensi yang disediakan dan konkurensi yang dicadangkan pada suatu fungsi. Anda dapat melakukan ini jika Anda memiliki fungsi yang menangani beban panggilan yang konsisten pada hari kerja, tetapi secara rutin melihat lonjakan lalu lintas di 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 yang dicadangkan untuk menangani lonjakan akhir pekan. Pertimbangkan diagram berikut:

Perilaku penskalaan fungsi saat Anda menggunakan konkurensi yang dicadangkan dan yang disediakan.

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

Diagram ini memiliki lima titik menarik:

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

  • Padat2, function-orange menggunakan semua konkurensi yang disediakan. function-orangedapat melanjutkan melayani permintaan menggunakan konkurensi yang dicadangkan, tetapi permintaan ini mungkin mengalami latensi start 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 membatasi.

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

Konkurensi yang dipesan dan konkurensi yang disediakan dihitung terhadap batas konkurensi akun dan kuota Regional Anda. Kuota Lambda Dengan kata lain, mengalokasikan konkurensi yang dicadangkan dan disediakan dapat memengaruhi kumpulan konkurensi yang tersedia untuk fungsi lain. Mengkonfigurasi konkurensi yang disediakan akan dikenakan biaya kepada Anda. Akun AWS

catatan

Jika jumlah konkurensi yang disediakan pada versi fungsi dan alias bertambah dengan 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 Wilayah AWS itu. Ini persis sama dengan tingkat penskal aan konkurensi untuk fungsi.

Saat mengirimkan permintaan untuk mengalokasikan konkurensi yang disediakan, Anda tidak dapat mengakses lingkungan tersebut sampai Lambda selesai mengalokasikannya sepenuhnya. Misalnya, jika Anda meminta 5.000 konkurensi yang disediakan, tidak ada permintaan yang dapat menggunakan konkurensi yang disediakan sampai Lambda selesai mengalokasikan 5.000 lingkungan eksekusi sepenuhnya.

Membandingkan konkurensi yang dicadangkan dan konkurensi yang disediakan

Tabel berikut merangkum dan membandingkan konkurensi yang dicadangkan dan yang disediakan.

Topik Konkurensi terpesan Konkurensi yang disediakan

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 instance baru berdasarkan permintaan.

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

Perilaku start 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 pelambatan

Fungsi dibatasi ketika batas konkurensi yang dicadangkan tercapai.

Jika konkurensi yang dicadangkan tidak disetel: fungsi menggunakan konkurensi tanpa syarat ketika batas konkurensi yang disediakan tercapai.

Jika konkurensi yang dicadangkan disetel: fungsi dibatasi ketika batas konkurensi yang dicadangkan tercapai.

Perilaku default jika tidak disetel

Fungsi menggunakan konkurensi tanpa syarat yang tersedia di akun Anda.

Lambda tidak melakukan pra-penyediaan instans apa pun. Sebaliknya, jika konkurensi yang dicadangkan tidak disetel: fungsi menggunakan konkurensi tanpa reservasi yang tersedia di akun Anda.

Jika konkurensi yang dicadangkan disetel: fungsi menggunakan konkurensi yang dicadangkan.

Harga

Tidak ada biaya tambahan.

Menimbulkan biaya tambahan.

Memahami 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.

Di semua fungsi di akun Anda, Lambda memberlakukan batas permintaan per detik yang sama dengan 10 kali konkurensi akun Anda. Misalnya, karena batas konkurensi akun default adalah 1.000, fungsi di akun Anda dapat menangani maksimum 10.000 permintaan per detik.

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

Concurrency = (20,000 requests/second) * (0.05 second/request) = 1,000

Berdasarkan hasil ini, Anda mungkin mengharapkan bahwa batas konkurensi akun 1.000 cukup untuk menangani beban ini. Namun, karena batas 10.000 permintaan per detik, fungsi Anda hanya dapat menangani 10.000 permintaan per detik dari 20.000 total permintaan. Fungsi ini mengalami pelambatan.

Pelajarannya adalah bahwa Anda harus mempertimbangkan konkurensi dan permintaan per detik saat mengonfigurasi pengaturan konkurensi untuk fungsi Anda. Dalam hal ini, Anda perlu meminta kenaikan batas konkurensi akun menjadi 2.000, karena ini akan meningkatkan batas total permintaan per detik Anda menjadi 20.000.

catatan

Berdasarkan batas permintaan per detik ini, tidak benar untuk mengatakan bahwa setiap lingkungan eksekusi Lambda hanya dapat menangani maksimum 10 permintaan per detik. Alih-alih mengamati beban pada lingkungan eksekusi individu mana pun, Lambda hanya mempertimbangkan konkurensi keseluruhan dan permintaan keseluruhan per detik saat menghitung kuota Anda.

Misalkan Anda memiliki fungsi yang membutuhkan rata-rata 20 ms untuk dijalankan. Selama beban puncak, Anda mengamati 30.000 permintaan per detik. Berapa 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 600:

Concurrency = (30,000 requests/second) * (0.02 seconds/request) = 600

Secara default, batas konkurensi akun 1.000 tampaknya cukup untuk menangani beban ini. Namun, batas permintaan per detik 10.000 tidak cukup untuk menangani 30.000 permintaan yang masuk per detik. Untuk sepenuhnya mengakomodasi 30.000 permintaan, Anda perlu meminta kenaikan batas konkurensi akun menjadi 3.000 atau lebih tinggi.

Batas permintaan per detik berlaku untuk semua kuota di Lambda yang melibatkan konkurensi. Dengan kata lain, ini berlaku untuk fungsi sesuai permintaan sinkron, fungsi yang menggunakan konkurensi yang disediakan, dan perilaku penskalaan konkurensi. Misalnya, berikut adalah beberapa skenario di mana Anda harus mempertimbangkan dengan cermat batas konkurensi dan permintaan per detik Anda:

  • Fungsi yang menggunakan konkurensi sesuai permintaan dapat mengalami peningkatan ledakan 500 konkurensi setiap 10 detik, atau 5.000 permintaan per detik setiap 10 detik, mana yang terjadi lebih dulu.

  • Misalkan Anda memiliki fungsi yang memiliki alokasi konkurensi yang disediakan sebesar 10. Fungsi ini mengalir ke konkurensi sesuai permintaan setelah 10 konkurensi atau 100 permintaan per detik, mana yang terjadi lebih dulu.

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 kenaikan kuota di Panduan Pengguna Kuota Layanan.

  • 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 memesan konkurensi. Misalnya, jika Anda meningkatkan batas konkurensi akun Anda menjadi 2.000, maka Anda dapat memesan hingga 1.900 unit konkurensi di tingkat fungsi.

  • Pada tingkat akun dan tingkat fungsi, Lambda juga memberlakukan batas permintaan per detik sama dengan 10 kali kuota konkurensi yang sesuai. Misalnya, ini berlaku untuk konkurensi tingkat akun, fungsi yang menggunakan konkurensi sesuai permintaan, fungsi menggunakan konkurensi yang disediakan, dan perilaku penskalaan konkurensi. Perilaku penskalaan Lambda Untuk informasi selengkapnya, lihat Memahami konkurensi dan permintaan per detik.

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 untuk 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 peningkatan skala yang berlebihan sebagai respons terhadap semburan 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 ditingkatkan sebagai respons terhadap permintaan yang meningkat. (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 setiap fungsi Wilayah AWS, dan untuk setiap fungsi, tingkat penskalaan konkurensi Anda adalah 1.000 instans lingkungan eksekusi setiap 10 detik (atau 10.000 permintaan per detik setiap 10 detik). Dengan kata lain, setiap 10 detik, Lambda dapat mengalokasikan paling banyak 1.000 instance lingkungan eksekusi tambahan, atau mengakomodasi 10.000 permintaan tambahan per detik, 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.