Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memahami penskalaan Fungsi Acara Lambda
Konkurensi adalah jumlah permintaan dalam penerbangan yang ditangani oleh Fungsi AWS Lambda Acara Anda pada saat yang bersamaan. Untuk setiap permintaan bersamaan, Lambda menyediakan instance terpisah dari lingkungan eksekusi Anda. Saat Fungsi Acara 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 Acara dalam file. Wilayah AWS Untuk mendukung kebutuhan akun spesifik Anda, Anda dapat meminta peningkatan kuota
Topik ini menjelaskan konsep konkurensi dan penskalaan Fungsi Acara 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 Acara 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 Peristiwa Anda (fase Invoke):
catatan
Durasi Init dan Invoke yang sebenarnya dapat bervariasi tergantung pada banyak faktor, seperti runtime yang Anda pilih dan kode Fungsi Peristiwa 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 Acara 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 Event Function 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 Acara yang sama. Untuk permintaan berikutnya, Lambda tidak perlu menginisialisasi ulang lingkungan.
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 Acara 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 Acara Anda menerima 10 permintaan:
Dalam diagram sebelumnya, setiap bidang horizontal mewakili contoh lingkungan eksekusi tunggal (diberi label dari A melaluiF). Inilah 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 |
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 Acara Anda menerima lebih banyak permintaan bersamaan, Lambda meningkatkan jumlah instance lingkungan eksekusi sebagai respons. Animasi berikut melacak jumlah permintaan bersamaan dari waktu ke waktu:
Dengan membekukan animasi sebelumnya pada enam titik waktu yang berbeda, kita mendapatkan diagram berikut:
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 Acara Anda adalah jumlah permintaan bersamaan yang ditangani pada saat yang sama. Menanggapi peningkatan konkurensi Fungsi Acara Anda, Lambda menyediakan lebih banyak instance lingkungan eksekusi untuk memenuhi permintaan permintaan.
Menghitung konkurensi untuk Fungsi Acara
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 Acara Anda secara bersamaan. Cara cepat dan praktis untuk mengukur konkurensi Fungsi Peristiwa Lambda adalah dengan menggunakan rumus berikut:
Concurrency = (average requests per second) * (average request duration in seconds)
Konkurensi berbeda dari permintaan per detik. Misalnya, Fungsi Acara 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 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 Acara 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 Acara yang membutuhkan, rata-rata, 200 ms untuk dijalankan. Selama beban puncak, Anda mengamati 5.000 permintaan per detik. Apa konkurensi Fungsi Acara Anda selama beban puncak?
Durasi Fungsi Acara 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 Acara rata-rata 200 ms berarti bahwa Fungsi Acara 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
Memahami konkurensi cadangan dan konkurensi yang disediakan
Secara default, akun Anda memiliki batas konkurensi 1.000 eksekusi bersamaan di semua Fungsi Peristiwa di Wilayah. Fungsi Acara Anda membagikan kumpulan 1.000 konkurensi ini berdasarkan permintaan. Fungsi Acara Anda mengalami pelambatan (yaitu, mereka mulai menghapus permintaan) jika Anda kehabisan konkurensi yang tersedia.
Beberapa Fungsi Acara Anda mungkin lebih penting daripada yang lain. Akibatnya, Anda mungkin ingin mengonfigurasi pengaturan konkurensi untuk memastikan bahwa Fungsi Peristiwa kritis mendapatkan konkurensi yang mereka butuhkan. Ada dua jenis kontrol konkurensi yang tersedia: konkurensi cadangan dan konkurensi yang disediakan.
-
Gunakan konkurensi cadangan untuk mengatur jumlah maksimum dan minimum instans bersamaan untuk memesan sebagian konkurensi akun Anda untuk Fungsi Acara. Ini berguna jika Anda tidak ingin Fungsi Acara lain mengambil semua konkurensi tanpa syarat yang tersedia. Ketika Fungsi Peristiwa telah mencadangkan konkurensi, tidak ada Fungsi Peristiwa lain yang dapat menggunakan konkurensi itu.
-
Gunakan konkurensi yang disediakan untuk menginisialisasi sejumlah instance lingkungan untuk Fungsi Peristiwa. Ini berguna untuk mengurangi latensi start dingin.
Konkurensi terpesan
Jika Anda ingin menjamin bahwa sejumlah konkurensi tersedia untuk Fungsi Acara Anda kapan saja, gunakan konkurensi cadangan.
Konkurensi cadangan menetapkan jumlah maksimum dan minimum instance bersamaan yang ingin Anda alokasikan ke Fungsi Acara Anda. Saat Anda mendedikasikan konkurensi cadangan ke Fungsi Acara, tidak ada Fungsi Acara lain yang dapat menggunakan konkurensi itu. Dengan kata lain, pengaturan konkurensi cadangan dapat memengaruhi kumpulan konkurensi yang tersedia untuk Fungsi Acara lainnya. Fungsi Acara 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 cadangan untuk Fungsi Acara.
Untuk lebih memahami konkurensi cadangan, pertimbangkan diagram berikut:
Dalam diagram ini, batas konkurensi akun Anda untuk semua Fungsi Acara di Wilayah ini berada pada batas default 1.000. Misalkan Anda memiliki dua Fungsi Peristiwa 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 Acara lainnya di akun Anda harus membagikan 200 unit konkurensi tanpa syarat yang tersisa.
Diagram memiliki lima poin menarik:
-
Di
t1, keduanyafunction-orangedanfunction-bluemulai menerima permintaan. Setiap Fungsi Acara mulai menggunakan bagian yang dialokasikan dari unit konkurensi cadangan. -
Di
t2,function-orangedanfunction-blueterus menerima lebih banyak permintaan. Pada saat yang sama, Anda menerapkan beberapa Fungsi Peristiwa Lambda lainnya, yang mulai menerima permintaan. Anda tidak mengalokasikan konkurensi cadangan ke Fungsi Acara lainnya ini. Mereka mulai menggunakan 200 unit konkurensi tanpa syarat yang tersisa. -
Pada
t3,function-orangemencapai konkurensi maks 400. Meskipun ada konkurensi yang tidak digunakan di tempat lain di akun Anda,function-orangetidak dapat mengaksesnya. Garis merah menunjukkan bahwafunction-orangesedang mengalami pelambatan, dan Lambda mungkin membatalkan permintaan. -
Pada
t4,function-orangemulai menerima lebih sedikit permintaan dan tidak lagi melambat. Namun, Fungsi Acara Anda yang lain mengalami lonjakan lalu lintas dan mulai melambat. Meskipun ada konkurensi yang tidak digunakan di tempat lain di akun Anda, Fungsi Acara lainnya ini tidak dapat mengaksesnya. Garis merah menunjukkan bahwa Fungsi Acara Anda yang lain mengalami pelambatan. -
Pada
t5, Fungsi Acara lainnya mulai menerima lebih sedikit permintaan dan tidak lagi melambat.
Dari contoh ini, perhatikan bahwa reserving concurrency memiliki efek sebagai berikut:
-
Fungsi Acara Anda dapat menskalakan secara independen dari Fungsi Acara lainnya di akun Anda. Semua Fungsi Acara akun Anda di Wilayah yang sama yang tidak memiliki konkurensi cadangan berbagi kumpulan konkurensi tanpa syarat. Tanpa konkurensi cadangan, Fungsi Acara lainnya berpotensi menggunakan semua konkurensi Anda yang tersedia. Ini mencegah Fungsi Peristiwa penting dari peningkatan skala jika diperlukan.
-
Fungsi Acara Anda tidak dapat skala di luar kendali. Konkurensi cadangan membatasi konkurensi maksimum dan minimum Fungsi Acara Anda. Ini berarti bahwa Fungsi Acara Anda tidak dapat menggunakan konkurensi yang dicadangkan untuk Fungsi Acara lainnya, atau konkurensi dari kumpulan tanpa syarat. Selain itu, konkurensi cadangan bertindak sebagai batas bawah dan atas - ini menyimpan kapasitas yang ditentukan secara eksklusif untuk Fungsi Acara Anda sementara juga mencegahnya dari penskalaan melampaui batas itu. Anda dapat memesan konkurensi untuk mencegah Fungsi Acara Anda menggunakan semua konkurensi yang tersedia di akun Anda, atau dari kelebihan sumber daya hilir.
-
Anda mungkin tidak dapat menggunakan semua konkurensi akun yang tersedia. Reservasi konkurensi diperhitungkan terhadap batas konkurensi akun Anda, tetapi ini juga berarti bahwa Fungsi Acara lainnya tidak dapat menggunakan potongan konkurensi cadangan tersebut. Jika Fungsi Acara Anda tidak menggunakan semua konkurensi yang Anda pesan untuk itu, Anda secara efektif membuang-buang konkurensi itu. Ini bukan masalah kecuali Fungsi Acara lain di akun Anda bisa mendapatkan keuntungan dari konkurensi yang terbuang.
Untuk mempelajari cara mengelola setelan konkurensi cadangan untuk Fungsi Acara Anda, lihatMengkonfigurasi konkurensi cadangan untuk Fungsi Acara.
Konkurensi yang disediakan
Anda menggunakan konkurensi cadangan untuk menentukan jumlah maksimum lingkungan eksekusi yang dicadangkan untuk Fungsi Peristiwa Lambda. Namun, tidak satu pun dari lingkungan ini yang diinisialisasi sebelumnya. Akibatnya, pemanggilan Fungsi Acara Anda mungkin memakan waktu lebih lama karena Lambda harus terlebih dahulu menginisialisasi lingkungan baru sebelum dapat menggunakannya untuk memanggil Fungsi Acara Anda. Ketika Lambda harus menginisialisasi lingkungan baru untuk melakukan 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 Acara Anda. Jika Anda menetapkan konkurensi yang disediakan pada Fungsi Peristiwa, Lambda menginisialisasi jumlah lingkungan eksekusi tersebut sehingga mereka siap untuk segera merespons permintaan Fungsi Acara.
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 Peristiwa 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 pengaturan konkurensi yang disediakan Fungsi Acara Anda. Yang penting, bahkan jika Anda menggunakan konkurensi yang disediakan, Anda masih dapat mengalami penundaan awal yang dingin jika Lambda harus mengatur ulang lingkungan eksekusi.
Sebaliknya, saat menggunakan konkurensi cadangan, Lambda mungkin sepenuhnya mengakhiri lingkungan setelah periode tidak aktif. Diagram berikut mengilustrasikan hal ini dengan membandingkan siklus hidup lingkungan eksekusi tunggal saat Anda mengonfigurasi Fungsi Acara menggunakan konkurensi cadangan dibandingkan dengan konkurensi yang disediakan.
Diagram memiliki empat tempat 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 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:
Dalam diagram ini, Anda memiliki batas konkurensi akun 1.000. Anda memutuskan untuk memberikan 400 unit konkurensi yang disediakan ke. function-orange Semua Fungsi Acara di akun Anda, termasukfunction-orange, dapat menggunakan sisa 600 unit konkurensi tanpa syarat.
Diagram memiliki lima poin menarik:
-
Pada
t1,function-orangemulai menerima permintaan. Karena Lambda memiliki 400 instance lingkungan eksekusi yang telah diinisialisasi sebelumnya,function-orangesiap untuk pemanggilan segera. -
Pada
t2,function-orangemencapai 400 permintaan bersamaan. Akibatnya,function-orangekehabisan konkurensi yang disediakan. Namun, karena masih ada konkurensi tanpa syarat yang tersedia, Lambda dapat menggunakan ini untuk menangani permintaan tambahanfunction-orange(tidak ada pembatasan). Lambda harus membuat instance baru untuk melayani permintaan ini, dan Fungsi Acara Anda mungkin mengalami latensi start dingin. -
Pada
t3,function-orangekembali ke 400 permintaan bersamaan setelah lonjakan lalu lintas singkat. Lambda sekali lagi dapat menangani semua permintaan tanpa latensi start dingin. -
Di
t4, Fungsi Acara di akun Anda mengalami ledakan lalu lintas. Burst ini dapat berasal darifunction-orangeatau Fungsi Acara lainnya di akun Anda. Lambda menggunakan konkurensi tanpa syarat untuk menangani permintaan ini. -
Pada
t5, Fungsi Acara di akun Anda mencapai batas konkurensi maksimum 1.000, dan mengalami pembatasan.
Contoh sebelumnya dianggap hanya konkurensi yang disediakan. Dalam praktiknya, Anda dapat mengatur konkurensi yang disediakan dan konkurensi cadangan pada Fungsi Acara. Anda dapat melakukan ini jika Anda memiliki Fungsi Acara yang menangani beban pemanggilan 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 cadangan untuk menangani lonjakan akhir pekan. Pertimbangkan diagram berikut:
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:
-
Pada
t1,function-orangemulai menerima permintaan. Karena Lambda memiliki 200 instance lingkungan eksekusi yang telah diinisialisasi sebelumnya,function-orangesiap untuk pemanggilan segera. -
Di
t2,function-orangemenggunakan semua konkurensi yang disediakan.function-orangedapat terus melayani permintaan menggunakan konkurensi cadangan, tetapi permintaan ini mungkin mengalami latensi awal yang dingin. -
Pada
t3,function-orangemencapai 400 permintaan bersamaan. Akibatnya,function-orangemenggunakan semua konkurensi yang dicadangkan. Karenafunction-orangetidak dapat menggunakan konkurensi tanpa syarat, permintaan mulai melambat. -
Pada
t4,function-orangemulai menerima lebih sedikit permintaan, dan tidak lagi throttle. -
Pada
t5,function-orangeturun ke 200 permintaan bersamaan, sehingga semua permintaan kembali dapat menggunakan konkurensi yang disediakan (yaitu, tidak ada latensi start dingin).
Konkurensi cadangan dan 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 Peristiwa lainnya. Mengkonfigurasi konkurensi yang disediakan menimbulkan biaya ke Anda. Akun AWS
catatan
Jika jumlah konkurensi yang disediakan pada versi dan alias Fungsi Acara ditambahkan ke konkurensi cadangan Fungsi Acara, maka semua pemanggilan berjalan pada konkurensi yang disediakan. Konfigurasi ini juga memiliki efek membatasi versi Event Function ($LATEST) yang tidak dipublikasikan, yang mencegahnya mengeksekusi. Anda tidak dapat mengalokasikan lebih banyak konkurensi yang disediakan daripada konkurensi cadangan untuk Fungsi Peristiwa.
Untuk mengelola setelan konkurensi yang disediakan untuk Fungsi Acara Anda, lihat. Mengkonfigurasi konkurensi yang disediakan untuk Fungsi Peristiwa 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 Acara, Lambda dapat menyediakan hingga 6.000 lingkungan eksekusi setiap menit, terlepas dari itu. Wilayah AWS Ini persis sama dengan tingkat penskalaan konkurensi untuk Fungsi Acara.
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 yang disediakan |
|---|---|---|
|
Definisi |
Jumlah maksimum instance lingkungan eksekusi untuk Fungsi Acara Anda. |
Tetapkan jumlah instance lingkungan eksekusi yang telah disediakan sebelumnya untuk Fungsi Acara Anda. |
|
Perilaku penyediaan |
Lambda menyediakan instans baru berdasarkan permintaan. |
Instans pra-ketentuan Lambda (yaitu, sebelum Fungsi Acara Anda mulai menerima permintaan). |
|
Perilaku awal dingin |
Latensi start dingin dimungkinkan, karena Lambda harus membuat instance baru sesuai permintaan. |
Latensi awal dingin tidak dimungkinkan, karena Lambda tidak harus membuat instance sesuai permintaan. |
|
Perilaku melambat |
Fungsi Peristiwa dibatasi ketika batas konkurensi cadangan tercapai. |
Jika konkurensi cadangan tidak disetel: Fungsi Acara menggunakan konkurensi tanpa syarat saat batas konkurensi yang disediakan tercapai. Jika set konkurensi cadangan: Fungsi Peristiwa dibatasi saat batas konkurensi cadangan tercapai. |
|
Perilaku default jika tidak disetel |
Fungsi Acara menggunakan konkurensi tanpa syarat yang tersedia di akun Anda. |
Lambda tidak menyediakan instans apa pun terlebih dahulu. Sebaliknya, jika konkurensi cadangan tidak disetel: Fungsi Acara menggunakan konkurensi tanpa syarat yang tersedia di akun Anda. Jika set konkurensi cadangan: Fungsi Acara menggunakan konkurensi cadangan. |
|
Harga |
Tidak ada biaya tambahan. |
Mengalami 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 Acara yang memiliki durasi permintaan rata-rata kurang dari 100 ms.
Di semua Fungsi Acara 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 Acara di akun Anda dapat menangani maksimum 10.000 permintaan per detik.
Misalnya, pertimbangkan Fungsi Acara dengan durasi permintaan rata-rata 50 ms. Pada 20.000 permintaan per detik, inilah konkurensi Fungsi Acara ini:
Concurrency = (20,000 requests/second) * (0.05 second/request) = 1,000
Berdasarkan hasil ini, Anda mungkin berharap bahwa batas konkurensi akun 1.000 cukup untuk menangani beban ini. Namun, karena batas 10.000 permintaan per detik, Fungsi Acara Anda hanya dapat menangani 10.000 permintaan per detik dari total 20.000 permintaan. Fungsi Acara ini mengalami pelambatan.
Pelajarannya adalah Anda harus mempertimbangkan konkurensi dan permintaan per detik saat mengonfigurasi pengaturan konkurensi untuk Fungsi Acara Anda. Dalam hal ini, Anda perlu meminta peningkatan batas konkurensi akun menjadi 2.000, karena ini akan meningkatkan total permintaan per batas 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 setiap lingkungan eksekusi individu, Lambda hanya mempertimbangkan keseluruhan konkurensi dan permintaan keseluruhan per detik saat menghitung kuota Anda.
Misalkan Anda memiliki Fungsi Acara yang membutuhkan, rata-rata, 20 ms untuk dijalankan. Selama beban puncak, Anda mengamati 30.000 permintaan per detik. Apa konkurensi Fungsi Acara Anda selama beban puncak?
Durasi Fungsi Acara 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 per detik yang masuk. Untuk sepenuhnya mengakomodasi 30.000 permintaan, Anda perlu meminta peningkatan 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 Acara sesuai permintaan sinkron, Fungsi Peristiwa 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 Acara 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 Acara yang memiliki alokasi konkurensi yang disediakan 10. Fungsi Peristiwa ini tumpah 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 Peristiwa di Wilayah. Kuota ini ada pada dua tingkatan:
-
Pada tingkat akun, Fungsi Acara 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 Acara Anda secara default. Terlepas dari total batas konkurensi akun Anda, Lambda selalu mencadangkan 100 unit konkurensi untuk Fungsi Acara 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.
-
Pada tingkat akun dan tingkat fungsi, Lambda juga memberlakukan batas permintaan per detik sebesar 10 kali kuota konkurensi yang sesuai. Misalnya, ini berlaku untuk konkurensi tingkat akun, Fungsi Acara menggunakan konkurensi sesuai permintaan, Fungsi Acara menggunakan konkurensi yang ditentukan, dan perilaku penskalaan konkurensi. 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 ke Fungsi Acara Anda.
Saat Fungsi Acara 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 Acara 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 Acara Anda.
Di masing-masing Wilayah AWS, dan untuk setiap Fungsi Acara, tingkat penskalaan konkurensi Anda adalah 1.000 instance 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, ke 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 Acara di akun Anda dapat menskalakan secara independen dari Fungsi Acara lainnya.
Untuk informasi selengkapnya tentang perilaku penskalaan, lihatPerilaku penskalaan Fungsi Acara.