Pola desain cloud yang mendukung efisiensi performa

Saat Merancang arsitektur beban kerja, Anda harus menggunakan pola industri yang mengatasi tantangan umum. Pola dapat membantu Anda melakukan tradeoff yang disengaja dalam beban kerja dan mengoptimalkan hasil yang Anda inginkan. Mereka juga dapat membantu mengurangi risiko yang berasal dari masalah tertentu, yang dapat memengaruhi keandalan, keamanan, biaya, dan operasi. Jika tidak dimitigasi, risiko pada akhirnya akan menyebabkan inefisiensi performa. Pola-pola ini didukung oleh pengalaman dunia nyata, dirancang untuk skala cloud dan model operasi, dan secara inheren vendor agnostik. Menggunakan pola terkenal sebagai cara untuk menstandarkan desain beban kerja Anda adalah komponen keunggulan operasional.

Banyak pola desain secara langsung mendukung satu atau beberapa pilar arsitektur. Pola desain yang mendukung skalabilitas alamat pilar Efisiensi Performa, penyetelan performa, prioritas tugas, dan penghapusan hambatan.

Pola desain untuk efisiensi performa

Tabel berikut ini meringkas pola desain cloud yang mendukung tujuan efisiensi performa.

Pola Ringkasan
Balasan Permintaan Asinkron Meningkatkan responsivitas dan skalabilitas sistem dengan memisahkan fase permintaan dan membalas interaksi untuk proses yang tidak memerlukan jawaban langsung. Dengan menggunakan pola asinkron, Anda dapat memaksimalkan konkurensi di sisi server. Anda dapat menggunakan pola ini untuk menjadwalkan pekerjaan yang akan diselesaikan sesuai kapasitas yang memungkinkan.
Backend untuk Frontend Individualisasi lapisan layanan beban kerja dengan membuat layanan terpisah yang eksklusif untuk antarmuka frontend tertentu. Pemisahan ini memungkinkan Anda untuk mengoptimalkan dengan cara yang mungkin tidak dimungkinkan dengan lapisan layanan bersama. Saat Menangani klien individual secara berbeda, Anda dapat mengoptimalkan performa untuk batasan dan fungsionalitas klien tertentu.
Sekat Memperkenalkan segmentasi antar komponen untuk mengisolasi radius ledakan kerusakan. Desain ini memungkinkan setiap massal untuk dapat diskalakan secara individual untuk memenuhi kebutuhan tugas yang dienkapsulasi dalam sekat.
Selain Cache Mengoptimalkan akses ke data yang sering dibaca dengan memperkenalkan cache yang diisi sesuai permintaan. Cache kemudian digunakan pada permintaan berikutnya untuk data yang sama. Pola ini sangat berguna dengan data baca-berat yang tidak sering berubah dan dapat mentolerir sejumlah keusangan tertentu. Tujuan dari implementasi ini adalah untuk memberikan performa yang lebih baik dalam sistem secara keseluruhan dengan membongkar jenis data ini ke cache alih-alih mendapatkannya dari penyimpanan datanya.
Koreografi Mengoordinasikan perilaku komponen terdistribusi otonom dalam beban kerja dengan menggunakan komunikasi terdesentralisasi dan berbasis peristiwa. Pola ini dapat memberikan alternatif ketika penyempitan performa terjadi dalam topologi orkestrasi terpusat.
Pemutus Sirkuit Mencegah permintaan berkelanjutan ke dependensi yang tidak berfungsi atau tidak tersedia. Pendekatan coba lagi kesalahan dapat menyebabkan pemanfaatan sumber daya yang berlebihan selama pemulihan dependensi dan juga dapat membebani performa pada dependensi yang mencoba pemulihan.
Pemeriksaan Klaim Memisahkan data dari alur olahpesan, menyediakan cara untuk mengambil data yang terkait dengan pesan secara terpisah. Pola ini meningkatkan efisiensi dan performa penerbit pesan, pelanggan, dan bus pesan itu sendiri ketika sistem menangani payload data besar. Ini bekerja dengan mengurangi ukuran pesan dan memastikan bahwa konsumen mengambil data payload hanya jika perlu dan pada waktu yang singkat.
Konsumen yang Bersaing Menerapkan pemrosesan terdistribusi dan bersamaan untuk menangani item secara efisien dalam antrean. Model ini mendukung distribusi beban di semua simpul konsumen dan penskalakan dinamis yang didasarkan pada kedalaman antrean.
Konsolidasi Sumber Daya Komputasi Mengoptimalkan dan mengonsolidasikan sumber daya komputasi dengan meningkatkan kepadatan. Pola ini menggabungkan beberapa aplikasi atau komponen beban kerja pada infrastruktur bersama. Konsolidasi ini memaksimalkan pemanfaatan sumber daya komputasi dengan menggunakan kapasitas simpul cadangan untuk mengurangi provisi berlebih. Orkestrator kontainer adalah contoh umum. Instans komputasi besar (diskalakan secara vertikal) sering digunakan dalam kumpulan sumber daya untuk infrastruktur ini.
Pemisahan Tanggung Jawab Perintah dan Kueri (CQRS) Memisahkan operasi baca dan tulis model data aplikasi. Pemisahan ini memungkinkan performa yang ditargetkan dan pengoptimalan penskalaan untuk tujuan spesifik setiap operasi. Desain ini paling membantu dalam aplikasi yang memiliki rasio baca-ke-tulis yang tinggi.
Stempel Penyebaran Menyediakan pendekatan untuk merilis versi aplikasi tertentu dan infrastrukturnya sebagai unit penyebaran yang terkontrol, berdasarkan asumsi bahwa versi yang sama atau berbeda akan disebarkan secara bersamaan. Pola ini sering selaras dengan unit skala yang ditentukan dalam beban kerja Anda: karena kapasitas tambahan diperlukan di luar apa yang disediakan unit skala tunggal, stempel penyebaran tambahan disebarkan untuk penskalaan.
Sumber Peristiwa Memperlakukan perubahan status sebagai serangkaian peristiwa, menangkapnya dalam log khusus tambahan yang tidak dapat diubah. Bergantung pada beban kerja Anda, pola ini, biasanya dikombinasikan dengan CQRS, desain domain yang sesuai, dan rekam jepret strategis, dapat meningkatkan performa. Peningkatan performa disebabkan oleh operasi tambahan-saja atomik dan menghindari penguncian database untuk menulis dan membaca.
Identitas Federasi Mendelegasikan kepercayaan ke penyedia identitas yang berada di luar beban kerja untuk mengelola pengguna dan menyediakan autentikasi untuk aplikasi Anda. Saat membongkar manajemen dan autentikasi pengguna, Anda dapat mencurikan sumber daya aplikasi ke prioritas lain.
Gatekeeper Membongkar pemrosesan permintaan yang khusus untuk penegakan keamanan dan kontrol akses sebelum dan sesudah meneruskan permintaan ke simpul backend. Pola ini sering digunakan untuk menerapkan pembatasan pada tingkat gateway daripada menerapkan pemeriksaan laju di tingkat simpul. Status laju koordinasi di antara semua simpul tidak secara inheren berkinerja.
Agregasi Gateway Menyederhanakan interaksi klien dengan beban kerja Anda dengan menggabungkan panggilan ke beberapa layanan backend dalam satu permintaan. Desain ini dapat menimbulkan lebih sedikit latensi daripada desain di mana klien membuat beberapa koneksi. Penembolokan juga umum dalam implementasi agregasi karena meminimalkan panggilan ke sistem backend.
Pembongkaran Gateway Membongkar pemrosesan permintaan ke perangkat gateway sebelum dan sesudah meneruskan permintaan ke simpul backend. Menambahkan gateway offloading ke proses permintaan memungkinkan Anda menggunakan lebih sedikit sumber daya per simpul karena fungsionalitas terpusat di gateway. Anda dapat mengoptimalkan implementasi fungsionalitas yang dibongkar secara independen dari kode aplikasi. Fungsionalitas yang disediakan platform yang dibongkar sudah cenderung berkinerja tinggi.
Perutean Gateway Merutekan permintaan jaringan masuk ke berbagai sistem backend berdasarkan niat permintaan, logika bisnis, dan ketersediaan backend. Perutean gateway memungkinkan Anda mendistribusikan lalu lintas di seluruh simpul di sistem Anda untuk menyeimbangkan beban.
Geode Menyebarkan sistem yang beroperasi dalam mode ketersediaan aktif-aktif di beberapa geografi. Pola ini menggunakan replikasi data untuk mendukung ideal bahwa setiap klien dapat terhubung ke instans geografis apa pun. Anda dapat menggunakannya untuk melayani aplikasi Anda dari wilayah yang paling dekat dengan basis pengguna terdistribusi Anda. Melakukannya mengurangi latensi dengan menghilangkan lalu lintas jarak jauh dan karena Anda berbagi infrastruktur hanya di antara pengguna yang saat ini menggunakan geode yang sama.
Pemantauan Titik Akhir Kesehatan Menyediakan cara untuk memantau kesehatan atau status sistem dengan mengekspos titik akhir yang dirancang khusus untuk tujuan tersebut. Anda dapat menggunakan titik akhir ini untuk meningkatkan penyeimbangan beban dengan merutekan lalu lintas hanya ke simpul yang diverifikasi sebagai sehat. Dengan konfigurasi tambahan, Anda juga bisa mendapatkan metrik pada kapasitas simpul yang tersedia.
Tabel Indeks Mengoptimalkan pengambilan data di penyimpanan data terdistribusi dengan memungkinkan klien mencari metadata sehingga data dapat langsung diambil, menghindari kebutuhan untuk melakukan pemindaian penyimpanan data penuh. Klien diarahkan ke shard, partisi, atau titik akhir mereka, yang dapat mengaktifkan partisi data dinamis untuk pengoptimalan performa.
Tampilan Materialisasi Menggunakan tampilan data yang telah dikomputasi sebelumnya untuk mengoptimalkan pengambilan data. Tampilan materialisasi menyimpan hasil komputasi atau kueri yang kompleks tanpa mengharuskan mesin database atau klien untuk mengolah ulang setiap permintaan. Desain ini mengurangi konsumsi sumber daya secara keseluruhan.
Antrean Prioritas Memastikan bahwa item berprioritas lebih tinggi diproses dan diselesaikan sebelum item berprioritas lebih rendah. Memisahkan item berdasarkan prioritas bisnis memungkinkan Anda memfokuskan upaya performa pada pekerjaan yang paling sensitif terhadap waktu.
Penerbit/Pelanggan Memisahkan komponen arsitektur dengan mengganti komunikasi klien-ke-layanan atau klien-ke-layanan langsung dengan komunikasi melalui broker pesan perantara atau bus peristiwa. Pemisahan penerbit dari konsumen memungkinkan Anda mengoptimalkan komputasi dan kode khusus untuk tugas yang perlu dilakukan konsumen untuk pesan tertentu.
Perataan Beban Berbasis Antrean Mengontrol tingkat permintaan atau tugas masuk dengan menyangganya dalam antrean dan membiarkan prosesor antrean menanganinya dengan kecepatan terkontrol. Pendekatan ini memungkinkan desain yang disengaja pada performa throughput karena asupan permintaan tidak perlu berkorelasi dengan tingkat di mana permintaan diproses.
Scheduler Agent Supervisor Mendistribusikan dan mendistribusikan ulang tugas secara efisien di seluruh sistem berdasarkan faktor-faktor yang dapat diamati dalam sistem. Pola ini menggunakan metrik performa dan kapasitas untuk mendeteksi pemanfaatan saat ini dan merutekan tugas ke agen yang memiliki kapasitas. Anda juga dapat menggunakannya untuk memprioritaskan eksekusi pekerjaan prioritas yang lebih tinggi daripada pekerjaan prioritas yang lebih rendah.
Sharding Mengarahkan beban ke tujuan logis tertentu untuk menangani permintaan tertentu, memungkinkan kolokasi untuk pengoptimalan. Saat Anda menggunakan sharding dalam strategi penskalaan Anda, data atau pemrosesan diisolasi ke shard, sehingga hanya bersaing untuk sumber daya dengan permintaan lain yang diarahkan ke shard tersebut. Anda juga dapat menggunakan sharding untuk mengoptimalkan berdasarkan geografi.
Sidecar Memperluas fungsionalitas aplikasi dengan merangkum tugas non-primer atau lintas pemotongan dalam proses pendamping yang ada bersama aplikasi utama. Anda dapat memindahkan tugas lintas pemotongan ke satu proses yang dapat menskalakan di beberapa instans proses utama, yang mengurangi kebutuhan untuk menyebarkan fungsionalitas duplikat untuk setiap instans aplikasi.
Hosting Konten Statik Mengoptimalkan pengiriman konten statis ke klien beban kerja dengan menggunakan platform hosting yang dirancang untuk tujuan tersebut. Membongkar tanggung jawab ke host eksternal membantu mengurangi kemacetan dan memungkinkan Anda untuk menggunakan platform aplikasi Anda hanya untuk memberikan logika bisnis.
Pembatasan Memberlakukan batasan pada laju atau throughput permintaan masuk ke sumber daya atau komponen. Ketika sistem berada di bawah permintaan tinggi, pola ini membantu mengurangi kemacetan yang dapat menyebabkan penyempitan performa. Anda juga dapat menggunakannya untuk secara proaktif menghindari skenario tetangga yang berisik.
Kunci Valet Memberikan akses terbatas keamanan ke sumber daya tanpa menggunakan sumber daya perantara untuk memproksi akses. Melakukannya membongkar pemrosesan sebagai hubungan eksklusif antara klien dan sumber daya tanpa memerlukan komponen duta besar yang perlu menangani semua permintaan klien dengan cara yang berkinerja. Manfaat menggunakan pola ini paling signifikan ketika proksi tidak menambahkan nilai ke transaksi.

Langkah berikutnya

Tinjau pola desain cloud yang mendukung pilar Azure Well-Architected Framework lainnya: