Rekomendasi untuk mengoptimalkan penskalaan dan partisi

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

PE:05 Optimalkan penskalaan dan partisi. Menggabungkan penskalaan dan partisi yang andal dan terkontrol. Desain unit skala beban kerja adalah dasar dari strategi penskalaan dan pemartisian.

Panduan ini menjelaskan rekomendasi untuk penskalaan dan partisi beban kerja. Penskalakan adalah kemampuan untuk meningkatkan atau mengurangi sumber daya yang dialokasikan untuk beban kerja berdasarkan permintaan. Pemartisian melibatkan pembagian beban kerja menjadi unit yang lebih kecil dan dapat dikelola untuk mendistribusikan data dan pemrosesan di beberapa sumber daya. Beban kerja yang tidak menskalakan atau partisi mungkin mengalami performa yang buruk dalam periode permintaan tinggi dan kapasitas yang kurang digunakan dalam periode permintaan rendah.

Definisi

Istilah Definisi
Skala otomatis Fitur yang secara otomatis menyesuaikan batas kapasitas layanan berdasarkan konfigurasi yang telah ditentukan sebelumnya, memungkinkannya untuk meningkatkan atau menurunkan skala sesuai kebutuhan.
Kapasitas Batas atas atau kapasitas maksimum layanan atau fitur tertentu.
Afinitas klien (afinitas sesi) Perutean permintaan yang disengaja dari satu klien ke satu instans server untuk membantu memastikan manajemen sesi yang konsisten.
Konsistensi (database terdistribusi) Keseragaman data di beberapa simpul dalam database terdistribusi, memastikan bahwa semua replika memiliki data yang sama pada titik waktu tertentu.
Konsistensi (database relasional) Properti transaksi yang membawa database dari satu status valid ke status lain, mempertahankan integritas data.
Tingkat konsistensi Konfigurasi yang menentukan bagaimana dan kapan data direplikasi dalam sistem database terdistribusi, menentukan tradeoff antara konsistensi dan performa.
Penguncian data Mekanisme yang digunakan untuk mencegah pembaruan simultan ke data yang sama.
Penskalaan horizontal Pendekatan penskalaan yang menambahkan instans dari jenis sumber daya tertentu.
Konkurensi optimis Pendekatan untuk memperbarui database yang menggunakan rekam jepret untuk membuat pembaruan alih-alih mekanisme penguncian tradisional.
Partisi Proses pembagian data secara fisik menjadi penyimpanan data terpisah.
Skalabilitas Kemampuan beban kerja untuk secara dinamis mengubah batas kapasitasnya untuk mengakomodasi berbagai tingkat permintaan.
Unit skala Sekelompok sumber daya yang menskalakan secara proporsional bersama-sama.
Afinitas status Penyimpanan data sesi klien pada satu server sehingga server yang sama menangani permintaan berikutnya dari klien yang sama.
Penskalaan Vertikal Pendekatan penskalaan yang menambahkan kapasitas komputasi ke sumber daya yang ada.

Strategi desain utama

Penskalaan dan partisi berkontribusi pada efisiensi performa dengan memastikan bahwa sumber daya digunakan secara efektif dan beban kerja dapat menangani berbagai beban. Praktik ini sangat penting di lingkungan cloud di mana aplikasi harus fleksibel dan dapat beradaptasi dengan permintaan yang berubah. Penskalakan memastikan Anda dapat memperluas kapasitas beban kerja untuk memenuhi permintaan yang meningkat. Partisi memungkinkan Anda membagi tugas atau data secara efisien untuk menangani kebutuhan yang berkembang ini. Fondasi dari kedua proses ini adalah desain unit skala beban kerja. Ini menentukan bagaimana beban kerja Anda harus tumbuh dan mendistribusikan tugas. Dengan menggabungkan pendekatan yang andal dan terkontrol untuk penskalaan dan partisi, Anda dapat menyampingkan potensi inefisiensi beban kerja.

Mengoptimalkan penskalakan

Optimalkan penskalaan adalah proses penyesuaian jumlah server, instans, atau sumber daya untuk memenuhi tuntutan beban kerja yang berfluktuasi. Ini memastikan bahwa beban kerja dapat menangani peningkatan lalu lintas atau tuntutan tanpa mengalami penurunan performa atau waktu henti.

Memilih strategi penskalakan

Memilih strategi penskalaan melibatkan memutuskan antara metode vertikal atau horizontal untuk meningkatkan kapasitas beban kerja berdasarkan persyaratan spesifiknya. Memilih strategi yang tepat memastikan bahwa sumber daya disesuaikan secara efisien untuk memenuhi tuntutan beban kerja tanpa penggunaan atau pemborongan yang berlebihan. Untuk memilih strategi penskalaan yang tepat, Anda perlu memahami kasus penggunaan untuk penskalaan vertikal dan horizontal dan bagaimana mereka memenuhi kebutuhan beban kerja Anda.

Pahami penskalakan vertikal. Dengan menggunakan penskalaan vertikal, Anda dapat meningkatkan kapasitas satu sumber daya, seperti meningkatkan ke server atau ukuran instans yang lebih besar. Penskalakan vertikal berguna ketika beban kerja dapat memperoleh manfaat dari peningkatan daya pemrosesan, memori, atau sumber daya lainnya dalam satu instans. Penskalaan vertikal sesuai untuk beban kerja yang tidak mudah dibagi menjadi bagian yang lebih kecil atau ketika arsitektur aplikasi tidak mendukung penskalaan horizontal.

Pahami penskalakan horizontal. Dengan menggunakan penskalakan horizontal, Anda dapat menambahkan lebih banyak instans atau sumber daya untuk mendistribusikan beban kerja di beberapa server. Penskalaan horizontal menawarkan manfaat seperti peningkatan ketahanan, peningkatan kapasitas, dan kemampuan untuk menangani peningkatan lalu lintas atau tuntutan beban kerja. Ini efektif untuk aplikasi cloud-native yang dirancang untuk berjalan pada beberapa simpul. Penskalaan horizontal sesuai untuk beban kerja yang dapat dibagi menjadi bagian yang lebih kecil yang berjalan secara independen.

Pahami beban kerja. Kesesuaian penskalaan vertikal atau horizontal tergantung pada karakteristik dan persyaratan beban kerja tertentu. Pemantauan dan pengujian performa reguler di area berikut dapat membantu mengoptimalkan strategi penskalaan dari waktu ke waktu:

  • Persyaratan: Pahami persyaratan khusus beban kerja dengan mempertimbangkan faktor-faktor seperti tuntutan sumber daya, kebutuhan skalabilitas, dan batasan beban kerja.

  • Unit skala: Buat desain unit skala untuk komponen yang diharapkan akan diskalakan bersama-sama. Misalnya, 100 komputer virtual mungkin memerlukan dua antrean dan tiga akun penyimpanan untuk menangani beban kerja tambahan. Unit skala akan menjadi 100 komputer virtual, dua antrean, dan tiga akun penyimpanan. Anda harus menskalakan semua komponen secara independen yang mengalami fluktuasi penggunaan kapasitas.

  • Arsitektur: Menilai desain arsitektur aplikasi. Beberapa aplikasi mungkin dirancang secara inheren untuk diskalakan secara horizontal, dengan komponen stateless yang dapat dengan mudah didistribusikan di beberapa instans. Aplikasi lain mungkin memiliki komponen atau dependensi stateful yang membuat penskalaan vertikal lebih tepat. Mengevaluasi persyaratan skalabilitas dan elastisitas beban kerja.

Merancang infrastruktur untuk diskalakan

Merancang infrastruktur untuk menskalakan adalah proses pembuatan arsitektur yang dapat menangani peningkatan tuntutan dan beban kerja dengan menambahkan atau menyesuaikan sumber daya sesuai kebutuhan. Ini melibatkan perencanaan dan penerapan solusi yang dapat menskalakan secara horizontal atau vertikal untuk mengakomodasi pertumbuhan. Strategi termasuk menghindari singleton yang dapat menjadi hambatan dan memisahkan komponen aplikasi untuk memastikan skalabilitas independen. Ketika Anda merancang beban kerja agar dapat diskalakan, beban kerja dapat secara efektif mendistribusikan beban kerja di beberapa sumber daya, yang mencegah penyempitan dan memaksimalkan pemanfaatan sumber daya.

Hindari singleton. Anda harus menghindari penggunaan satu sumber daya terpusat untuk seluruh beban kerja. Sebaliknya, distribusikan beban kerja Anda di beberapa sumber daya untuk skalabilitas, toleransi kesalahan, dan performa yang lebih baik. Jelajahi beberapa contoh dan pertimbangan desain tertentu untuk menghindari singleton dalam sumber daya beban kerja:

  • Tingkatan beban berbasis antrean: Alih-alih mengandalkan satu antrean untuk memproses pesan, pertimbangkan untuk mempartisi beban kerja di beberapa antrean untuk mendistribusikan beban pemrosesan. Ini memberikan skalabilitas dan pemrosesan paralel yang lebih baik.

  • Pemrosesan data: Pola singleton sering muncul dalam skenario pemrosesan data di mana pemrosesan tidak menyebar. Pecahkan tugas jangka panjang menjadi tugas yang lebih kecil yang dapat menskalakan lebih baik untuk mendistribusikan beban kerja di beberapa sumber daya dan memanfaatkan paralelisme.

  • Pola desain: Pola desain seperti Fan-out/Fan-in atau Pipa dan Filter dapat membantu menghindari singleton dalam alur kerja. Pola-pola ini memungkinkan distribusi tugas pemrosesan di beberapa sumber daya dan mempromosikan skalabilitas dan fleksibilitas.

