Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Siklus hidup lingkungan eksekusi
Lingkungan eksekusi adalah instance komputasi terisolasi yang menjalankan server HTTP Anda. AWS Lambda menciptakan lingkungan eksekusi untuk Fungsi Web Lambda Anda saat lalu lintas tiba. Ini merutekan permintaan ke lingkungan aktif dan menghapus lingkungan yang tidak lagi diperlukan. Memahami siklus hidup ini membantu Anda mengoptimalkan kinerja startup dan menulis kode yang menangani inisialisasi dan shutdown dengan benar.
Fase siklus hidup
Setiap lingkungan eksekusi bergerak melalui tahapan berikut:
| Fase | Apa yang terjadi | Permintaan penanganan |
|---|---|---|
| Inisialisasi | Lambda memuat kode Anda, menyiapkan runtime, dan memulai proses server HTTP Anda. Server Anda harus mulai mendengarkan alamat AWS_LAMBDA_HTTP_ENDPOINT dalam waktu 10 detik. |
Lingkungan tidak dapat melayani permintaan selama inisialisasi. |
| Siap | Server HTTP Anda mendengarkan dan lingkungan tersedia untuk menerima permintaan. Lambda merutekan permintaan masuk ke lingkungan ini. | Lingkungan menerima permintaan hingga maxConcurrencyPerEnvironment batasnya. |
| Matikan | Lambda berhenti merutekan permintaan baru ke lingkungan, memungkinkan permintaan dalam penerbangan selesai dengan upaya terbaik, mengirimSIGTERM, dan kemudian mengakhiri lingkungan. |
Tidak ada permintaan baru yang diarahkan ke lingkungan. In-flight permintaan dapat dilanjutkan, tetapi penyelesaian tidak dijamin. Setelah ituSIGTERM, proses memiliki waktu hingga 1 detik untuk menyelesaikan pembersihan. Keadaan proses hilang. |
Inisialisasi (start dingin)
Ketika Lambda menciptakan lingkungan eksekusi baru, fase inisialisasi mencakup langkah-langkah berikut:
-
Lambda memuat kode dari paket penerapan.zip Anda.
-
Lambda menyiapkan lingkungan runtime (termasuk Node.js dan variabel lingkungan Anda).
-
Lambda memulai proses aplikasi Anda.
-
Server HTTP Anda mulai mendengarkan di host dan port yang ditentukan oleh variabel
AWS_LAMBDA_HTTP_ENDPOINTlingkungan. Itu harus mulai mendengarkan dalam 10 detik. -
Lambda mendeteksi bahwa server Anda mendengarkan dan menandai lingkungan sebagai siap.
Awal yang dingin terjadi ketika Lambda harus membuat lingkungan baru untuk menangani permintaan karena tidak ada lingkungan yang tersedia. Permintaan pertama setelah cold start mengalami latensi tambahan dari fase inisialisasi. Permintaan selanjutnya ke lingkungan yang sama tidak menimbulkan biaya ini.
Untuk mengurangi dampak awal dingin:
-
Minimalkan ukuran paket penerapan Anda. Paket yang lebih kecil memuat lebih cepat.
-
Kurangi waktu startup server. Tunda inisialisasi berat (seperti memuat file data besar) setelah server mulai mendengarkan. Lambda merutekan permintaan ke lingkungan segera setelah server mendengarkan, jadi buat penangan permintaan yang bergantung pada pekerjaan yang ditangguhkan menunggu sampai selesai, misalnya dengan menunggu janji bersama.
-
Gunakan inisialisasi malas untuk koneksi database dan klien layanan eksternal. Buat koneksi pada permintaan pertama daripada saat startup.
Scale-down dan shutdown
Lambda memantau pemanfaatan lingkungan titik akhir Anda dan menghapus lingkungan yang tidak dibutuhkan, misalnya saat lalu lintas menurun. Sebelum menghapus lingkungan, Lambda menggunakan urutan shutdown berikut:
-
Lambda berhenti merutekan permintaan baru ke lingkungan.
-
Lambda memungkinkan permintaan dalam penerbangan diselesaikan dengan upaya terbaik.
-
Lambda mengirim.
SIGTERMProses ini memiliki waktu hingga 1 detik untuk menyelesaikan pembersihan sebelum Lambda menghentikannya dan menghilangkan lingkungan.
Ketika tidak ada lalu lintas, Lambda menskalakan Fungsi Web Anda ke lingkungan nol. Permintaan berikutnya setelah periode skala-ke-nol memicu awal dingin yang baru.
Jika aplikasi Anda perlu melakukan pembersihan selama shutdown, tangani. SIGTERM Pembersihan harus selesai dalam 1 detik. Jangan mengandalkan callback shutdown yang dijalankan, karena Lambda tidak dapat menjamin shutdown yang anggun di semua mode kegagalan, misalnya kegagalan perangkat keras yang mendasarinya.
Contoh berikut menanganiSIGTERM:
process.on('SIGTERM', () => { // Finish short cleanup, such as flushing buffered logs, within 1 second. process.exit(0); });
Penggunaan kembali lingkungan
Lambda menggunakan kembali lingkungan eksekusi di beberapa permintaan untuk menghindari start dingin yang berulang. Satu lingkungan dapat melayani ribuan permintaan selama masa pakainya. Ini berarti:
-
Status global tetap ada - Variabel, cache, dan koneksi yang diinisialisasi server Anda saat startup tetap ada di seluruh permintaan. Anda dapat menggunakan ini untuk caching dalam memori atau penyatuan koneksi.
-
Status sistem file tetap ada — File yang ditulis kode Anda ke sistem file lokal (seperti
/tmp) bertahan hingga Lambda menghapus lingkungan. -
Tidak ada jaminan seumur hidup - Lambda dapat menghapus lingkungan kapan saja. Jangan bergantung pada lingkungan yang berlangsung selama durasi tertentu. Pertahankan data penting ke toko eksternal seperti DynamoDB atau Amazon S3.
Penanganan permintaan bersamaan
Setiap lingkungan eksekusi Web Function menangani beberapa permintaan HTTP bersamaan. maxConcurrencyPerEnvironmentPengaturan pada revisi mengontrol jumlah maksimum permintaan simultan per lingkungan.
Karena server Anda menangani beberapa permintaan secara bersamaan, kode Anda harus aman untuk digunakan bersamaan:
-
Jangan menyimpan status per permintaan dalam variabel global. Gunakan variabel cakupan permintaan atau konteks middleware sebagai gantinya.
-
Jaga status bisa berubah bersama, seperti cache atau penghitung, yang Anda modifikasi melintasi batas.
awaitPermintaan interleave pada loop acara. Jika urutan baca-modify-tulis mencakup operasi asinkron, permintaan dalam penerbangan lainnya dapat membaca atau mengubah status sebelum urutan selesai. -
Ketahuilah bahwa Node.js menggunakan loop peristiwa single-threaded. CPU-intensive operasi sinkron memblokir semua permintaan bersamaan di lingkungan itu. Gunakan asinkron I/O dan hindari pemblokiran loop peristiwa.
Untuk informasi selengkapnya tentang pengaturan konkurensi dan pengoptimalan, lihatPerilaku penskalaan untuk Fungsi Web Lambda.