Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menskalakan Instans Terkelola Lambda
Instans Terkelola Lambda tidak berskala saat pemanggilan tiba dan tidak mendukung cold start. Sebaliknya, ia menskalakan secara asinkron menggunakan sinyal konsumsi sumber daya. Instans Terkelola saat ini diskalakan berdasarkan pemanfaatan sumber daya CPU dan saturasi multi-konkurensi.
Perbedaan utama:
-
Lambda (default): Menskalakan ketika tidak ada lingkungan eksekusi bebas untuk menangani pemanggilan masuk (start dingin)
-
Instans Terkelola Lambda: Men skalakan secara asinkron berdasarkan pemanfaatan sumber daya CPU dan saturasi multi-konkurensi lingkungan eksekusi
Jika lalu lintas Anda lebih dari dua kali lipat dalam waktu 5 menit, Anda mungkin melihat pembatasan saat Lambda meningkatkan instans dan lingkungan eksekusi untuk memenuhi permintaan.
Siklus hidup penskalaan
Instans Terkelola Lambda menggunakan arsitektur terdistribusi untuk mengelola penskalaan:
Komponen:
-
Instans Ter kelola - Jalankan di akun Anda di subnet yang Anda berikan
-
Router dan Scaler - Komponen Lambda Bersama yang merutekan pemanggilan dan mengelola penskalaan
-
Agen Lambda - Berjalan pada setiap Instans Terkelola untuk mengelola siklus hidup lingkungan eksekusi dan memantau konsumsi sumber daya
Cara kerjanya:
-
Saat Anda menerbitkan versi fungsi dengan penyedia kapasitas, Lambda meluncurkan Instans Terkelola di akun Anda. Ini meluncurkan tiga secara default untuk ketahanan AZ dan memulai tiga lingkungan eksekusi sebelum menandai versi fungsi Anda AKTIF.
-
Setiap Instans Terkelola dapat menjalankan lingkungan eksekusi untuk beberapa fungsi yang dipetakan ke penyedia kapasitas yang sama.
-
Saat lalu lintas mengalir ke aplikasi Anda, lingkungan eksekusi menghabiskan sumber daya. Agen Lambda memberi tahu Scaler, yang memutuskan apakah akan menskalakan lingkungan eksekusi baru atau Instans Terkelola.
-
Jika Router mencoba mengirim pemanggilan ke lingkungan eksekusi dengan konsumsi sumber daya tinggi, Agen Lambda pada instance tersebut akan memberitahukannya untuk mencoba lagi pada yang lain.
-
Saat lalu lintas berkurang, Agen Lambda memberi tahu Scaler, yang membuat keputusan untuk mengurangi lingkungan eksekusi dan skala dalam Instans Terkelola.
Menyesuaikan perilaku penskalaan
Anda dapat menyesuaikan perilaku penskalaan Instans Terkelola melalui lima kontrol:
Kontrol tingkat fungsi
1. Memori fungsi dan vCPU
Pilih ukuran memori dan alokasi vCPU untuk fungsi Anda. Ukuran fungsi terkecil yang didukung adalah 2GB dan 1vCPU.
Pertimbangan:
-
Pilih pengaturan memori dan vCPU yang mendukung eksekusi multi-bersamaan dari fungsi Anda
-
Anda tidak dapat mengonfigurasi fungsi dengan kurang dari 1 vCPU karena fungsi yang berjalan pada Instans Terkelola harus mendukung beban kerja multi-bersamaan
-
Anda tidak dapat memilih kurang dari 2GB karena ini cocok dengan rasio memori 2 banding 1 terhadap vCPU dari instance c, yang memiliki rasio terendah
-
Untuk aplikasi Python, Anda mungkin perlu memilih rasio memori yang lebih tinggi terhadap vCPU, seperti 4 banding 1 atau 8 banding 1, karena cara Python menangani multi-konkurensi
-
Jika Anda menjalankan CPU-intensive operasi atau melakukan sedikit IO, Anda harus memilih lebih dari satu vCPU
2. Konkurensi maksimum
Tetapkan konkurensi maksimum per lingkungan eksekusi.
Perilaku default: Lambda memilih default masuk akal yang menyeimbangkan konsumsi sumber daya dan throughput yang berfungsi untuk berbagai aplikasi.
Pedoman penyesuaian:
-
Tingkatkan konkurensi: Jika pemanggilan fungsi Anda menggunakan CPU yang sangat sedikit, Anda dapat meningkatkan konkurensi maksimum hingga maksimum 64 per vCPU
-
Kurangi konkurensi: Jika aplikasi Anda mengkonsumsi sejumlah besar memori dan CPU yang sangat sedikit, Anda dapat mengurangi konkurensi maksimum Anda
Penting: Karena Instans Terkelola Lambda dimaksudkan untuk aplikasi multi-serentak, lingkungan eksekusi dengan konkurensi yang sangat rendah mungkin mengalami pembatasan saat penskalaan. Ketika pemanggilan tiba di lingkungan eksekusi yang telah mencapai batas konkurensinya, Lambda merutekan pemanggilan tersebut ke tempat lain dan meningkatkan lingkungan eksekusi baru untuk menangani beban. Untuk mengidentifikasi batasan sumber daya mana yang menyebabkan throttle, pantau metrik alasan throttle (ConcurrencyThrottles,, CPUThrottlesMemoryThrottles, danDiskThrottles) yang dijelaskan di. Jenis metrik untuk fungsi Lambda
3. Lingkungan eksekusi per fungsi
Tetapkan jumlah minimum dan maksimum lingkungan eksekusi untuk fungsi Anda.
Perilaku default: Minimum default adalah 3 lingkungan eksekusi di seluruh Zona Ketersediaan, tanpa maksimum default. Anda dapat mengganti kedua nilai setelah fungsi dibuat.
Pedoman penyesuaian:
-
Tetapkan minimum: Menye diakan kapasitas untuk lalu lintas dasar dan kurangi throttle selama semburan mendadak. Nilai di bawah 3 mengurangi redundansi Zona Ketersediaan.
-
Tetapkan maksimum: Bat asi jumlah lingkungan eksekusi untuk mengontrol skala keluar dan mencegah masalah tetangga yang bising saat beberapa fungsi berbagi Penyedia Kapasitas.
-
Nonaktifkan fungsi: Setel minimum dan maksimum ke 0 untuk menonaktifkan fungsi tanpa menghapusnya.
Contoh:
aws lambda put-function-scaling-config \ --function-name my-lmi-function \ --qualifier '$LATEST.PUBLISHED' \ --function-scaling-config MinExecutionEnvironments=5,MaxExecutionEnvironments=20 \ --region us-east-1
Catatan penting:
-
Lingkup kualifikasi: Konfigurasi ini berlaku pada tingkat fungsi untuk setiap ARN yang memenuhi syarat. Saat diaktifkan
$LATEST.PUBLISHED, konfigurasi menyebar ke$LATEST.PUBLISHEDversi mendatang. Saat diatur pada versi tertentu, versi yang baru diterbitkan kembali ke nilai default. -
Konfigurasi berpasangan: Anda harus menyetel nilai minimum dan maksimum bersama-sama. Setiap pengaturan yang tidak ditentukan kembali ke nilai defaultnya. Nilai yang valid untuk keduanya
MinExecutionEnvironmentsdan berMaxExecutionEnvironmentskisar dari 0 hingga 15000. Minimal 0 hanya berlaku jika maksimum juga 0. -
Implikasi biaya: Pen onaktifan fungsi berlaku pada tingkat versi fungsi. Lambda mengakhiri instance EC2 yang mendasarinya setelah tidak memiliki lingkungan eksekusi aktif, dan biaya instans berlanjut hingga penghentian selesai (biasanya dalam beberapa menit).
Kontrol tingkat penyedia kapasitas
4. Target pemanfaatan sumber daya
Pilih target Anda sendiri untuk konsumsi pemanfaatan CPU.
Perilaku default: Lambda mempertahankan headroom yang cukup agar lalu lintas Anda berlipat ganda dalam waktu 5 menit tanpa pembatasan.
Opsi pengoptimalan:
-
Jika beban kerja Anda sangat stabil atau jika aplikasi Anda tidak sensitif terhadap throttle, Anda dapat menetapkan target ke tingkat tinggi untuk mencapai pemanfaatan yang lebih tinggi dan biaya yang lebih rendah
-
Jika Anda ingin mempertahankan ruang kepala untuk semburan lalu lintas, Anda dapat menetapkan target sumber daya ke tingkat rendah, yang membutuhkan lebih banyak kapasitas
5. Pemilihan tipe instans
Tetapkan jenis instans yang diizinkan atau dikecualikan.
Perilaku default: Lambda memilih jenis instans terbaik untuk beban kerja Anda. Dianjurkan untuk membiarkan Instans Terkelola Lambda memilih jenis instans, karena membatasi jumlah jenis instans yang mungkin dapat mengakibatkan ketersediaan yang lebih rendah.
Konfigurasi khusus:
-
Persyaratan perangkat keras khusus: Tet apkan jenis instans yang diizinkan ke daftar instance yang kompatibel. Misalnya, jika Anda memiliki aplikasi yang membutuhkan bandwidth jaringan tinggi, Anda dapat memilih beberapa jenis n instance
-
Pengoptimalan biaya: Untuk lingkungan pengujian atau pengembangan, Anda dapat memilih jenis instans yang lebih kecil, seperti jenis instans m7a.large
Penskalaan terjadwal
Gunakan Amazon EventBridge Scheduler untuk menyesuaikan lingkungan eksekusi minimum dan maksimum fungsi Anda pada jadwal berulang atau satu kali. Ini berguna untuk pola lalu lintas yang dapat diprediksi, seperti meningkatkan skala sebelum jam sibuk dan menurunkan skala selama jam di luar jam sibuk.
Konfigurasi penjadwal:
-
Buat peran eksekusi EventBridge Scheduler atau gunakan peran yang ada yang memberikan izin untuk memanggil
lambda:PutFunctionScalingConfigfungsi target Anda. -
Buat jadwal menggunakan ekspresi cron atau rate, menargetkan
PutFunctionScalingConfigAPI sebagai target universal. TentukanMaxExecutionEnvironmentsnilai baruMinExecutionEnvironmentsdan dalam muatan Input.
Contoh 1: Skala untuk menangani lalu lintas puncak yang direncanakan
Buat dua jadwal untuk meningkatkan skala sebelum jam sibuk dan kurangi setelahnya. Setiap jadwal menarget PutFunctionScalingConfig kan API dengan pembaruan MinExecutionEnvironments dan MaxExecutionEnvironments nilai.
Tingkatkan skala pada pukul 8:00 UTC (min=100, maks=1000):
aws scheduler create-schedule \ --name "ScaleUpLambdaManagedInstances" \ --schedule-expression "cron(0 8 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 100, \"MaxExecutionEnvironments\": 1000}}" }'
Menurunkan skala pada pukul 18:00 UTC (min=5, maks=20):
aws scheduler create-schedule \ --name "ScaleDownLambdaManagedInstances" \ --schedule-expression "cron(0 18 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 5, \"MaxExecutionEnvironments\": 20}}" }'
Contoh 2: Nonaktifkan selama jam di luar jam sibuk dan aktifkan kembali
Menyetel keduanya MinExecutionEnvironments dan MaxExecutionEnvironments ke 0 menonaktifkan versi fungsi tanpa menghapusnya. Fungsi yang dinonaktifkan tidak secara otomatis meningkatkan kembali dengan lalu lintas. Anda harus secara eksplisit mengaktifkannya kembali dengan menetapkan nilai bukan nol melalui tindakan terjadwal lainnya.
Nonaktifkan pada 10:00 PM UTC (min=0, max=0):
aws scheduler create-schedule \ --name "DeactivateLambdaManagedInstances" \ --schedule-expression "cron(0 22 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 0, \"MaxExecutionEnvironments\": 0}}" }'
Aktifkan kembali pada pukul 7:00 UTC (min=10, maks=20):
aws scheduler create-schedule \ --name "ReactivateLambdaManagedInstances" \ --schedule-expression "cron(0 7 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 10, \"MaxExecutionEnvironments\": 20}}" }'
Pedoman penyesuaian:
-
Untuk beban kerja dengan puncak yang dapat diprediksi, buat beberapa jadwal agar sesuai dengan pola lalu lintas Anda: satu untuk meningkatkan fungsi Anda sebelum jam sibuk, dan satu lagi untuk menurunkan skala setelah jam sibuk. Setiap jadwal mengikuti pola yang sama dengan pembaruan
MinExecutionEnvironmentsdanMaxExecutionEnvironmentsnilai. -
Penskalaan terjadwal menyesuaikan lantai dan plafon lingkungan eksekusi yang disediakan, tetapi penskalaan aktual antara min dan max masih merespons pemanfaatan CPU dan saturasi konkurensi.
-
Jika lalu lintas Anda lebih dari dua kali lipat dalam waktu 5 menit setelah peningkatan skala yang dijadwalkan, Anda mungkin masih mengalami pembatasan saat kapasitas disediakan.
-
Saat menskalakan ke nol untuk menonaktifkan fungsi, ingatlah bahwa reaktivasi memerlukan
PutFunctionScalingConfigpanggilan eksplisit dengan nilai bukan nol.
Langkah selanjutnya
-
Pelajari tentang penyedia kapasitas untuk Instans Terkelola Lambda
-
Tinjau panduan khusus runtime untuk menangani multi-konkurensi
-
Konfigurasikan konektivitas VPC untuk penyedia kapasitas Anda
-
Memantau metrik penskalaan untuk mengoptimalkan perilaku penskalaan