Komponen decouple. Memisahkan komponen aplikasi adalah aspek penting dalam merancang skalabilitas. Ini melibatkan memecah aplikasi menjadi komponen yang lebih kecil dan independen yang dapat beroperasi dan menskalakan secara independen berdasarkan persyaratan beban kerja tertentu. Misalnya, jika satu komponen memerlukan lebih banyak sumber daya karena peningkatan permintaan, Anda dapat menskalakan komponen tersebut tanpa memengaruhi yang lain. Fleksibilitas ini memastikan alokasi sumber daya yang efisien dan mencegah penyempitan. Dengan memisahkan komponen, Anda dapat mengisolasi kegagalan dan meminimalkan efek pada aplikasi keseluruhan. Jika satu komponen gagal, komponen lain dapat terus berfungsi secara independen.

Komponen yang di-decouple lebih mudah dipertahankan dan diperbarui. Perubahan atau pembaruan pada satu komponen dapat dilakukan tanpa memengaruhi komponen lain karena mereka independen. Ikuti panduan ini untuk memisahkan komponen aplikasi untuk skalabilitas:

  • Pemisahan masalah: Identifikasi tanggung jawab dan fungsionalitas aplikasi Anda. Bagi tanggung jawab menjadi komponen terpisah berdasarkan tugas spesifiknya. Misalnya, Anda mungkin memiliki komponen terpisah untuk autentikasi pengguna, pemrosesan data, dan UI.

  • Coupling longgar: Desain komponen untuk berkomunikasi satu sama lain melalui antarmuka dan protokol yang terdefinisi dengan baik. Desain ini mengurangi dependensi antar komponen dan memungkinkan penggantian atau penskalaan komponen individual yang lebih mudah.

  • Komunikasi asinkron: Gunakan pola komunikasi asinkron seperti antrean pesan atau arsitektur berbasis peristiwa untuk memisahkan komponen lebih lanjut. Pola-pola ini memungkinkan komponen untuk memproses tugas secara independen dengan kecepatan mereka sendiri, meningkatkan skalabilitas keseluruhan.

  • Layanan mikro: Pertimbangkan untuk menerapkan layanan mikro, yang merupakan layanan kecil dan independen yang berfokus pada fungsionalitas bisnis tertentu. Setiap layanan mikro dapat dikembangkan, disebarkan, dan diskalakan secara independen, memberikan fleksibilitas dan skalabilitas yang lebih besar.

Mendesain aplikasi untuk diskalakan

Saat Anda menskalakan beban kerja, Anda harus merancang aplikasi untuk mendistribusikan beban. Hanya karena Anda dapat menambahkan lebih banyak replika di tingkat infrastruktur tidak berarti aplikasi Anda dapat menggunakan replika. Merancang aplikasi untuk menskalakan adalah tentang menyusun aplikasi sehingga dapat menangani peningkatan permintaan dengan mendistribusikan beban kerjanya di seluruh sumber daya. Hindari solusi yang memerlukan afinitas klien, penguncian data, atau afinitas status untuk satu instans jika memungkinkan. Anda ingin merutekan klien atau proses ke sumber daya yang memiliki kapasitas yang tersedia. Untuk merancang skalabilitas aplikasi, pertimbangkan strategi berikut:

Menghilangkan status sesi sisi server. Anda harus merancang aplikasi menjadi stateless jika memungkinkan. Untuk aplikasi stateful, Anda harus menggunakan penyimpanan status yang berada di luar server Anda. Eksternalisasi status sesi adalah praktik penyimpanan data sesi di luar server aplikasi atau kontainer. Anda dapat eksternalisasi status sesi untuk mendistribusikan data sesi di beberapa server atau layanan, memungkinkan manajemen sesi yang mulus di lingkungan terdistribusi. Pertimbangkan hal berikut saat eksternalisasi status sesi:

  • Evaluasi persyaratan sesi Anda. Pahami data sesi yang perlu disimpan dan dikelola. Pertimbangkan atribut sesi, batas waktu sesi, dan persyaratan khusus apa pun untuk replikasi atau persistensi sesi. Tentukan ukuran status sesi Anda dan frekuensi operasi baca dan tulis.

  • Pilih solusi. Pilih solusi penyimpanan yang selaras dengan kebutuhan performa dan skalabilitas Anda. Opsi termasuk menggunakan cache terdistribusi, database, atau layanan status sesi. Pertimbangkan faktor-faktor seperti konsistensi data, latensi, dan skalabilitas saat membuat pilihan Anda.

  • Menyiapkan aplikasi Anda. Perbarui aplikasi Anda untuk menggunakan solusi penyimpanan status sesi yang dipilih. Anda mungkin perlu mengubah file atau kode konfigurasi aplikasi untuk terhubung ke layanan penyimpanan eksternal.

  • Perbarui logika Anda. Ubah logika manajemen sesi aplikasi Anda untuk menyimpan dan mengambil data sesi dari solusi penyimpanan eksternal. Anda mungkin perlu menggunakan API atau pustaka yang disediakan oleh solusi penyimpanan untuk mengelola status sesi.

