Pola Antrean Prioritas

Azure Service Bus

Pola antrean prioritas memungkinkan beban kerja memproses tugas berprioritas tinggi lebih cepat daripada tugas berprioritas lebih rendah. Pola ini menggunakan pesan yang dikirim ke satu atau beberapa antrean dan berguna dalam aplikasi yang menawarkan jaminan tingkat layanan yang berbeda kepada klien individual.

Konteks dan masalah

Beban kerja sering kali perlu mengelola dan memproses tugas dengan berbagai tingkat kepentingan dan urgensi. Beberapa tugas memerlukan perhatian segera sementara yang lain dapat menunggu. Kegagalan untuk mengatasi tugas berprioritas tinggi dapat memengaruhi pengalaman pengguna dan melanggar perjanjian tingkat layanan (SLA).

Untuk menangani tugas secara efisien berdasarkan prioritasnya, beban kerja memerlukan mekanisme untuk memprioritaskan dan menjalankan tugas yang sesuai. Biasanya, beban kerja memproses tugas sesuai urutan kedatangannya, menggunakan struktur antrean first-in, first-out (FIFO). Pendekatan ini tidak memperhitungkan berbagai kepentingan tugas.

Solusi

Antrean prioritas memungkinkan beban kerja memproses tugas berdasarkan prioritasnya daripada urutan kedatangannya. Aplikasi yang mengirim pesan ke antrean menetapkan prioritas ke pesan, dan konsumen memproses pesan berdasarkan prioritas. Gunakan pola antrean prioritas saat Anda memiliki persyaratan berikut:

  • Menangani tugas dengan berbagai urgensi dan kepentingan. Anda memiliki tugas dengan tingkat urgensi dan kepentingan yang berbeda dan perlu memastikan Anda memproses tugas yang lebih penting sebelum tugas yang kurang penting.

  • Tangani perjanjian tingkat layanan yang berbeda. Anda menawarkan jaminan tingkat layanan yang berbeda kepada klien yang diperlukan dan perlu memastikan klien berprioritas tinggi menerima performa dan ketersediaan yang lebih baik.

  • Mengakomodasi berbagai kebutuhan manajemen beban kerja. Anda memiliki beban kerja yang perlu segera mengatasi tugas tertentu dan tugas yang kurang mendesak dapat menunggu.

Ada dua pendekatan utama untuk menerapkan pola Antrean Prioritas:

  • Antrean tunggal: Semua pesan dikirim ke satu antrean dan setiap pesan diberi prioritas.

  • Beberapa antrean: Antrean terpisah digunakan untuk setiap prioritas pesan.

Antrean tunggal

Dengan satu antrean, aplikasi (produsen) menetapkan prioritas untuk setiap pesan dan mengirim pesan ke antrean. Antrean memesan pesan berdasarkan prioritas, memastikan bahwa konsumen memproses pesan berprioritas lebih tinggi sebelum pesan berprioritas lebih rendah.

Diagram yang mengilustrasikan mekanisme antrean yang mendukung prioritas pesan.
Gambar 1. Arsitektur antrean tunggal dan kumpulan konsumen tunggal

Beberapa antrean

Beberapa antrean memungkinkan Anda memisahkan pesan berdasarkan prioritas. Aplikasi menetapkan prioritas untuk setiap pesan dan mengarahkan pesan ke antrean yang sesuai dengan prioritasnya. Konsumen memproses pesan. Solusi beberapa antrean menggunakan satu kumpulan konsumen atau beberapa kumpulan konsumen.

Beberapa kumpulan konsumen

Dengan beberapa kumpulan konsumen, setiap antrean memiliki sumber daya konsumen yang didedikasikan untuknya. Antrean prioritas yang lebih tinggi harus menggunakan lebih banyak konsumen atau tingkat performa yang lebih tinggi untuk memproses pesan lebih cepat daripada antrean prioritas yang lebih rendah.

