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 memberi akun Anda 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
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.
Bagian-bagian
- Memahami dan memvisualisasikan konkurensi
- Menghitung konkurensi untuk suatu fungsi
- Memahami konkurensi cadangan dan konkurensi yang disediakan
- Memahami konkurensi dan permintaan per detik
- Kuota konkurensi
- Mengkonfigurasi konkurensi cadangan untuk suatu fungsi
- Mengkonfigurasi konkurensi yang disediakan untuk suatu fungsi
- Perilaku penskalaan Lambda
- Memantau konkurensi
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.](images/concurrency-1-environment.png)
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.](images/concurrency-2-two-requests.png)
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 menyediakan beberapa lingkungan untuk menangani 10 permintaan](images/concurrency-3-ten-requests.png)
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 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.](images/concurrency-4-animation.gif)
Dengan membekukan animasi sebelumnya pada enam titik waktu yang berbeda, kita mendapatkan diagram berikut:
![Fungsi konkurensi pada enam titik waktu yang berbeda.](images/concurrency-5-animation-summary.png)
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 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
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.](images/concurrency-6-reserved-concurrency.png)
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:
-
Di
t1
, keduanyafunction-orange
danfunction-blue
mulai menerima permintaan. Setiap fungsi mulai menggunakan bagian yang dialokasikan dari unit konkurensi cadangan. -
Di
t2
,function-orange
danfunction-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. -
Pada
t3
,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 bahwafunction-orange
sedang mengalami pelambatan, dan Lambda dapat membatalkan permintaan. -
Pada
t4
,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. -
Pada
t5
, 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 Anda 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. Pemesanan konkurensi dihitung 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.
![Perbandingan konkurensi cadangan dan perilaku konkurensi yang disediakan](images/concurrency-7-reserved-vs-provisioned.png)
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.](images/concurrency-8-provisioned-concurrency.png)
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:
-
Pada
t1
,function-orange
mulai menerima permintaan. Karena Lambda memiliki 400 instance lingkungan eksekusi yang telah diinisialisasi sebelumnya,function-orange
siap untuk pemanggilan segera. -
Pada
t2
,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 tambahanfunction-orange
(tidak ada pembatasan). Lambda harus membuat instance baru untuk melayani permintaan ini, dan fungsi Anda mungkin mengalami latensi start dingin. -
Pada
t3
,function-orange
kembali ke 400 permintaan bersamaan setelah lonjakan lalu lintas singkat. Lambda sekali lagi dapat menangani semua permintaan tanpa latensi start dingin. -
Di
t4
, fungsi di akun Anda mengalami ledakan lalu lintas. Burst ini dapat berasal darifunction-orange
atau fungsi lain di akun Anda. Lambda menggunakan konkurensi tanpa syarat untuk menangani permintaan ini. -
Di
t5
, 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.](images/concurrency-9-reserved-and-provisioned.png)
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-orange
mulai menerima permintaan. Karena Lambda memiliki 200 instance lingkungan eksekusi yang telah diinisialisasi sebelumnya,function-orange
siap untuk pemanggilan segera. -
Di
t2
,function-orange
menggunakan semua konkurensi yang disediakan.function-orange
dapat terus melayani permintaan menggunakan konkurensi cadangan, tetapi permintaan ini mungkin mengalami latensi awal yang dingin. -
Pada
t3
,function-orange
mencapai 400 permintaan bersamaan. Akibatnya,function-orange
menggunakan semua konkurensi yang dicadangkan. Karenafunction-orange
tidak dapat menggunakan konkurensi tanpa syarat, permintaan mulai melambat. -
Pada
t4
,function-orange
mulai menerima lebih sedikit permintaan, dan tidak lagi throttle. -
Pada
t5
,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. |
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 berharap 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 total 20.000 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 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 yang membutuhkan, rata-rata, 20 ms untuk dijalankan. Selama beban puncak, Anda mengamati 30.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 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 on-demand 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 10. Fungsi 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 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.
-
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 yang menggunakan konkurensi sesuai permintaan, fungsi yang 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 } }
ConcurrentExecutions
adalah total kuota konkurensi tingkat akun Anda. UnreservedConcurrentExecutions
adalah 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 (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 di akun Anda dapat menskalakan secara independen dari fungsi lainnya.
Untuk informasi selengkapnya tentang perilaku penskalaan, lihatPerilaku penskalaan Lambda.