Hilangkan afinitas klien. Afinitas klien juga dikenal sebagai afinitas sesi atau sesi lengket. Ketika Anda menghilangkan afinitas klien, Anda mendistribusikan permintaan klien secara merata di beberapa replika atau server, tanpa merutekan semua permintaan dari klien ke replika yang sama. Konfigurasi ini dapat meningkatkan skalabilitas dan performa aplikasi dengan memungkinkan replika yang tersedia untuk memproses permintaan.

Tinjau algoritma penyeimbangan beban Anda. Algoritma penyeimbangan beban dapat menyebabkan penyematan klien yang tidak disengaja dan buatan di mana terlalu banyak permintaan dikirim ke satu instans back-end. Penyematan dapat terjadi jika algoritma disiapkan untuk selalu mengirim permintaan dari pengguna yang sama ke instans yang sama. Ini juga dapat terjadi jika permintaan terlalu mirip satu sama lain.

Menghilangkan penguncian data. Penguncian data memastikan konsistensi tetapi memiliki kekurangan performa. Ini dapat menyebabkan eskalasi kunci dan berdampak negatif pada konkurensi, latensi, dan ketersediaan. Untuk menghilangkan penguncian data, Anda harus menerapkan konkurensi optimis. Database nonrelasional harus menggunakan kontrol konkurensi optimis dan memiliki tingkat konsistensi yang tepat. Strategi partisi data Anda juga harus mendukung kebutuhan konkurensi Anda.

Gunakan penemuan layanan dinamis. Penemuan layanan dinamis adalah proses mendeteksi dan mendaftarkan layanan secara otomatis dalam sistem terdistribusi. Ini memungkinkan klien untuk menemukan layanan yang tersedia tanpa digabungkan erat ke instans tertentu. Klien seharusnya tidak dapat mengambil dependensi langsung pada instans tertentu dalam beban kerja. Untuk menghindari dependensi ini, Anda harus menggunakan proksi untuk mendistribusikan dan mendistribusikan ulang koneksi klien. Proksi bertindak sebagai perantara antara klien dan layanan, menyediakan lapisan abstraksi yang memungkinkan layanan ditambahkan atau dihapus tanpa memengaruhi klien.

Gunakan tugas latar belakang. Ketika aplikasi diskalakan, aplikasi dapat menangani peningkatan beban kerja atau jumlah permintaan bersamaan yang lebih tinggi. Membongkar tugas intensif sebagai tugas latar belakang memungkinkan aplikasi utama untuk menangani permintaan pengguna tanpa operasi intensif sumber daya yang luar biasa. Ikuti langkah-langkah ini untuk membongkar tugas sebagai tugas latar belakang:

  1. Temukan tugas intensif CPU dan intensif I/O di aplikasi Anda yang dapat Anda offload. Tugas-tugas ini biasanya melibatkan komputasi berat atau interaksi dengan sumber daya eksternal seperti database atau operasi jaringan.

  2. Rancang aplikasi Anda untuk mendukung tugas latar belakang. Memisahkan tugas intensif dari logika aplikasi utama dan menyediakan mekanisme untuk memulai dan mengelola tugas latar belakang.

  3. Terapkan pemrosesan tugas latar belakang dengan teknologi atau kerangka kerja yang sesuai. Sertakan fitur yang disediakan oleh bahasa atau platform pemrograman Anda, seperti pemrograman asinkron, utas, atau antrean tugas. Berisi operasi intensif dalam tugas atau utas terpisah, tugas ini dapat dijalankan secara bersamaan atau dijadwalkan untuk dijalankan pada interval tertentu.

  4. Distribusikan tugas latar belakang jika ada banyak, atau jika tugas memerlukan waktu atau sumber daya yang substansial. Untuk satu solusi yang memungkinkan, lihat Pola Konsumen yang Bersaing.

Mengonfigurasi penskalaan

