Evaluasi pengaturan penskalaan otomatis tabel Anda - Amazon DynamoDB

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

Evaluasi pengaturan penskalaan otomatis tabel Anda

Bagian ini memberikan gambaran umum tentang cara mengevaluasi pengaturan penskalaan otomatis pada tabel DynamoDB Anda. Amazon DynamoDB auto scaling adalah fitur yang mengelola tabel dan throughput GSI indeks sekunder global () berdasarkan lalu lintas aplikasi dan metrik pemanfaatan target Anda. Ini memastikan tabel Anda atau GSIs akan memiliki kapasitas yang diperlukan untuk pola aplikasi Anda.

Bagian AWS layanan penskalaan otomatis akan memantau pemanfaatan tabel Anda saat ini dan membandingkannya dengan nilai pemanfaatan target:. TargetValue Fitur ini akan memberi tahu Anda jika sudah waktunya untuk menambah atau mengurangi kapasitas yang dialokasikan.

Memahami pengaturan penskalaan otomatis Anda

Mendefinisikan nilai yang benar untuk pemanfaatan target, langkah awal, dan nilai akhir adalah aktivitas yang memerlukan keterlibatan dari tim operasi Anda. Ini memungkinkan Anda untuk menentukan nilai dengan benar berdasarkan penggunaan aplikasi historis, yang akan digunakan untuk memicu AWS kebijakan penskalaan otomatis. Pemanfaatan target adalah persentase total kapasitas yang perlu dicapai selama jangka waktu tertentu sebelum aturan penskalaan otomatis berlaku.

Ketika Anda menetapkan pemanfaatan target yang tinggi (target sekitar 90%), artinya lalu lintas Anda harus lebih tinggi dari 90% untuk jangka waktu tertentu sebelum penskalaan otomatis dimulai. Jangan menggunakan pemanfaatan target yang tinggi kecuali aplikasi Anda sangat konstan dan tidak menerima lonjakan lalu lintas.

Ketika Anda menetapkan pemanfaatan yang sangat rendah (target kurang dari 50%), artinya aplikasi Anda harus mencapai 50% dari kapasitas yang disediakan sebelum memicu kebijakan penskalaan otomatis. Kecuali lalu lintas aplikasi Anda tumbuh pada tingkat yang sangat agresif, ini biasanya diterjemahkan ke dalam kapasitas yang tidak terpakai dan sumber daya yang terbuang.

Cara mengidentifikasi tabel dengan pemanfaatan target rendah (<= 50%)

Anda dapat menggunakan salah satu AWS CLI atau AWS Management Console untuk memantau dan mengidentifikasi kebijakan penskalaan otomatis Anda di sumber daya DynamoDB Anda: TargetValues

AWS CLI
  1. Kembalikan seluruh daftar sumber daya dengan menjalankan perintah berikut:

    aws application-autoscaling describe-scaling-policies --service-namespace dynamodb

    Perintah ini akan mengembalikan seluruh daftar kebijakan penskalaan otomatis yang dikeluarkan ke sumber daya DynamoDB apa pun. Jika hanya ingin mengambil sumber daya dari tabel tertentu, Anda dapat menambahkan –resource-id parameter. Sebagai contoh:

    aws application-autoscaling describe-scaling-policies --service-namespace dynamodb --resource-id "table/<table-name>”
  2. Kembalikan hanya kebijakan penskalaan otomatis untuk tertentu GSI dengan menjalankan perintah berikut

    aws application-autoscaling describe-scaling-policies --service-namespace dynamodb --resource-id "table/<table-name>/index/<gsi-name>”

    Nilai-nilai yang kami minati untuk kebijakan penskalaan otomatis disorot di bawah ini. Kami ingin memastikan bahwa nilai target lebih besar dari 50% untuk menghindari penyediaan berlebih. Anda akan mendapatkan hasil yang mirip dengan berikut ini:

    { "ScalingPolicies": [ { "PolicyARN": "arn:aws:autoscaling:<region>:<account-id>:scalingPolicy:<uuid>:resource/dynamodb/table/<table-name>/index/<index-name>:policyName/$<full-gsi-name>-scaling-policy", "PolicyName": $<full-gsi-name>”, "ServiceNamespace": "dynamodb", "ResourceId": "table/<table-name>/index/<index-name>", "ScalableDimension": "dynamodb:index:WriteCapacityUnits", "PolicyType": "TargetTrackingScaling", "TargetTrackingScalingPolicyConfiguration": { "TargetValue": 70.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "DynamoDBWriteCapacityUtilization" } }, "Alarms": [ ... ], "CreationTime": "2022-03-04T16:23:48.641000+10:00" }, { "PolicyARN": "arn:aws:autoscaling:<region>:<account-id>:scalingPolicy:<uuid>:resource/dynamodb/table/<table-name>/index/<index-name>:policyName/$<full-gsi-name>-scaling-policy", "PolicyName":$<full-gsi-name>”, "ServiceNamespace": "dynamodb", "ResourceId": "table/<table-name>/index/<index-name>", "ScalableDimension": "dynamodb:index:ReadCapacityUnits", "PolicyType": "TargetTrackingScaling", "TargetTrackingScalingPolicyConfiguration": { "TargetValue": 70.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "DynamoDBReadCapacityUtilization" } }, "Alarms": [ ... ], "CreationTime": "2022-03-04T16:23:47.820000+10:00" } ] }
