Bagikan melalui


Desain untuk peluasan skala

Rancang aplikasi Anda sehingga dapat menskalakan secara horizontal

Keuntungan utama dari cloud adalah penskalaan elastis — kemampuan untuk menggunakan kapasitas sebanyak yang Anda butuhkan, scale out saat beban meningkat, dan scale in saat kapasitas ekstra tidak diperlukan. Desain aplikasi Anda sehingga dapat menskalakan secara horizontal, menambahkan atau menghapus instans, mencocokkan pasokan dengan permintaan.

Skalabilitas diukur dengan rasio perolehan throughput terhadap peningkatan sumber daya. Idealnya dalam sistem yang dirancang dengan baik, kedua angka tersebut proporsional: alokasi sumber daya dua kali lipat akan menggandakan throughput. Skalabilitas biasanya dibatasi oleh pengenalan hambatan atau titik sinkronisasi dalam sistem.

Rekomendasi

Hindari kelekatan instans. Kelekatan, atau afinitas sesi, adalah ketika permintaan dari klien yang sama selalu dialihkan ke server yang sama. Kelekatan membatasi kemampuan aplikasi untuk peluasan skala. Misalnya, lalu lintas dari pengguna volume tinggi tidak akan didistribusikan ke seluruh instans. Penyebab kelekatan termasuk menyimpan keadaan sesi dalam memori, dan menggunakan kunci mesin-khusus untuk enkripsi. Pastikan instans apa pun dapat menangani permintaan apa pun.

Mengidentifikasi penyempitan. Peluasan skala bukanlah perbaikan ajaib untuk setiap masalah performa. Misalnya, jika database backend Anda adalah penyempitan, tidak akan membantu untuk menambahkan lebih banyak server web. Identifikasi dan selesaikan penyempitan dalam sistem terlebih dahulu, sebelum melemparkan lebih banyak contoh ke masalah. Bagian stateful dari sistem adalah penyebab paling mungkin dari penyempitan.

Menguraikan beban kerja menurut persyaratan skalabilitas. Aplikasi sering kali terdiri dari beberapa beban kerja, dengan persyaratan penskalaan yang berbeda. Misalnya, aplikasi mungkin memiliki situs publik dan situs administrasi terpisah. Situs publik mungkin mengalami lonjakan lalu lintas yang tiba-tiba, sedangkan situs administrasi memiliki beban yang lebih kecil dan lebih dapat diprediksi.

Merancang komponen otonom dan dipisahkan yang berkomunikasi melalui protokol komunikasi asinkron. Idealnya, komponen harus memiliki status sendiri, independen, dan menggunakan peristiwa untuk mengomunikasikan perubahan atau aktivitas apa pun ke komponen luar. Ini membantu menskalakan secara independen hanya komponen yang kelebihan beban. Terapkan mekanisme kontrol alur untuk mengelola lalu lintas dan menurunkan tingkat keanggunan. Konsumen harus mengontrol tingkat konsumsi mereka sendiri. Produsen harus mengontrol tingkat transmisi mereka sendiri, termasuk menghentikan. Antrean pesan adalah opsi yang baik untuk menyerap beban kerja tambahan dan memungkinkan konsumen untuk mengosongkan pekerjaan di waktu luang mereka.

Hindari komunikasi, koordinasi, dan menunggu yang tidak perlu.

Membongkar tugas asinkron secara alami. Tugas seperti mengirim email, tindakan di mana pengguna tidak memerlukan respons langsung, dan integrasi dengan sistem lain semuanya adalah tempat yang baik untuk menggunakan pola olahpesan asinkron.

Membongkar tugas yang membutuhkan banyak sumber daya. Tugas yang membutuhkan banyak sumber daya CPU atau I/O harus dipindahkan ke pekerjaan latar belakang bila memungkinkan, untuk mengecilkan beban antar muka yang menangani permintaan pengguna.

Skala otomatis berdasarkan metrik penggunaan langsung dan gunakan fitur autoscaling bawaan. Banyak layanan komputasi Azure memiliki dukungan bawaan untuk penskalaan otomatis. Jika aplikasi memiliki beban kerja reguler yang dapat diprediksi, luaskan skalanya sesuai jadwal. Misalnya, turunkan skalanya selama jam kerja. Jika tidak, jika beban kerja tidak dapat diprediksi, gunakan metrik kinerja seperti CPU atau minta panjang antrean untuk memicu penskalaan otomatis. Amati aplikasi dan komunikasi mereka untuk mengidentifikasi hambatan dan untuk mendapatkan keputusan yang lebih akurat. Untuk praktik terbaik penskalaan otomatis, lihat Penskalaan Otomatis.

Pertimbangkan penskalaan otomatis yang agresif untuk beban kerja kritis. Untuk beban kerja kritis, Anda ingin tetap terdepan. Lebih baik tambahkan instans baru dengan cepat di bawah beban berat untuk menangani lalu lintas tambahan, lalu kurangi skala secara bertahap.

Mendesain untuk penurunan skala. Ingatlah bahwa dengan skala elastis, aplikasi akan memiliki periode penskalaan, saat instans dihapus. Aplikasi harus dengan anggun menangani instans yang dihapus. Berikut adalah beberapa cara untuk menangani scalein:

  • Dengarkan peristiwa penonaktifan (jika tersedia) dan matikan dengan bersih.
  • Klien/konsumen layanan harus mendukung penanganan kesalahan sementara dan coba lagi.
  • Untuk tugas yang berjalan lama, pertimbangkan untuk memberhentikan pekerjaan, menggunakan titik pemeriksaan atau pola Pipa dan Filter.
  • Letakkan item pekerjaan dalam antrean sehingga instans lain dapat mengambil pekerjaan, jika sebuah instans dihapus di tengah pemrosesan.

Pertimbangkan penskalaan untuk redundansi. Penskalaan dapat meningkatkan keandalan aplikasi Anda. Misalnya, pertimbangkan untuk memperluas skala di beberapa zona ketersediaan, seperti dengan menggunakan layanan redundansi zona. Pendekatan ini dapat meningkatkan throughput aplikasi Anda serta memberikan ketahanan jika satu zona mengalami pemadaman.

Model dan optimalkan skalabilitas sistem Anda. Anda dapat menggunakan model sistem Anda menggunakan pendekatan seperti hukum Amdahl. Mengukur skalabilitas berdasarkan parameter seperti ketidakcocokan dan koherensi. Ketidakcocokan mengacu pada penundaan karena menunggu atau mengantre untuk sumber daya bersama. Koherensi mengacu pada penundaan agar data menjadi konsisten. Misalnya, memiliki ketidakcocokan tinggi menunjukkan pemrosesan berurutan yang dapat diparalelkan, sementara memiliki koherensi tinggi menunjukkan dependensi yang berlebihan di antara proses, meminta Anda untuk meminimalkan interaksi. Selama desain beban kerja, Anda dapat menghitung kapasitas efektif maksimum sistem Anda untuk menghindari penyediaan lebih banyak pasokan daripada permintaan yang menyebabkan limbah.