Mengonfigurasi penskalaan adalah proses penyiapan dan penyesuaian parameter untuk mengalokasikan sumber daya secara dinamis berdasarkan tuntutan beban kerja. Ini mencakup strategi seperti menggunakan fitur penskalaan otomatis, memahami batas penskalaan layanan, dan menerapkan metrik beban yang bermakna. Konfigurasi yang tepat memastikan bahwa aplikasi dapat menanggapi berbagai tuntutan sekaligus memaksimalkan efisiensi. Saat Anda mengonfigurasi penskalakan, pertimbangkan strategi berikut:

Gunakan layanan dengan autoscaling. Fitur skala otomatis secara otomatis menskalakan infrastruktur untuk memenuhi permintaan. Gunakan penawaran platform as a service (PaaS) dengan fitur skala otomatis bawaan. Kemudahan penskalaan pada PaaS adalah keuntungan utama. Misalnya, penskalaan komputer virtual memerlukan load balancer terpisah, penanganan permintaan klien, dan status tersimpan secara eksternal. Penawaran PaaS menangani sebagian besar tugas ini.

Batasi penskala otomatis. Atur batas penskalaan otomatis untuk meminimalkan penskalaan berlebih yang dapat mengakibatkan biaya yang tidak perlu. Terkadang Anda tidak dapat mengatur batas penskalakan. Dalam kasus ini, Anda harus mengatur pemberitahuan untuk memberi tahu Anda ketika komponen mencapai batas skala maksimum dan skala berlebih.

Pahami batas penskalakan layanan. Saat Anda memahami batas, kenaikan, dan pembatasan penskalaan layanan, Anda dapat membuat keputusan berdasarkan informasi saat memilih layanan. Batas penskalaan menentukan apakah layanan pilihan Anda dapat menangani beban kerja yang diharapkan, menskalakan secara efisien, dan memenuhi persyaratan performa aplikasi Anda. Batas penskalakan yang perlu dipertimbangkan meliputi:

  • Batas penskalan: Batas penskalan adalah kapasitas maksimum yang dapat ditangani oleh lokasi atau layanan. Penting untuk mengetahui batasan ini untuk membantu memastikan bahwa layanan dapat mengakomodasi beban kerja yang diharapkan dan menangani penggunaan puncak tanpa penurunan performa. Setiap sumber daya memiliki batas skala atas. Jika Anda perlu melampaui batas skala, Anda harus mempartisi beban kerja Anda.

  • Kenaikan penskalaan: Skala layanan pada kenaikan yang ditentukan. Misalnya, layanan komputasi mungkin diskalakan berdasarkan instans dan pod sementara database mungkin menskalakan berdasarkan instans, unit transaksi, dan inti virtual. Penting untuk memahami kenaikan ini untuk mengoptimalkan alokasi sumber daya dan mencegah flapping sumber daya.

  • Pembatasan penskalaan: Beberapa layanan memungkinkan Anda untuk meningkatkan atau memperluas skala tetapi membatasi kemampuan Anda untuk secara otomatis membalikkan skala. Anda dipaksa untuk menskalakan secara manual, atau Anda mungkin harus menyebarkan ulang sumber daya baru. Keterbatasan ini sering kali untuk melindungi beban kerja. Penurunan skala atau penskalaan dapat memiliki implikasi pada ketersediaan dan performa beban kerja. Layanan mungkin memberlakukan batasan atau batasan tertentu untuk membantu memastikan bahwa beban kerja memiliki sumber daya yang memadai untuk beroperasi secara efektif. Keterbatasan ini dapat memengaruhi konsistensi dan sinkronisasi data, terutama dalam sistem terdistribusi. Layanan mungkin memiliki mekanisme untuk menangani replikasi data dan konsistensi selama peningkatan atau penskalaan tetapi mungkin tidak memberikan tingkat dukungan yang sama untuk menurunkan atau masuk penskalaan.

Gunakan metrik beban yang bermakna. Penskalakan harus menggunakan metrik beban yang bermakna sebagai pemicu penskalakan. Metrik beban yang bermakna mencakup metrik sederhana, seperti CPU atau memori. Metrik ini juga mencakup metrik yang lebih canggih, seperti kedalaman antrean, kueri SQL, kueri metrik kustom, dan panjang antrean HTTP. Pertimbangkan untuk menggunakan kombinasi metrik beban sederhana dan tingkat lanjut sebagai pemicu penskalaan Anda.

Gunakan buffer. Buffer adalah kapasitas yang tidak digunakan yang dapat digunakan untuk menangani lonjakan permintaan. Rencana beban kerja yang dirancang dengan baik untuk lonjakan beban kerja yang tidak terduga. Anda harus menambahkan buffer untuk menangani lonjakan untuk penskalaan horizontal dan vertikal.