AWS Management Console
  1. Masuk ke AWS Management Console dan buka konsol DynamoDB di. https://console.aws.amazon.com/dynamodb/

    Pilih yang sesuai Wilayah AWS jika perlu.

  2. Di bilah navigasi kiri, pilih Tabel. Di halaman Tabel, pilih Nama tabel.

  3. Pada halaman Detail tabel, pilih Pengaturan tambahan, lalu tinjau pengaturan penskalaan otomatis tabel Anda.

    Halaman detail tabel DynamoDB dengan pengaturan penskalaan otomatis. Tinjau pemanfaatan kapasitas yang disediakan dan sesuaikan sesuai kebutuhan.

    Untuk indeks, perluas bagian Kapasitas indeks untuk meninjau pengaturan penskalaan otomatis indeks.

    Bagian kapasitas Indeks DynamoDB konsol. Tinjau dan kelola pengaturan penskalaan otomatis untuk indeks.

Jika nilai pemanfaatan target Anda kurang dari atau sama dengan 50%, Anda harus mempelajari metrik pemanfaatan tabel Anda untuk mengetahui apakah nilai tersebut kurang tersedia atau disediakan secara berlebihan.

Cara mengatasi beban kerja dengan varian musiman

Pertimbangkan skenario berikut: aplikasi Anda sering kali beroperasi di bawah nilai rata-rata minimum, tetapi pemanfaatan targetnya rendah sehingga aplikasi Anda dapat bereaksi dengan cepat terhadap peristiwa yang terjadi pada jam-jam tertentu dalam sehari dan Anda memiliki kapasitas yang memadai serta menghindari throttling. Skenario ini umum terjadi ketika Anda memiliki aplikasi yang sangat sibuk selama jam kantor normal (9 pagi hingga 5 sore) tetapi kemudian berfungsi pada tingkat dasar setelah jam kerja. Karena beberapa pengguna akan mulai terhubung sebelum jam 9 pagi, aplikasi menggunakan ambang batas rendah ini untuk meningkatkan dengan cepat guna mencapai kapasitas yang diperlukan selama jam sibuk.

Skenario ini akan seperti berikut:

  • Antara jam 5 sore dan 9 pagi ConsumedWriteCapacity unit tetap berada di antara 90 dan 100

  • Pengguna mulai terhubung ke aplikasi sebelum jam 9 pagi dan unit kapasitas meningkat pesat (nilai maksimum yang Anda lihat adalah 1500WCU)

  • Rata-rata, penggunaan aplikasi Anda berkisar antara 800 hingga 1200 selama jam kerja

Jika skenario sebelumnya berlaku untuk Anda, sebaiknya gunakan penskalaan otomatis terjadwal, yaitu tabel Anda masih dapat mengonfigurasi aturan penskalaan otomatis aplikasi, tetapi dengan pemanfaatan target yang kurang agresif yang hanya menyediakan kapasitas tambahan pada interval tertentu yang Anda perlukan.

