View a markdown version of this page

Menskalakan Instans Terkelola Lambda - AWS Lambda

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 menskalakan saat pemanggilan tiba dan tidak mendukung start dingin. Sebaliknya, ia menskalakan secara asinkron menggunakan sinyal konsumsi sumber daya. Instans Terkelola saat ini menskalakan berdasarkan pemanfaatan sumber daya CPU dan saturasi multi-konkurensi.

Perbedaan utama:

  • Lambda (default): Skala saat tidak ada lingkungan eksekusi gratis untuk menangani pemanggilan masuk (start dingin)

  • Instans Terkelola Lambda: Menimbang secara asinkron berdasarkan pemanfaatan sumber daya CPU dan saturasi multi-konkurensi dari lingkungan eksekusi

Jika lalu lintas Anda lebih dari dua kali lipat dalam 5 menit, Anda mungkin melihat pembatasan saat Lambda meningkatkan instance dan lingkungan eksekusi untuk memenuhi permintaan.

Siklus hidup penskalaan

Instans Terkelola Lambda menggunakan arsitektur terdistribusi untuk mengelola penskalaan:

Komponen:

  • Instans Terkelola - 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:

  1. Saat Anda memublikasikan 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.

  2. Setiap Instans Terkelola dapat menjalankan lingkungan eksekusi untuk beberapa fungsi yang dipetakan ke penyedia kapasitas yang sama.

  3. Saat lalu lintas mengalir ke aplikasi Anda, lingkungan eksekusi menggunakan sumber daya. Agen Lambda memberi tahu Scaler, yang memutuskan apakah akan menskalakan lingkungan eksekusi baru atau Instans Terkelola.

  4. Jika Router mencoba mengirim permintaan ke lingkungan eksekusi dengan konsumsi sumber daya yang tinggi, Agen Lambda pada instance itu memberitahukannya untuk mencoba lagi yang lain.

  5. Saat lalu lintas menurun, Agen Lambda memberi tahu Scaler, yang membuat keputusan untuk mengurangi lingkungan eksekusi dan menskalakan di 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 akan mendukung eksekusi multi-konkuren fungsi Anda

  • Anda tidak dapat mengonfigurasi fungsi dengan kurang dari 1 vCPU karena fungsi yang berjalan pada Instans Terkelola harus mendukung beban kerja multi-konkuren

  • 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 yang masuk akal yang menyeimbangkan konsumsi sumber daya dan throughput yang berfungsi untuk berbagai macam 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 sangat sedikit CPU, Anda dapat mengurangi konkurensi maksimum Anda

Penting: Karena Instans Terkelola Lambda dimaksudkan untuk aplikasi multi-konkuren, lingkungan eksekusi dengan konkurensi yang sangat rendah mungkin mengalami pembatasan saat penskalaan.

3. Lingkungan eksekusi per fungsi

Tetapkan jumlah minimum dan maksimum lingkungan eksekusi untuk fungsi Anda.

Perilaku default: Lambda mempertahankan minimal 3 lingkungan eksekusi default untuk memastikan ketersediaan tinggi di seluruh Availability Zone.

Pedoman penyesuaian:

  • Tetapkan minimum: Kapasitas penyediaan untuk lalu lintas dasar dan kurangi throttle selama semburan mendadak.

  • Setel maksimum: Batasi jumlah lingkungan eksekusi untuk mengontrol penskalaan dan mencegah masalah tetangga yang bising saat beberapa fungsi berbagi Penyedia Kapasitas.

  • Nonaktifkan fungsi: Atur 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. Ketika diatur$LATEST.PUBLISHED, konfigurasi menyebar ke $LATEST.PUBLISHED versi future. Saat disetel 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 MinExecutionEnvironments dan MaxExecutionEnvironments berkisar dari 0 hingga 15000.

Kontrol tingkat penyedia kapasitas

4. Target pemanfaatan sumber daya

Pilih target Anda sendiri untuk konsumsi pemanfaatan CPU.

Perilaku default: Lambda mempertahankan ruang kepala yang cukup untuk lalu lintas Anda berlipat ganda dalam 5 menit tanpa throttle.

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 akan membutuhkan lebih banyak kapasitas

5. Pemilihan tipe instans

Tetapkan jenis instance yang diizinkan atau dikecualikan.

Perilaku default: Lambda memilih jenis instans terbaik untuk beban kerja Anda. Membiarkan Instans Terkelola Lambda memilih jenis instans disarankan, karena membatasi jumlah kemungkinan jenis instans dapat mengakibatkan ketersediaan yang lebih rendah.

Konfigurasi kustom:

  • Persyaratan perangkat keras khusus: Tetapkan jenis instans yang diizinkan ke daftar instance yang kompatibel. Misalnya, jika Anda memiliki aplikasi yang membutuhkan bandwidth jaringan tinggi, Anda dapat memilih beberapa jenis instans n

  • Optimalisasi biaya: Untuk lingkungan pengujian atau pengembangan, Anda dapat memilih jenis instans yang lebih kecil, seperti tipe 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 sebelum jam sibuk dan menurunkan skala selama jam-jam sibuk.

Konfigurasi penjadwal:

  • Buat peran eksekusi EventBridge Scheduler atau gunakan peran yang ada yang memberikan izin untuk memanggil fungsi lambda:PutFunctionScalingConfig target Anda.

  • Buat jadwal menggunakan ekspresi cron atau rate, dengan menargetkan PutFunctionScalingConfig API sebagai target universal. Tentukan yang baru MinExecutionEnvironments dan MaxExecutionEnvironments nilai di Payload input.

Contoh 1: Skala untuk menangani lalu lintas puncak yang direncanakan

Buat dua jadwal untuk ditingkatkan sebelum jam sibuk dan turunkan setelahnya. Setiap jadwal menargetkan PutFunctionScalingConfig API dengan update MinExecutionEnvironments dan MaxExecutionEnvironments nilai.

Skala naik pada 8:00 AM 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}}" }'

Turunkan skala pada 6:00 PM 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 sibuk dan aktifkan kembali

Mengatur keduanya MinExecutionEnvironments dan MaxExecutionEnvironments ke 0 menonaktifkan versi fungsi tanpa menghapusnya. Fungsi yang dinonaktifkan tidak secara otomatis menskalakan cadangan dengan lalu lintas. Anda harus secara eksplisit mengaktifkannya kembali dengan menetapkan nilai bukan nol melalui tindakan terjadwal lainnya.

Nonaktifkan pada pukul 10:00 WIB UTC (min = 0, maks = 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 diperbarui MinExecutionEnvironments dan MaxExecutionEnvironments nilai.

  • Penskalaan terjadwal menyesuaikan lantai dan langit-langit 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 dari peningkatan yang dijadwalkan, Anda mungkin masih mengalami throttle karena kapasitas disediakan.

  • Saat menskalakan ke nol untuk menonaktifkan fungsi, ingatlah bahwa reaktivasi memerlukan PutFunctionScalingConfig panggilan eksplisit dengan nilai bukan nol.

Langkah selanjutnya