Gunakan beberapa kumpulan konsumen saat Anda memiliki:

  • Persyaratan performa yang ketat: Beberapa kumpulan konsumen diperlukan ketika prioritas tugas yang berbeda memiliki persyaratan performa ketat yang harus dipenuhi secara independen.
  • Kebutuhan keandalan tinggi: Beberapa kumpulan konsumen diperlukan untuk aplikasi di mana keandalan dan isolasi kesalahan sangat penting. Masalah dalam satu antrean tidak boleh memengaruhi antrean lain.
  • Aplikasi kompleks: Bermanfaat untuk aplikasi kompleks dengan tugas yang memerlukan karakteristik pemrosesan dan jaminan performa yang berbeda untuk tugas yang berbeda.

Diagram yang mengilustrasikan penggunaan antrean pesan terpisah untuk setiap prioritas.
Gambar 2. Arsitektur beberapa antrean dan beberapa kumpulan konsumen.

Kumpulan konsumen tunggal

Dengan satu kumpulan konsumen, semua antrean berbagi satu kumpulan konsumen. Konsumen memproses pesan dari antrean prioritas tertinggi terlebih dahulu dan hanya memproses pesan dari antrean prioritas yang lebih rendah ketika tidak ada pesan berprioritas tinggi. Akibatnya, kumpulan konsumen tunggal selalu memproses pesan prioritas yang lebih tinggi sebelum yang berprioritas lebih rendah. Penyiapan ini dapat menyebabkan pesan prioritas yang lebih rendah terus tertunda dan berpotensi tidak pernah diproses.

Gunakan satu kumpulan konsumen untuk:

  • Manajemen sederhana: Satu kumpulan konsumen cocok untuk aplikasi di mana kemudahan pengaturan dan pemeliharaan adalah prioritas. Ini mengurangi kompleksitas konfigurasi dan pemantauan.
  • Kebutuhan pemrosesan terpadu: Satu kumpulan konsumen berguna ketika sifat yang tepat dari tugas masuk serupa.

Diagram yang mengilustrasikan penggunaan antrean pesan terpisah untuk setiap prioritas.
Gambar 3. Arsitektur beberapa antrean dan satu kumpulan konsumen.

Rekomendasi untuk pola Antrean Prioritas

Pertimbangkan rekomendasi berikut saat Anda memutuskan cara menerapkan pola antrean prioritas:

Rekomendasi umum

  • Tentukan prioritas dengan jelas. Tetapkan tingkat prioritas yang berbeda dan jelas yang relevan dengan solusi Anda. Misalnya, pesan berprioritas tinggi mungkin memerlukan pemrosesan dalam waktu 10 detik. Identifikasi persyaratan untuk menangani item berprioritas tinggi dan alokasikan sumber daya yang diperlukan.

  • Sesuaikan kumpulan konsumen secara dinamis. Skalakan ukuran kumpulan konsumen berdasarkan panjang antrean yang mereka servis.

  • Prioritaskan tingkat layanan. Terapkan antrean prioritas untuk memenuhi kebutuhan bisnis yang memerlukan ketersediaan atau performa yang diprioritaskan. Misalnya, grup pelanggan yang berbeda dapat menerima berbagai tingkat layanan sehingga pelanggan berprioritas tinggi mengalami performa dan ketersediaan yang lebih baik.

  • Pastikan pemrosesan berprioritas rendah. Dalam antrean yang mendukung prioritas pesan, secara dinamis meningkatkan prioritas pesan berumur jika sistem memungkinkannya untuk memastikan pesan berprioritas rendah pada akhirnya diproses.

  • Pertimbangkan biaya antrean. Perhatikan biaya keuangan dan pemrosesan yang terkait dengan antrean pemeriksaan. Beberapa layanan antrean membebankan biaya untuk memposting, mengambil, dan mengkueri pesan, yang dapat meningkat dengan jumlah antrean.

Rekomendasi beberapa antrean

  • Memantau kecepatan pemrosesan. Untuk memastikan bahwa pesan diproses pada tingkat yang diharapkan, terus memantau kecepatan pemrosesan antrean berprioritas tinggi dan rendah.

  • Meminimalkan biaya. Segera proses tugas penting dengan konsumen yang tersedia. Jadwalkan tugas latar belakang yang kurang penting selama waktu yang kurang sibuk.