Anda dapat menggunakan AWS CLI untuk menjalankan langkah-langkah berikut untuk membuat aturan penskalaan otomatis terjadwal yang akan dijalankan berdasarkan waktu hari dan hari dalam seminggu.

  1. Daftarkan tabel DynamoDB Anda GSI atau sebagai target yang dapat diskalakan dengan Application Auto Scaling. Target yang dapat diskalakan adalah sumber daya yang Application Auto Scaling dapat skala keluar atau masuk.

    aws application-autoscaling register-scalable-target \ --service-namespace dynamodb \ --scalable-dimension dynamodb:table:WriteCapacityUnits \ --resource-id table/<table-name> \ --min-capacity 90 \ --max-capacity 1500
  2. Siapkan tindakan terjadwal sesuai dengan kebutuhan Anda.

    Kita akan membutuhkan dua aturan untuk mencakup skenario: satu untuk meningkatkan skala dan satu lagi untuk menurunkan skala. Aturan pertama untuk meningkatkan skala tindakan terjadwal:

    aws application-autoscaling put-scheduled-action \ --service-namespace dynamodb \ --scalable-dimension dynamodb:table:WriteCapacityUnits \ --resource-id table/<table-name> \ --scheduled-action-name my-8-5-scheduled-action \ --scalable-target-action MinCapacity=800,MaxCapacity=1500 \ --schedule "cron(45 8 ? * MON-FRI *)" \ --timezone "Australia/Brisbane"

    Aturan kedua untuk menurunkan skala tindakan terjadwal:

    aws application-autoscaling put-scheduled-action \ --service-namespace dynamodb \ --scalable-dimension dynamodb:table:WriteCapacityUnits \ --resource-id table/<table-name> \ --scheduled-action-name my-5-8-scheduled-down-action \ --scalable-target-action MinCapacity=90,MaxCapacity=1500 \ --schedule "cron(15 17 ? * MON-FRI *)" \ --timezone "Australia/Brisbane"
  3. Jalankan perintah berikut untuk memvalidasi bahwa kedua aturan telah diaktifkan:

    aws application-autoscaling describe-scheduled-actions --service-namespace dynamodb

    Anda akan mendapatkan hasil seperti ini:

    { "ScheduledActions": [ { "ScheduledActionName": "my-5-8-scheduled-down-action", "ScheduledActionARN": "arn:aws:autoscaling:<region>:<account>:scheduledAction:<uuid>:resource/dynamodb/table/<table-name>:scheduledActionName/my-5-8-scheduled-down-action", "ServiceNamespace": "dynamodb", "Schedule": "cron(15 17 ? * MON-FRI *)", "Timezone": "Australia/Brisbane", "ResourceId": "table/<table-name>", "ScalableDimension": "dynamodb:table:WriteCapacityUnits", "ScalableTargetAction": { "MinCapacity": 90, "MaxCapacity": 1500 }, "CreationTime": "2022-03-15T17:30:25.100000+10:00" }, { "ScheduledActionName": "my-8-5-scheduled-action", "ScheduledActionARN": "arn:aws:autoscaling:<region>:<account>:scheduledAction:<uuid>:resource/dynamodb/table/<table-name>:scheduledActionName/my-8-5-scheduled-action", "ServiceNamespace": "dynamodb", "Schedule": "cron(45 8 ? * MON-FRI *)", "Timezone": "Australia/Brisbane", "ResourceId": "table/<table-name>", "ScalableDimension": "dynamodb:table:WriteCapacityUnits", "ScalableTargetAction": { "MinCapacity": 800, "MaxCapacity": 1500 }, "CreationTime": "2022-03-15T17:28:57.816000+10:00" } ] }

Gambar berikut menunjukkan beban kerja sampel yang selalu mempertahankan pemanfaatan target 70%. Perhatikan bagaimana aturan penskalaan otomatis masih tetap diterapkan dan throughput tidak akan berkurang.

Throughput tabel pada pemanfaatan target 70%, bahkan ketika aturan penskalaan otomatis menyesuaikan kapasitas.

Jika diperbesar, kita dapat melihat adanya lonjakan dalam aplikasi yang memicu ambang penskalaan otomatis sebesar 70%, sehingga memaksa penskalaan otomatis untuk memulai dan menyediakan kapasitas tambahan yang diperlukan untuk tabel. Tindakan penskalaan otomatis terjadwal akan memengaruhi nilai maksimum dan minimum, dan Anda bertanggung jawab untuk mengaturnya.

Lonjakan throughput tabel DynamoDB yang memulai penskalaan otomatis untuk menyediakan kapasitas ekstra yang diperlukan.
Konfigurasi penskalaan otomatis tabel DynamoDB: Target pemanfaatan dan nilai kapasitas minimum dan maksimum.

Cara mengatasi lonjakan beban kerja dengan pola yang tidak diketahui

Dalam skenario ini, aplikasi menggunakan pemanfaatan target yang sangat rendah karena Anda belum mengetahui pola aplikasi, dan Anda ingin memastikan beban kerja Anda tidak mengalami throttling.

Sebaiknya gunakan mode kapasitas sesuai permintaan. Tabel sesuai permintaan sangat cocok untuk lonjakan beban kerja yang tidak Anda ketahui pola lalu lintasnya. Dengan mode kapasitas sesuai permintaan, Anda membayar per permintaan atas pembacaan dan penulisan data yang dilakukan aplikasi Anda pada tabel Anda. Anda tidak perlu menentukan berapa banyak throughput baca dan tulis yang Anda harapkan untuk dijalankan oleh aplikasi Anda, karena DynamoDB langsung mengakomodasi beban kerja Anda saat beban kerja tersebut naik atau turun.

Cara mengatasi beban kerja dengan aplikasi tertaut

Dalam skenario ini, aplikasi bergantung pada sistem lain, seperti skenario pemrosesan batch yang dapat menghasilkan lonjakan besar dalam lalu lintas sesuai dengan peristiwa dalam logika aplikasi.

Pertimbangkan untuk mengembangkan logika penskalaan otomatis khusus yang bereaksi terhadap peristiwa tersebut saat Anda dapat meningkatkan TargetValues dan kapasitas tabel bergantung pada kebutuhan spesifik Anda. Anda bisa mendapatkan keuntungan dari Amazon EventBridge dan menggunakan kombinasi AWS layanan seperti Lambda dan Step Functions untuk bereaksi terhadap kebutuhan aplikasi spesifik Anda.