Kebijakan penskalaan berdasarkan Amazon SQS - EC2Auto Scaling Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Kebijakan penskalaan berdasarkan Amazon SQS

penting

Informasi dan langkah-langkah berikut menunjukkan cara menghitung backlog SQS antrean Amazon per instance menggunakan atribut ApproximateNumberOfMessages antrian sebelum mempublikasikannya sebagai metrik khusus. CloudWatch Namun, Anda sekarang dapat menghemat biaya dan upaya untuk menerbitkan metrik Anda sendiri dengan menggunakan matematika metrik. Untuk informasi selengkapnya, lihat Buat kebijakan penskalaan pelacakan target menggunakan matematika metrik.

Bagian ini menunjukkan cara menskalakan grup Auto Scaling sebagai respons terhadap perubahan pemuatan sistem dalam antrian Amazon Simple Queue Service (AmazonSQS). Untuk mempelajari selengkapnya tentang cara menggunakan AmazonSQS, lihat Panduan Pengembang Layanan Antrian Sederhana Amazon.

Ada beberapa skenario di mana Anda mungkin berpikir tentang penskalaan sebagai respons terhadap aktivitas dalam SQS antrian Amazon. Misalnya, kita asumsikan Anda memiliki aplikasi web yang memungkinkan pengguna mengunggah gambar dan menggunakannya secara online. Dalam skenario ini, setiap gambar perlu mengubah ukuran dan mengenkodekannya sebelum dapat diterbitkan. Aplikasi ini berjalan pada EC2 instance dalam grup Auto Scaling, dan dikonfigurasi untuk menangani kecepatan upload tipikal Anda. Instance yang tidak sehat dihentikan dan diganti untuk memelihara tingkat instance saat ini setiap saat. Aplikasi ini menempatkan data bitmap mentah dari gambar dalam SQS antrian untuk diproses. Aplikasi ini memproses gambar dan menerbitkan gambar yang diproses di mana gambar tersebut dapat dilihat oleh pengguna. Arsitektur untuk skenario ini berfungsi dengan baik jika jumlah pengunggahan gambar tidak bervariasi dari waktu ke waktu. Tetapi jika jumlah unggahan berubah dari waktu ke waktu, Anda dapat mempertimbangkan menggunakan penskalaan dinamis untuk menskalakan kapasitas grup Auto Scaling Anda.

Gunakan pelacakan target dengan metrik yang tepat

Jika Anda menggunakan kebijakan penskalaan pelacakan target berdasarkan metrik SQS antrian Amazon khusus, penskalaan dinamis dapat menyesuaikan dengan kurva permintaan aplikasi Anda secara lebih efektif. Untuk informasi selengkapnya tentang memilih metrik untuk pelacakan target, lihat Pilih metrik.

Masalah dengan menggunakan SQS metrik CloudWatch Amazon seperti ApproximateNumberOfMessagesVisible untuk pelacakan target adalah bahwa jumlah pesan dalam antrian mungkin tidak berubah secara proporsional dengan ukuran grup Auto Scaling yang memproses pesan dari antrian. Itu karena jumlah pesan dalam SQS antrian Anda tidak hanya menentukan jumlah instance yang diperlukan. Jumlah instance dalam grup Auto Scaling Anda dapat didorong oleh beberapa faktor, termasuk berapa lama waktu yang diperlukan untuk memproses pesan dan jumlah latensi yang dapat diterima (penundaan antrean).

Solusinya adalah menggunakan metrik backlog per instance dengan nilai target menjadi backlog yang dapat diterima per instance untuk dipertahankan. Anda dapat menghitung angka-angka ini sebagai berikut:

  • Backlog per instance: Untuk menghitung backlog per instance, mulailah dengan atribut ApproximateNumberOfMessages antrian untuk menentukan panjang SQS antrian (jumlah pesan yang tersedia untuk diambil dari antrian). Bagi jumlahnya berdasarkan kapasitas berjalan fleet, yang untuk grup Auto Scaling adalah jumlah instance dalam status InService, untuk mendapatkan backlog per instance.

  • Backlog yang dapat diterima per instance: Untuk menghitung nilai target Anda, tentukan terlebih dahulu apa yang dapat diterima aplikasi Anda dalam hal latensi. Kemudian, ambil nilai latensi yang dapat diterima dan bagi dengan waktu rata-rata yang dibutuhkan sebuah EC2 instance untuk memproses pesan.

