Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menskalakan layanan Amazon ECS berdasarkan antrian Amazon SQS
Anda dapat menskalakan layanan Amazon ECS Anda sebagai respons terhadap beban dalam antrian Amazon Simple Queue Service (Amazon SQS). Ini berguna untuk aplikasi asinkron di mana tugas dalam layanan Anda bertindak sebagai pekerja yang menggunakan dan memproses pesan dari antrian. Saat kecepatan pesan masuk berubah, Amazon ECS Service Auto Scaling menambahkan tugas saat antrian menumpuk dan menghapus tugas saat habis. Ini menjaga latensi untuk pesan yang menunggu dalam antrian pada tingkat yang dapat diterima tanpa penyediaan berlebihan.
Gunakan metrik backlog per tugas
Amazon SQS menerbitkan kedalaman antrian ke CloudWatch sebagai ApproximateNumberOfMessagesVisible metrik, yang melaporkan jumlah pesan yang tersedia untuk pengambilan. Kedalaman antrian menunjukkan bahwa ada pekerjaan yang harus dilakukan, tetapi ini bukan metrik yang dapat diandalkan untuk skala secara langsung. Jumlah pesan dalam antrian tidak berubah secara proporsional dengan jumlah tugas yang memprosesnya. Jumlah tugas yang Anda butuhkan juga tergantung pada faktor lain, seperti berapa lama tugas yang dibutuhkan untuk memproses pesan dan jumlah latensi yang dapat diterima (penundaan antrian). Kebijakan pelacakan target yang melacak kedalaman antrian menafsirkan antrian besar sebagai permintaan untuk tugas yang lebih banyak secara proporsional. Hal ini dapat menyebabkan layanan Anda meningkat jauh melampaui apa yang dibutuhkan beban kerja dan meningkatkan biaya.
Sebaliknya, skala pada backlog per tugas: kedalaman antrian dibagi dengan jumlah tugas yang sedang berjalan. Anda menghitung nilai ini dengan CloudWatch ekspresi matematika metrik yang membagi kedalaman antrian dengan jumlah tugas yang sedang berjalan. Backlog per tugas menormalkan kedalaman antrian dengan jumlah tugas yang sedang berjalan. Ini membuatnya sebanding dengan beban pada setiap tugas, sehingga cocok untuk penskalaan.
Tetapkan nilai target Anda ke backlog yang dapat diterima per tugas. Untuk menghitungnya, bagilah latensi yang dapat diterima aplikasi Anda dengan waktu rata-rata yang diperlukan tugas untuk memproses pesan.
Misalnya, jika latensi yang dapat diterima adalah 10 detik dan tugas membutuhkan waktu 0,1 detik untuk memproses pesan, backlog yang dapat diterima per tugas adalah 10 dibagi 0,1, yang sama dengan 100 pesan per tugas. Ini adalah nilai target untuk kebijakan Anda. Jika antrian saat ini menampung 1.500 pesan dan 10 tugas sedang berjalan, backlog per tugas adalah 150 (1.500 dibagi 10), yang melebihi target. Layanan Anda dinaikkan dengan lima tugas untuk mengembalikan backlog per tugas secara proporsional dengan nilai target.
Gunakan matematika metrik untuk menghitung metrik
Dukungan kebijakan pelacakan target Penskalaan Otomatis Aplikasi CloudWatch matematika metrik. Matematika metrik memungkinkan Anda menanyakan beberapa CloudWatch metrik dan gunakan ekspresi matematika untuk membuat deret waktu baru berdasarkan metrik tersebut. Anda menggunakan ekspresi matematika metrik untuk menghitung backlog per tugas secara langsung dalam kebijakan penskalaan. Application Auto Scaling mengevaluasi ekspresi dan mengelola CloudWatch alarm yang memulai aktivitas penskalaan. Untuk informasi lebih lanjut, lihat Gunakan matematika metrik di CloudWatch Panduan Pengguna.
Untuk menghitung backlog per tugas, Anda menggunakan dua berikut ini CloudWatch metrik:
-
ApproximateNumberOfMessagesVisible(Sumstatistik) dariAWS/SQSnamespace, untuk jumlah pesan yang menunggu dalam antrian. -
RunningTaskCount(Averagestatistik) dariECS/ContainerInsightsnamespace, untuk jumlah tugas yang sedang berjalan di layanan Anda. Untuk menggunakan metrik ini, Anda harus mengaktifkan CloudWatch Wawasan Kontainer untuk cluster Anda. Untuk informasi selengkapnya, lihat Pantau wadah Amazon ECS menggunakan Container Insights dengan pengamatan yang ditingkatkan.
Dalam contoh berikut, m1 adalah kedalaman antrian dan m2 adalah jumlah tugas yang sedang berjalan. Ekspresi matematika metrik m1 / m2 menghasilkan backlog per tugas. Penskalaan Otomatis Aplikasi menyesuaikan jumlah tugas dalam layanan Anda untuk menjaga nilai ini pada nilai target Anda.
Gunakan penskalaan langkah untuk kontrol lebih
Kami merekomendasikan pelacakan target untuk sebagian besar beban kerja berbasis antrian karena ini adalah pendekatan yang paling sederhana. Anda menetapkan nilai target tunggal, dan Amazon ECS Service Auto Scaling membuat dan mengelola CloudWatch alarm dan penyesuaian penskalaan untuk Anda.
Gunakan penskalaan langkah saat Anda ingin kontrol penuh atas perilaku penskalaan. Dengan penskalaan langkah, Anda membuatnya sendiri CloudWatch alarm dan tentukan kebijakan scale-out dan scale-in terpisah, masing-masing dengan penyesuaian langkahnya sendiri. Anda menempatkan backlog per ekspresi matematika metrik tugas di alarm, dan mengatur setiap tindakan alarm ke kebijakan yang sesuai. Ini memberi Anda kontrol atas hal-hal berikut:
-
Ukuran setiap langkah penskalaan — Anda dapat menentukan penyesuaian langkah yang menambahkan lebih banyak tugas seiring bertambahnya backlog, sehingga pelanggaran kecil menambahkan beberapa tugas dan pelanggaran besar menambah banyak. Anda dapat menskalakan berdasarkan persentase dari jumlah tugas yang sedang berjalan atau dengan jumlah tugas tetap.
-
Seberapa cepat penskalaan merespons — Anda mengontrol daya tanggap melalui frekuensi penerbitan metrik dan pengaturan evaluasi alarm. Misalnya, Anda dapat menerbitkan metrik antrian resolusi tinggi setiap 10 detik dan mengonfigurasi alarm skala keluar untuk menembus pada satu titik data, sehingga layanan bereaksi terhadap tumpukan yang berkembang lebih cepat daripada yang diizinkan resolusi satu menit default.
-
Perilaku scale-out dan scale-in yang berbeda — Karena scale-out dan scale-in adalah kebijakan dan alarm yang terpisah, Anda dapat bereaksi dengan cepat terhadap tumpukan yang meningkat sambil melakukan penskalaan secara konservatif. Misalnya, Anda dapat meminta backlog untuk tetap rendah selama beberapa menit sebelum menghapus tugas.
Untuk informasi selengkapnya, lihat Gunakan kenaikan yang telah ditentukan berdasarkan CloudWatch alarm untuk menskalakan layanan Amazon ECS.
Melindungi tugas yang sedang memproses pesan
Saat layanan Anda dinaikkan, Amazon ECS Service Auto Scaling dapat menghentikan tugas yang masih memproses pesan. Untuk pekerjaan yang berjalan lama atau tidak berdaya, ini dapat menyebabkan pesan diproses ulang atau kemajuannya hilang. Untuk mencegah hal ini, gunakan perlindungan penskalaan tugas untuk menandai tugas sebagai terlindungi saat sedang melakukan pekerjaan aktif.
Untuk pekerja antrian, sebaiknya tugas melindungi dirinya sendiri melalui titik akhir agen kontainer Amazon ECS. Ketika tugas mulai memproses pesan, ia menetapkan ProtectionEnabled atribut untuk true sehingga Amazon ECS tidak menghentikannya selama acara scale-in. Setelah tugas menyelesaikan pesan, ia menetapkan ProtectionEnabled kepada false sehingga tugas tersebut kembali memenuhi syarat untuk penghentian. Untuk informasi selengkapnya, lihat Lindungi tugas Amazon ECS Anda agar tidak dihentikan oleh peristiwa scale-in.
Pertimbangan
Pertimbangkan hal berikut saat mengonfigurasi penskalaan berbasis antrian untuk layanan Amazon ECS Anda:
-
Karena Application Auto Scaling mengevaluasi ekspresi matematika metrik untuk Anda, Anda tidak perlu menerbitkan metrik khusus atau menjalankan kode tambahan apa pun untuk menghitung backlog per tugas.
-
Yang
RunningTaskCountmetrik hanya tersedia jika CloudWatch Container Insights diaktifkan untuk cluster Anda. Jika tidak, ekspresi matematika metrik tidak memiliki data untuk pembagi dan penskalaan tidak terjadi. -
Pilih nilai target berdasarkan latensi yang diizinkan oleh perjanjian tingkat layanan (SLA) aplikasi Anda. Nilai target yang lebih rendah membuat penundaan antrian lebih pendek tetapi menjalankan lebih banyak tugas. Nilai target yang lebih tinggi mengurangi biaya tetapi meningkatkan waktu menunggu pesan dalam antrian.
-
Pesan yang belum selesai diproses saat tugas dihentikan kembali ke antrian Amazon SQS. Tugas lain yang sedang berjalan dapat memprosesnya jika Anda mengonfigurasi batas waktu visibilitas dengan tepat. Agar tugas tidak dihentikan saat sedang memproses pesan, gunakan perlindungan penskalaan tugas, seperti yang dijelaskan dalam Melindungi tugas yang sedang memproses pesan.
-
Pertimbangan umum untuk Penskalaan Otomatis Layanan Amazon ECS dan pelacakan target juga berlaku untuk penskalaan berbasis antrian.
Konfigurasikan penskalaan berbasis antrian
Langkah-langkah berikut menunjukkan cara membuat kebijakan penskalaan pelacakan target yang menggunakan ekspresi matematika metrik untuk menskalakan layanan Amazon ECS Anda pada backlog per tugas. Anda menggunakan AWS CLI untuk tugas-tugas ini.
-
Konfirmasikan bahwa Anda memiliki izin IAM yang diperlukan untuk membuat dan memperbarui layanan serta mendaftarkan target dan kebijakan penskalaan yang dapat diskalakan. Untuk informasi selengkapnya, lihat Izin IAM diperlukan untuk penskalaan otomatis layanan Amazon ECS.
-
Nyalakan CloudWatch Wawasan Kontainer untuk cluster Anda sehingga
RunningTaskCountMetrik tersedia. Untuk informasi selengkapnya, lihat Pantau wadah Amazon ECS menggunakan Container Insights dengan pengamatan yang ditingkatkan. -
Daftarkan layanan Amazon ECS Anda sebagai target yang dapat diskalakan dengan menggunakan daftar-target yang dapat diskalakan perintah. Dimensi yang dapat diskalakan adalah
ecs:service:DesiredCount.aws application-autoscaling register-scalable-target \ --service-namespace ecs \ --scalable-dimension ecs:service:DesiredCount \ --resource-id service/my-cluster/my-service \ --min-capacity 1 \ --max-capacity 10 -
Menyimpan ekspresi matematika metrik dalam spesifikasi metrik yang disesuaikan dalam file JSON bernama
config.json. Ganti nama antrian, nama cluster, dan nama layanan dengan nilai Anda sendiri, dan aturTargetValueke backlog yang dapat diterima per tugas yang Anda hitung.{ "CustomizedMetricSpecification": { "Metrics": [ { "Label": "Get the queue depth", "Id": "m1", "MetricStat": { "Metric": { "MetricName": "ApproximateNumberOfMessagesVisible", "Namespace": "AWS/SQS", "Dimensions": [ { "Name": "QueueName", "Value": "my-queue" } ] }, "Stat": "Sum" }, "ReturnData": false }, { "Label": "Get the running task count", "Id": "m2", "MetricStat": { "Metric": { "MetricName": "RunningTaskCount", "Namespace": "ECS/ContainerInsights", "Dimensions": [ { "Name": "ClusterName", "Value": "my-cluster" }, { "Name": "ServiceName", "Value": "my-service" } ] }, "Stat": "Average" }, "ReturnData": false }, { "Label": "Calculate the backlog per task", "Id": "e1", "Expression": "m1 / m2", "ReturnData": true } ] }, "TargetValue": 100 } -
Buat kebijakan penskalaan pelacakan target dengan menggunakan kebijakan put-scaling- perintah dengan file JSON sebagai input. Aplikasi Auto Scaling membuat dan mengelola keduanya CloudWatch alarm (satu untuk scale-out dan satu untuk scale-in) yang memanggil kebijakan.
aws application-autoscaling put-scaling-policy \ --policy-name sqs-backlog-target-tracking-policy \ --service-namespace ecs \ --resource-id service/my-cluster/my-service \ --scalable-dimension ecs:service:DesiredCount \ --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration file://config.json
Untuk informasi lebih lanjut tentang kebijakan penskalaan pelacakan target, lihat Kebijakan penskalaan pelacakan target dalam Panduan Pengguna Application Auto Scaling.