Mencegah flapping. Flapping adalah kondisi perulangan yang terjadi ketika satu peristiwa skala memicu peristiwa skala yang berlawanan, membuat tindakan penskalaan bolak-balik berkelanjutan. Misalnya, jika penskalaan dalam mengurangi jumlah instans, itu dapat menyebabkan penggunaan CPU naik di instans yang tersisa, memicu peristiwa peluasan skala. Peristiwa peluasan skala, pada gilirannya, menyebabkan penggunaan CPU turun, mengulangi proses.

Penting untuk memilih margin yang memadai antara ambang batas peluasan skala dan penyempitan skala untuk menghindari flapping. Anda dapat mencegah tindakan penyempitan skala dan peluasan skala yang sering dan tidak perlu dengan mengatur ambang batas yang memberikan perbedaan signifikan dalam penggunaan CPU.

Gunakan Stempel Penyebaran. Ada teknik yang memudahkan untuk menskalakan beban kerja. Anda dapat menggunakan pola Stempel Penyebaran untuk menskalakan beban kerja dengan mudah dengan menambahkan satu atau beberapa unit skala.

Risiko: Meskipun penskalaan membantu mengoptimalkan biaya dengan menyesuaikan kapasitas untuk memenuhi permintaan, itu dapat mengakibatkan peningkatan biaya secara keseluruhan selama jangka panjang permintaan tinggi.

Menguji penskalaian

Pengujian penskalaan melibatkan simulasi berbagai skenario beban kerja di lingkungan yang terkontrol untuk mengevaluasi bagaimana beban kerja merespons tingkat permintaan yang berbeda. Ini membantu memastikan beban kerja menskalakan secara efisien, memaksimalkan efisiensi performa selama beban yang bervariasi.

Anda perlu memastikan bahwa beban kerja Anda diskalakan secara efisien dalam kondisi dunia nyata. Sangat penting untuk melakukan pengujian beban dan stres di lingkungan yang mencerminkan pengaturan produksi Anda. Pengujian ini, yang dilakukan di lingkungan nonproduksi, memungkinkan Anda untuk mengevaluasi strategi penskalaan vertikal dan horizontal dan menentukan mana yang mengoptimalkan performa yang paling efektif. Berikut adalah pendekatan yang direkomendasikan untuk menguji penskalakan:

  • Tentukan skenario beban kerja. Identifikasi skenario beban kerja utama yang perlu Anda uji, seperti meningkatkan lalu lintas pengguna, permintaan bersamaan, volume data, atau penggunaan sumber daya.

  • Gunakan lingkungan pengujian seperti produksi. Buat lingkungan pengujian terpisah yang sangat menyerupai lingkungan produksi dalam hal infrastruktur, konfigurasi, dan data.

  • Atur metrik performa. Tentukan metrik performa untuk diukur, seperti waktu respons, throughput, pemanfaatan CPU dan memori, dan tingkat kesalahan.

  • Kembangkan kasus pengujian. Kembangkan kasus pengujian yang mensimulasikan skenario beban kerja yang berbeda, secara bertahap meningkatkan beban untuk menilai performa di berbagai tingkatan.

  • Jalankan dan pantau pengujian. Jalankan pengujian menggunakan kasus pengujian yang ditentukan dan kumpulkan data performa di setiap tingkat beban. Pantau perilaku beban kerja, konsumsi sumber daya, dan penurunan performa.

  • Menganalisis dan mengoptimalkan penskalakan. Analisis hasil pengujian untuk mengidentifikasi hambatan performa, keterbatasan skalabilitas, atau area untuk perbaikan. Optimalkan konfigurasi, infrastruktur, atau kode untuk meningkatkan skalabilitas dan performa. Dibutuhkan waktu untuk menyelesaikan penskalaan, jadi uji efek penskalaan penskalaan.

  • Alamat dependensi. Temukan potensi masalah dependensi. Penskalaan atau partisi di satu area beban kerja dapat menyebabkan masalah performa pada dependensi. Bagian stateful dari beban kerja, seperti database, adalah penyebab paling umum dari masalah performa dependensi. Database memerlukan desain yang cermat untuk menskalakan secara horizontal. Anda harus mempertimbangkan langkah-langkah, seperti konkurensi optimis atau pemartisian data, untuk mengaktifkan lebih banyak throughput ke database.

  • Coba lagi setelah penyesuaian. Ulangi pengujian skalabilitas setelah menerapkan pengoptimalan untuk memvalidasi peningkatan dan membantu memastikan beban kerja dapat menangani beban kerja yang diharapkan secara efisien.