Sebagai contoh, katakanlah Anda saat ini memiliki grup Auto Scaling dengan 10 instance dan jumlah pesan yang terlihat dalam antrian () ApproximateNumberOfMessages adalah 1500. Jika waktu pemrosesan rata-rata adalah 0,1 detik untuk setiap pesan dan latensi terpanjang yang dapat diterima adalah 10 detik, maka backlog yang dapat diterima per instance adalah 10/0,1, yang sama dengan 100 pesan. Ini berarti bahwa 100 adalah nilai target untuk kebijakan pelacakan target Anda. Ketika backlog per instance mencapai nilai target, peristiwa scale-out akan terjadi. Karena backlog per instance sudah 150 pesan (1500 pesan/10 instance), grup Anda menskalakan, dan skalanya menjadi lima instance untuk mempertahankan proporsi dengan nilai target.

Prosedur berikut mendemonstrasikan cara mempublikasikan metrik khusus dan membuat kebijakan penskalaan pelacakan target yang mengonfigurasi grup Auto Scaling Anda ke skala berdasarkan perhitungan ini.

penting

Ingat, untuk mengurangi biaya, gunakan matematika metrik sebagai gantinya. Untuk informasi selengkapnya, lihat Buat kebijakan penskalaan pelacakan target menggunakan matematika metrik.

Ada tiga bagian utama untuk konfigurasi ini:

  • Grup Auto Scaling untuk mengelola EC2 instance untuk tujuan memproses pesan dari antrian. SQS

  • Metrik khusus untuk dikirim ke Amazon CloudWatch yang mengukur jumlah pesan dalam antrian per EC2 instance di grup Auto Scaling.

  • Kebijakan pelacakan target yang mengonfigurasi grup Auto Scaling Anda untuk menskalakan berdasarkan metrik kustom dan nilai target yang ditetapkan. CloudWatch alarm memanggil kebijakan penskalaan.

Diagram berikut menggambarkan arsitektur konfigurasi ini.

Amazon EC2 Auto Scaling menggunakan diagram arsitektur antrian

Batasan dan prasyarat

Untuk menggunakan konfigurasi ini, Anda perlu mengetahui batasan berikut:

  • Anda harus menggunakan AWS CLI atau SDK untuk mempublikasikan metrik kustom Anda ke CloudWatch. Anda kemudian dapat memantau metrik Anda dengan AWS Management Console.

  • Konsol EC2 Auto Scaling Amazon tidak mendukung kebijakan penskalaan pelacakan target yang menggunakan metrik khusus. Anda harus menggunakan AWS CLI atau SDK untuk menentukan metrik kustom untuk kebijakan penskalaan Anda.

Bagian berikut mengarahkan Anda untuk menggunakan AWS CLI untuk tugas-tugas yang perlu Anda lakukan. Misalnya, untuk mendapatkan data metrik yang mencerminkan penggunaan antrian saat ini, Anda menggunakan SQS get-queue-attributesperintah. Pastikan Anda telah CLI menginstal dan mengkonfigurasi.

Sebelum Anda mulai, Anda harus memiliki SQS antrian Amazon untuk digunakan. Bagian berikut mengasumsikan bahwa Anda sudah memiliki antrian (standar atauFIFO), grup Auto Scaling, EC2 dan instance yang menjalankan aplikasi yang menggunakan antrian. Untuk informasi selengkapnya tentang AmazonSQS, lihat Panduan Pengembang Layanan Antrian Sederhana Amazon.

Amazon SQS dan perlindungan penskalaan instans

Pesan yang belum diproses pada saat instance dihentikan dikembalikan ke SQS antrian di mana mereka dapat diproses oleh instance lain yang masih berjalan. Untuk aplikasi yang menjalankan tugas yang berjalan lama, Anda dapat menggunakan perlindungan skala masuk instans secara opsional untuk mengontrol pekerja antrian mana yang dihentikan saat grup Auto Scaling Anda masuk.

Pseudocode berikut menunjukkan salah satu cara untuk melindungi proses pekerja berbasis antrian yang berjalan lama dari penghentian skala.

while (true) { SetInstanceProtection(False); Work = GetNextWorkUnit(); SetInstanceProtection(True); ProcessWorkUnit(Work); SetInstanceProtection(False); }

Untuk informasi selengkapnya, lihat Rancang aplikasi Anda untuk menangani penghentian instans dengan anggun.