Strategi arsitektur untuk merancang strategi penskalaan yang andal

Berlaku untuk rekomendasi daftar periksa Keandalan Azure Well-Architected Framework ini:

RE:06 Terapkan strategi penskalakan yang tepat waktu dan andal di tingkat aplikasi, data, dan infrastruktur. Mendasarkan strategi penskalaan pada pola penggunaan aktual atau yang diprediksi dan meminimalkan intervensi manual.

Panduan ini menjelaskan rekomendasi untuk merancang strategi penskalaan yang andal.

Definisi

Istilah Definisi
Skala Vertikal Pendekatan penskalaan yang menambahkan kapasitas komputasi ke sumber daya yang ada.
Skala horizontal Pendekatan penskalaan yang menambahkan instans dari jenis sumber daya tertentu.
Penyesuaian Otomatis Pendekatan penskalaan yang secara otomatis menambahkan atau menghapus sumber daya saat serangkaian kondisi terpenuhi.

Nota

Operasi penskalaan dapat statis (penskalaan harian yang dijadwalkan secara teratur untuk mengakomodasi pola beban normal), otomatis (proses otomatis sebagai respons terhadap kondisi yang terpenuhi), atau manual (operator melakukan operasi penskalaan satu kali sebagai reaksi terhadap perubahan beban yang tidak terduga). Penskalaan vertikal dan horizontal dapat dilakukan melalui salah satu metode ini. Namun, penskalaan vertikal otomatis memerlukan pengembangan otomatisasi kustom tambahan dan dapat menyebabkan waktu henti tergantung pada sumber daya yang diskalakan.

Sistem harus dirancang agar dapat diskalakan secara horizontal. Hindari membuat asumsi tentang afinitas instance. Jangan merancang solusi yang mengharuskan kode selalu berjalan dalam instans tertentu dari proses. Saat menskalakan layanan cloud atau situs web secara horizontal, jangan asumsikan bahwa serangkaian permintaan dari sumber yang sama selalu dirutekan ke instans yang sama. Untuk alasan yang sama, desain layanan agar stateless untuk menghindari kebutuhan serangkaian permintaan dari aplikasi agar selalu dirutekan ke instans layanan yang sama. Saat merancang layanan yang membaca pesan dari antrean dan memprosesnya, jangan membuat asumsi tentang instans layanan mana yang menangani pesan tertentu. Penskalaan otomatis dapat memulai lebih banyak instans layanan saat panjang antrean tumbuh. Pola Konsumen yang Bersaing menjelaskan cara menangani skenario ini.

Untuk menggunakan waktu penting dalam keputusan penskalaan otomatis, sangat berguna untuk membuat pustaka secara otomatis menambahkan informasi yang relevan ke header pesan saat dikirim dan diproses. Satu pustaka yang menyediakan fungsionalitas ini adalah NServiceBus.

Desain sesuai dengan pola beban

Untuk merancang strategi penskalaan yang andal untuk beban kerja Anda, fokus pada mengidentifikasi pola beban untuk pengguna dan alur sistem untuk setiap beban kerja yang mengarah ke operasi penskalaan. Berikut adalah contoh pola beban yang berbeda dan strategi penskalaan yang sesuai:

  • Statis: Setiap malam pukul 23.00 EST, jumlah pengguna aktif aplikasi Anda berada di bawah 100, dan pemanfaatan CPU untuk server aplikasi turun 90% di semua simpul. Untuk menangani ini, Anda dapat menjadwalkan penurunan skala simpul komputasi Anda ke jumlah minimum (2) antara pukul 23.00 dan 06.00.

  • Dinamis, Reguler, dan Dapat Diprediksi: Setiap Senin pagi, 1000 karyawan di beberapa wilayah masuk ke sistem ERP. Untuk mengelola ini, Anda dapat menjadwalkan peluasan skala simpul komputasi Anda ke kapasitas harian normal sebelum wilayah pertama mulai berfungsi.

  • Dinamis, Tidak Teratur, dan Dapat Diprediksi: Peluncuran produk terjadi pada hari pertama bulan ini, dan ada data historis dari peluncuran sebelumnya tentang bagaimana lalu lintas meningkat dalam situasi ini. Untuk mengatasi hal ini, Anda dapat menentukan peningkatan skala terjadwal satu kali instans komputasi dan database Anda pada pagi hari peluncuran produk, dan menurunkan skala kembali setelah satu minggu.

  • Dinamis, Tidak Teratur, dan Tidak Dapat Diprediksi: Peristiwa skala besar menyebabkan lonjakan permintaan produk. Misalnya, perusahaan yang memproduksi dan menjual dehumidifier dapat mengalami lonjakan lalu lintas yang tiba-tiba setelah badai atau peristiwa banjir lainnya ketika orang-orang di daerah yang terkena dampak perlu mengeringkan kamar di rumah mereka. Untuk menangani ini, Anda dapat mengatur ambang batas skala otomatis untuk memperhitungkan lonjakan lalu lintas yang tidak diencana.