Tradeoff: Pertimbangkan batasan anggaran dan tujuan efisiensi biaya beban kerja Anda. Penskalaan vertikal mungkin melibatkan biaya yang lebih tinggi karena kebutuhan akan sumber daya yang lebih besar dan lebih kuat. Penskalan horizontal menawarkan penghematan biaya dengan menggunakan instans yang lebih kecil yang dapat ditambahkan atau dihapus berdasarkan permintaan.

Beban kerja partisi

Pemartisian adalah proses membaru himpunan data besar atau beban kerja menjadi bagian yang lebih kecil dan lebih mudah dikelola yang disebut partisi. Setiap partisi berisi subset data atau beban kerja dan biasanya disimpan atau diproses secara terpisah. Partisi memungkinkan pemrosesan paralel dan mengurangi ketidakcocokan. Membaru beban kerja menjadi unit yang lebih kecil memungkinkan aplikasi memproses setiap unit secara independen. Hasilnya adalah penggunaan sumber daya yang lebih baik dan waktu pemrosesan yang lebih cepat. Partisi juga membantu mendistribusikan data di beberapa perangkat penyimpanan, mengurangi beban pada perangkat individual dan meningkatkan performa keseluruhan.

Memahami partisi

Pendekatan partisi tertentu yang Anda gunakan tergantung pada jenis data atau beban kerja yang Anda miliki dan teknologi yang Anda gunakan. Beberapa strategi umum untuk partisi meliputi:

  • Pemartisian horizontal: Dalam pendekatan ini, himpunan data atau beban kerja dibagi berdasarkan kriteria tertentu, seperti rentang nilai atau atribut tertentu. Setiap partisi berisi subset data yang memenuhi kriteria yang ditentukan.

  • Pemartisian vertikal: Dalam pendekatan ini, himpunan data atau beban kerja dibagi berdasarkan atribut atau kolom tertentu. Setiap partisi berisi subset kolom atau atribut, memungkinkan akses yang lebih efisien ke data yang diperlukan.

  • Pemartisian fungsional: Dalam pendekatan ini, data atau beban kerja dibagi berdasarkan fungsi atau operasi tertentu yang perlu dilakukan. Setiap partisi berisi data atau komponen yang diperlukan untuk fungsi tertentu, memungkinkan pemrosesan dan performa yang dioptimalkan.

Merencanakan partisi

Penting untuk mempertimbangkan faktor-faktor seperti distribusi data, pola kueri, pertumbuhan data, dan persyaratan beban kerja saat pemartisian. Perencanaan dan desain yang tepat sangat penting untuk membantu memastikan efektivitas partisi dan memaksimalkan efisiensi performa. Jika Anda mengatasi partisi sebagai setelahnya, itu lebih menantang karena Anda sudah memiliki beban kerja langsung untuk dipertahankan. Anda mungkin perlu mengubah logika akses data, mendistribusikan data dalam jumlah besar di seluruh partisi, dan mendukung penggunaan berkelanjutan selama distribusi data.

Menerapkan partisi

Penting untuk menganalisis karakteristik data, pola akses, persyaratan konkurensi, dan tujuan skalabilitas Anda saat memutuskan jenis partisi mana yang akan digunakan. Setiap jenis partisi memiliki kelebihan dan pertimbangannya sendiri. Berikut adalah beberapa faktor yang perlu dipertimbangkan untuk setiap jenis partisi:

  • Pemartisian horizontal sesuai ketika Anda ingin mendistribusikan data di beberapa sumber daya atau server untuk skalabilitas dan performa yang lebih baik. Ini efektif ketika beban kerja dapat diparalelkan dan diproses secara independen pada setiap partisi. Pertimbangkan pemartisian horizontal saat beberapa pengguna atau proses harus dapat mengakses atau memperbarui himpunan data secara bersamaan.

  • Pemartisian vertikal sesuai ketika atribut atau kolom tertentu sering diakses, sementara yang lain lebih jarang diakses. Pemartisian vertikal memungkinkan akses yang efisien ke data yang diperlukan dengan meminimalkan pengambilan data yang tidak perlu.

  • Pemartisian fungsi ini sesuai ketika fungsi yang berbeda memerlukan subset data yang berbeda dan dapat diproses secara independen. Pemartisian fungsi dapat mengoptimalkan performa dengan memungkinkan setiap partisi untuk memfokuskan operasi tertentu.

Menguji dan mengoptimalkan partisi