Rekomendasi kumpulan konsumen tunggal

  • Menerapkan preemption dan suspensi. Putuskan apakah semua item berprioritas tinggi harus diproses sebelum item berprioritas lebih rendah. Gunakan algoritma yang memastikan antrean berprioritas tinggi selalu dilayankan sebelum antrean berprioritas lebih rendah saat menggunakan satu kumpulan konsumen untuk beberapa antrean.

  • Optimalkan biaya. Optimalkan biaya operasional dengan menskalakan kembali jumlah konsumen saat menggunakan pendekatan antrean tunggal. Pesan berprioritas tinggi memproses terlebih dahulu, meskipun mungkin lebih lambat, sementara pesan berprioritas lebih rendah mungkin menghadapi penundaan yang lebih lama.

Desain beban kerja

Arsitek harus mengevaluasi bagaimana pola Antrean Prioritas dapat mengatasi tujuan dan prinsip yang tercakup dalam pilar Azure Well-Architected Framework. Contohnya:

Pilar Bagaimana pola ini mendukung tujuan pilar
Keputusan desain keandalan membantu beban kerja Anda menjadi tahan terhadap kerusakan dan untuk memastikan bahwa keputusan tersebut pulih ke status berfungsi penuh setelah kegagalan terjadi. Memisahkan item berdasarkan prioritas bisnis memungkinkan Anda memfokuskan upaya keandalan pada pekerjaan yang paling penting.

- ALUR KRITIS RE:02
- Pekerjaan latar belakang RE:07
Efisiensi Performa membantu beban kerja Anda memenuhi tuntutan secara efisien melalui pengoptimalan dalam penskalaan, data, kode. Memisahkan item berdasarkan prioritas bisnis memungkinkan Anda memfokuskan upaya performa pada pekerjaan yang paling sensitif terhadap waktu.

- ALUR KRITIS PE:09

Seperti halnya keputusan desain apa pun, pertimbangkan tradeoff terhadap tujuan pilar lain yang mungkin diperkenalkan dengan pola ini.

Contoh pola Antrean Prioritas

Contoh berikut di GitHub menunjukkan implementasi pola Antrean Prioritas menggunakan Azure Bus Layanan.

Diagram yang menunjukkan cara menerapkan antrean prioritas dengan menggunakan Bus Layanan.
Gambar 4. Arsitektur contoh PriorityQueue di GitHub

Berikut adalah gambaran umum arsitektur:

  • Aplikasi (produsen): Contoh memiliki aplikasi (PriorityQueueSender) yang membuat pesan dan menetapkan properti kustom yang disebut Priority di setiap pesan. Priority memiliki nilai High atau Low.

  • Broker pesan dan antrean: Contohnya menggunakan Azure Bus Layanan sebagai broker pesan. Ini menggunakan dua antrean Azure Bus Layanan, satu untuk setiap prioritas pesan (High dan Low). Aplikasi (produsen) mengirim pesan ke antrean yang benar berdasarkan pesan Priority.

  • Beberapa kumpulan konsumen: Contohnya menggunakan beberapa kumpulan konsumen (PriorityQueueConsumerHigh dan PriorityQueueConsumerLow) yang didedikasikan untuk membaca pesan dari setiap antrean.

Peran dalam contoh arsitektur Layanan Azure dalam contoh Nama dalam contoh
Aplikasi Aplikasi Azure Functions PriorityQueueSender
Broker antrean pesan Azure Service Bus <namespace bus layanan Anda>
Antrean pesan Antrian Azure Service Bus <nama antrean Anda>
Konsumen Aplikasi Azure Functions PriorityQueueConsumerHigh
PriorityQueueConsumerLow

Pola berikut mungkin berguna bagi Anda ketika Anda menerapkan pola ini:

  • Pola Konsumen yang Bersaing: Pola ini melibatkan penerapan beberapa konsumen yang mendengarkan tugas antrean dan proses yang sama secara paralel untuk meningkatkan throughput. Hanya satu konsumen yang memproses setiap pesan. Artikel ini memberikan informasi terperinci tentang kelebihan dan kekurangan pendekatan ini.

  • Pola pembatasan: Pola ini dapat diimplementasikan menggunakan antrean untuk mengelola tingkat permintaan. Dengan menggunakan olahpesan prioritas, permintaan dari aplikasi penting atau pelanggan bernilai tinggi dapat diprioritaskan daripada yang kurang penting.