Menyesuaikan strategi penskalakan agar sesuai dengan komponen atau alur individual

Tidak ada strategi penskalakan satu ukuran untuk semua. Layanan cloud yang berbeda memiliki tingkat dukungan penskalaan yang berbeda dan pendekatan yang berbeda untuk penskalaan. Untuk alasan itu, penting untuk memahami bagaimana penskalaan didukung dan diterapkan di semua komponen beban kerja Anda untuk merancang strategi penskalaan Anda secara keseluruhan. Anda mungkin menerapkan strategi penskalaan di tingkat komponen individual atau di tingkat alur, tergantung pada desain arsitektur Anda. Saat menentukan bagaimana Anda akan menerapkan penskalaan di seluruh beban kerja Anda, pertimbangkan faktor-faktor ini:

  • Komponen-komponen yang tidak dapat diskalakan. Contohnya adalah database relasional besar yang tidak mengaktifkan sharding dan tidak dapat direfaktor tanpa dampak signifikan. Dokumentasikan batas sumber daya yang diterbitkan oleh penyedia cloud Anda dan pantau sumber daya tersebut dengan cermat. Sertakan sumber daya spesifik tersebut dalam perencanaan masa depan Anda untuk bermigrasi ke layanan yang dapat diskalakan.

  • Hubungan komponen alur dalam hal urutan operasi skala. Pastikan Anda tidak secara tidak sengaja membebani komponen hilir dengan menskalakan komponen hulu terlebih dahulu.

  • Setiap elemen aplikasi stateful yang mungkin terganggu oleh operasi penskalaan dan afinitas sesi apa pun (atau kelekatan sesi) yang diterapkan. Kelekatan dapat membatasi kemampuan penskalaan Anda dan memperkenalkan satu titik kegagalan. Rancang beban kerja Anda menjadi stateless sejauh praktis.

  • Potensi penyempitan. Peluasan skala tidak memperbaiki setiap masalah performa. Misalnya, jika database backend Anda adalah hambatan, tidak membantu menambahkan lebih banyak server web. Identifikasi dan atasi hambatan dalam sistem terlebih dahulu sebelum hanya menambahkan lebih banyak instans. Bagian stateful dari sistem adalah penyebab paling mungkin dari kemacetan.

  • Menangani tugas yang berjalan lama. Rancang tugas yang berjalan lama untuk mendukung perluasan skala dan penskalakan. Tanpa perawatan, tugas seperti itu dapat mencegah instans proses dimatikan dengan bersih ketika sistem menskalakan masuk. Atau, itu bisa kehilangan data jika prosesnya dihentikan secara paksa. Idealnya, refaktorisasi tugas jangka panjang dan pecahkan pemrosesan yang dilakukannya menjadi potongan-potongan yang lebih kecil dan diskrit. Pola Pipa dan Filter memberikan contoh bagaimana Anda dapat mencapai solusi ini.

Pilih teknologi yang tepat

Membuat pilihan teknologi yang terinformasi dengan baik dengan mempertimbangkan penskalaan akan membantu Anda memastikan bahwa beban kerja Anda dapat memenuhi target keandalan saat beban kerja Anda berkembang. Teliti kemampuan penskalaan yang ditawarkan untuk berbagai sumber daya yang menawarkan fungsionalitas serupa dan pilih kombinasi terbaik untuk rencana pertumbuhan Anda di masa mendatang. Misalnya, Anda mungkin memiliki beberapa opsi untuk penyimpanan data yang dapat menghosting jenis database tertentu yang akan Anda gunakan. Namun, satu pilihan mungkin memiliki fungsionalitas penskalaan yang lebih baik di luar kotak daripada yang lain, yang dapat menjadikannya pilihan yang lebih baik untuk beban kerja Anda.

  • Manfaatkan layanan yang secara otomatis diskalakan. Jika praktis, gunakan layanan SaaS yang secara otomatis menskalakan tanpa konfigurasi atau input apa pun. Layanan global seperti Microsoft Entra ID menawarkan fungsionalitas ini. Solusi tanpa server juga menawarkan penskalaan otomatis dan dapat menjadi pilihan yang baik untuk banyak kasus penggunaan.

  • Manfaatkan layanan yang menawarkan penskalaan di luar kotak. Banyak layanan PaaS menawarkan fitur penskalaan terintegrasi dan mudah digunakan yang dapat Anda konfigurasi untuk memenuhi persyaratan keandalan Anda. Misalnya, Anda dapat mengonfigurasi penskalaan throughput untuk Cosmos DB untuk memenuhi persyaratan khusus Anda.

Mengotomatiskan penskalakan

Otomatiskan operasi penskalaan untuk komponen beban kerja Anda sejauh praktis. Saat menggunakan sumber daya yang memiliki fungsionalitas penskalaan otomatis yang dapat dikonfigurasi, buat logika konfigurasi ke dalam kode penyebaran infrastructure-as-code (IaC) Anda. Saat menggunakan sumber daya yang tidak memiliki penawaran penskalaan otomatis di luar kotak, buat otomatisasi untuk melakukan operasi penskalaan menggunakan alat otomatisasi asli dan sertakan kode otomatisasi dalam kode IaC Anda.

Jika Anda mendasarkan strategi penskalaan otomatis pada penghitung yang mengukur proses bisnis, seperti jumlah pesanan yang ditempatkan per jam atau waktu berjalan rata-rata transaksi yang kompleks, pastikan Anda sepenuhnya memahami hubungan antara hasil dari jenis penghitung ini dan persyaratan kapasitas komputasi aktual. Mungkin perlu untuk menskalakan lebih dari satu komponen atau unit komputasi sebagai respons terhadap perubahan penghitung proses bisnis.

Perlu diingat bahwa autoscaling mungkin bukan mekanisme yang paling tepat untuk menangani ledakan tiba-tiba dalam beban kerja. Dibutuhkan waktu untuk menyediakan dan memulai instans baru layanan atau menambahkan sumber daya ke sistem, dan permintaan puncak mungkin berlalu pada saat sumber daya tambahan ini tersedia. Dalam skenario ini, mungkin lebih baik untuk membatasi layanan. Untuk informasi selengkapnya, lihat pola Pembatasan.

Sebaliknya, jika Anda memerlukan kapasitas untuk memproses semua permintaan ketika volume berfluktuasi dengan cepat, dan biaya bukan faktor kontribusi utama, pertimbangkan untuk menggunakan strategi penskalaan otomatis agresif yang memulai lebih banyak instans dengan lebih cepat. Anda juga dapat menggunakan kebijakan terjadwal yang memulai jumlah instans yang memadai untuk memenuhi beban maksimum sebelum beban tersebut diharapkan.

Pilih unit skala yang sesuai

Dasarkan strategi penskalaan Anda pada unit skala, yang merupakan pengelompokan logis komponen untuk diskalakan bersama-sama dan kenaikan skala yang akan digunakan (seperti berpindah dari satu SKU VM ke SKU VM lainnya). Opsi yang perlu dipertimbangkan adalah:

  • Menskalakan sumber daya satu per satu: Anda mungkin hanya perlu menskalakan VM atau database individual.

  • Menskalakan komponen penuh secara bersamaan: Misalnya, Anda mungkin memiliki API layanan mikro yang terdiri dari App Service, database, dan antrean yang perlu diskalakan secara bersamaan.

  • Menskalakan solusi lengkap: Untuk beban kerja penting yang kompleks atau misi, menskalakan seluruh solusi sebagai stempel penyebaran dapat menyederhanakan strategi penskalaan Anda. Daripada mengelola jadwal penskalaan dan ambang penskalaan otomatis dari banyak sumber daya yang berbeda, Anda dapat menerapkan serangkaian definisi penskalaan terbatas ke stempel penyebaran dan kemudian mencerminkannya di seluruh stempel sesuai kebutuhan.

Penting

Tetapkan batas maksimum jumlah unit skala yang dapat dialokasikan secara otomatis untuk menghindari kelebihan biaya.

Mengoptimalkan waktu inisialisasi unit skala

Saat merancang strategi penskalakan Anda, perlu diingat bahwa layanan yang berbeda menskalakan pada skala waktu yang berbeda. Ada beberapa layanan yang menskalakan hampir seketika dan lainnya yang menskalakan jauh lebih lambat. Misalnya, instans API Management dapat memakan waktu hingga 45 menit untuk menyelesaikan operasi penskalaannya. Untuk memperhitungkan skala waktu operasi penskalaan, rencanakan dengan benar untuk melakukan operasi penskalaan sebelum peningkatan beban yang diharapkan mencapai beban kerja Anda. Rekomendasi lain yang perlu dipertimbangkan meliputi:

  • Prainisialisasi simpul yang akan disebarkan untuk mengurangi waktu yang diperlukan untuk inisialisasi.

  • Izinkan waktu buffer di sekitar perubahan konfigurasi sebelum Anda membuat perubahan lebih lanjut atau menggunakan sistem dengan cara yang tidak biasa. Misalnya, Anda dapat membatalkan alokasi instans backend App Gateway melalui perubahan aturan. Anda harus menunggu koneksi dikosongkan dari instans tersebut sebelum dapat dihapus dengan aman.

  • Penyediaan sumber daya secara berlebihan untuk menangani peningkatan beban saat penskalakan berlangsung. Anda mungkin memastikan bahwa VM biasanya berjalan pada kapasitas pemanfaatan 75% untuk memastikan bahwa VM dapat menangani peningkatan beban saat penskalaan horizontal terjadi.

  • Sesuaikan ambang penskalaan Anda dengan pemantauan. Gunakan pemantauan kapasitas Anda untuk memastikan bahwa ambang penskalan Anda untuk memicu operasi penskalan.