Uji skema partisi untuk memverifikasi efektivitas dan efisiensi strategi sehingga Anda dapat melakukan penyesuaian untuk meningkatkan performa. Mengukur faktor-faktor seperti waktu respons, throughput, dan skalabilitas. Bandingkan hasilnya dengan tujuan performa dan identifikasi hambatan atau masalah apa pun. Berdasarkan analisis, identifikasi potensi peluang pengoptimalan. Anda mungkin perlu mendistribusikan ulang data di seluruh partisi, menyesuaikan ukuran partisi, atau mengubah kriteria partisi.

Tradeoff: Partisi menambah kompleksitas pada desain dan pengembangan beban kerja. Pemartisian memerlukan percakapan dan perencanaan antara pengembang dan administrator database.

Risiko: Partisi memperkenalkan beberapa potensi masalah yang perlu dipertimbangkan dan ditangani, termasuk:

  • Penyimpangan data: Pemartisian dapat menyebabkan kemiringan data, di mana partisi tertentu menerima jumlah data atau beban kerja yang tidak proporsional dibandingkan dengan yang lain. Kecondongan data dapat mengakibatkan ketidakseimbangan performa dan peningkatan ketidakcocokan pada partisi tertentu.

  • Performa kueri: Skema partisi yang dirancang dengan buruk dapat berdampak negatif pada performa kueri. Jika kueri perlu mengakses data di beberapa partisi, kueri mungkin memerlukan koordinasi dan komunikasi ekstra antar partisi, yang mengarah ke peningkatan latensi.

Fasilitasi Azure

Mengoptimalkan penskalaan. Azure memiliki kapasitas infrastruktur untuk mendukung penskalakan vertikal dan horizontal. Layanan Azure memiliki tingkat performa yang berbeda yang dikenal sebagai SKU. SKU memungkinkan Anda untuk menskalakan secara vertikal. Banyak sumber daya Azure mendukung penskalaan otomatis atau opsi skala di tempat lainnya. Beberapa sumber daya mendukung metrik tingkat lanjut atau input kustom untuk mendukung perilaku penskalakan penyempurnaan. Sebagian besar implementasi penskalaan di Azure dapat menetapkan batas dan mendukung pengamatan yang diperlukan untuk diperingatkan untuk berubah.

Azure Monitor memungkinkan Anda memantau berbagai metrik dan kondisi dalam aplikasi dan infrastruktur Anda. Anda dapat menggunakan Monitor untuk memicu tindakan penskalakan otomatis berdasarkan aturan yang telah ditentukan sebelumnya. Misalnya, di Azure Kubernetes Service (AKS), Anda dapat menggunakan Monitor untuk mengaktifkan penskalaan otomatis pod horizontal (HPA) dan penskalaan otomatis kluster. Dengan kemampuan pemantauan dan pemberitahuan Monitor, Anda dapat secara efektif memfasilitasi penskalaan di Azure dan membantu memastikan bahwa aplikasi dan infrastruktur Anda dapat menyesuaikan secara dinamis untuk memenuhi permintaan.

Anda juga dapat membangun penskalakan otomatis kustom di Azure. Anda dapat menggunakan pemberitahuan di Monitor untuk sumber daya yang tidak memiliki fitur skala otomatis. Pemberitahuan ini dapat disiapkan menjadi berbasis kueri atau berbasis metrik dan dapat melakukan tindakan menggunakan Azure Automation. Automation menyediakan platform untuk menghosting dan menjalankan kode PowerShell dan Python di seluruh Azure, cloud, dan lingkungan lokal. Ini menawarkan fitur seperti menyebarkan runbook sesuai permintaan atau sesuai jadwal, menjalankan riwayat dan pengelogan, penyimpanan rahasia terintegrasi, dan integrasi kontrol sumber.

Merancang aplikasi untuk diskalakan: Berikut adalah beberapa cara Azure memfasilitasi desain penskalakan aplikasi;

  • Menghilangkan penguncian data: Di Azure SQL Database, Anda dapat mengaktifkan penguncian yang dioptimalkan untuk meningkatkan performa pada database yang memerlukan konsistensi ketat.

  • Menggunakan tugas latar belakang: Azure menawarkan layanan dan panduan untuk menerapkan pekerjaan latar belakang. Untuk informasi selengkapnya, lihat Pekerjaan latar belakang.

  • Menerapkan penyeimbangan beban: Azure menyediakan load balancer yang tidak memerlukan afinitas klien. Penyeimbang beban ini termasuk Azure Front Door, Azure Application Gateway, dan Azure Load Balancer.

Mempartisi beban kerja: Azure menawarkan berbagai strategi partisi untuk penyimpanan data yang berbeda. Strategi ini membantu meningkatkan performa dan skalabilitas dengan mendistribusikan data di beberapa partisi. Untuk informasi selengkapnya, lihat Strategi partisi data.

Daftar periksa Efisiensi Performa

Lihat serangkaian rekomendasi lengkap.