Menskalakan penyimpanan data menggunakan sharding dan partisi

Optimalkan keandalan data estate Anda dengan menyertakannya dalam strategi penskalaan Anda. Pemartisian data menyebarkan database di seluruh sumber daya penyimpanan logis atau fisik, menghapus satu titik kegagalan. Pilih strategi pemartisian terbaik untuk kasus penggunaan Anda.

  • Pemartisian horizontal (sharding): Partisi (pecahan) ditempatkan di penyimpanan data terpisah, tetapi semua partisi memiliki skema yang sama. Setiap shard menyimpan subset database. Ini adalah pendekatan yang baik untuk mengoptimalkan keandalan karena membantu memfasilitasi penyeimbangan beban dan meminimalkan beban operasi saat berhadapan dengan masalah. Pecahan dapat direplikasi untuk keandalan yang lebih tinggi.

  • Pemartisian vertikal: Setiap partisi menyimpan subset bidang untuk item di penyimpanan data. Bidang dibagi sesuai dengan pola penggunaannya.

  • Pemartisian fungsi: Data diagregasi sesuai dengan bagaimana setiap konteks terikat dalam sistem menggunakan data.

Pertimbangkan untuk menggabungkan strategi ini saat Anda merancang skema partisi. Misalnya, Anda dapat membagi data menjadi pecahan lalu menggunakan partisi vertikal untuk membagi data lebih lanjut di setiap shard.

Optimalkan strategi partisi Anda untuk skalabilitas. Analisis pola akses data untuk menentukan operasi mana yang memerlukan sumber daya pemrosesan terbanyak dan menyeimbangkan partisi Anda untuk memastikan bahwa masing-masing memiliki sumber daya yang cukup untuk menangani persyaratan skalabilitas.

Untuk panduan terperinci tentang partisi dan sharding, lihat panduan desain

Memantau operasi penskalakan Anda

Mekanisme penskalaan otomatis harus memantau proses penskalaan otomatis dan mencatat detail setiap peristiwa penskalaan otomatis (apa yang memicunya, sumber daya apa yang ditambahkan atau dihapus, dan kapan). Jika Anda membuat mekanisme autoscaling kustom, pastikan mekanisme tersebut menggabungkan kemampuan ini. Analisis informasi secara proaktif untuk membantu mengukur efektivitas strategi penskalaan otomatis, dan menyetelnya jika perlu.

Dukungan Azure

Fitur autoscaling tersedia di banyak layanan Azure. Ini memungkinkan Anda dengan mudah mengonfigurasi kondisi untuk menskalakan instans secara otomatis secara horizontal. Beberapa layanan memiliki fungsionalitas terbatas atau tidak ada bawaan untuk menskalakan secara otomatis, jadi pastikan untuk mendokuensikan kasus ini dan menentukan proses untuk menangani penskalakan.

Banyak layanan Azure menawarkan API yang dapat Anda gunakan untuk merancang operasi penskalaan otomatis kustom menggunakan Azure Automation, seperti sampel kode di Autoscale Azure IoT Hub Anda. Anda dapat menggunakan alat seperti KEDA untuk penskalaan otomatis berbasis peristiwa, yang tersedia di Azure Kubernetes Service dan Azure Container Apps.

Skala otomatis Azure Monitor menyediakan serangkaian fungsionalitas penskalaan otomatis umum untuk Azure Virtual Machine Scale Sets, Azure App Service, Azure Spring Apps, dan banyak lagi. Penskalakan dapat dilakukan sesuai jadwal atau berdasarkan metrik runtime, seperti penggunaan CPU atau memori. Lihat panduan Azure Monitor untuk praktik terbaik.

Kompromi

Tradeoff: Peningkatan skala memiliki implikasi biaya, jadi optimalkan strategi Anda untuk menurunkan skala sesegera mungkin untuk membantu menjaga biaya tetap terkendali. Pastikan bahwa otomatisasi yang Anda gunakan untuk meningkatkan skala juga memiliki pemicu untuk menurunkan skala.

Contoh

Lihat panduan penskalaan arsitektur referensi garis besar AKS.

Daftar periksa keandalan

Lihat kumpulan rekomendasi lengkap.

Daftar periksa keandalan