Bagikan melalui


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 dengan urutan kedatangan, 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 antrean tunggal, aplikasi (produsen) menetapkan prioritas bagi setiap pesan dan mengirim pesan ke dalam 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 mengelompokkan pesan berdasarkan prioritas. Aplikasi menetapkan prioritas untuk setiap pesan dan mengarahkan pesan ke antrean yang sesuai dengan prioritasnya. Konsumen memproses pesan. Solusi antrian ganda 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 yang sudah lama jika sistem memungkinkan, 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 bertambah 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 selesaikan tugas krusial dengan pengguna yang tersedia. Jadwalkan tugas latar belakang yang kurang penting selama waktu yang kurang sibuk.

Rekomendasi kumpulan konsumen tunggal

  • Menerapkan prinsip preemption dan penangguhan. 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 Anda menggunakan satu kumpulan konsumen untuk beberapa antrean.

  • Optimalkan biaya. Optimalkan biaya operasional dengan mengurangi jumlah konsumen saat Anda menggunakan pendekatan antrian 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 kerangka kerja Azure Well-Architected. Contohnya:

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

- RE:02 Alur Kritis
- RE:07 Pekerjaan latar belakang
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.

- PE:09 Alur Kritis

Seperti halnya keputusan desain apa pun, pertimbangkan kompromi terhadap tujuan dari pilar-pilar lainnya yang mungkin diperkenalkan dengan pola ini.

Contoh pola desain Antrean Prioritas

Contoh berikut dalam GitHub menunjukkan implementasi pola Antrean Prioritas menggunakan Azure Service Bus.

Diagram yang menunjukkan cara menerapkan antrean prioritas dengan menggunakan Service Bus.
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 antrian: Contohnya menggunakan Azure Service Bus sebagai broker pesan. Ini menggunakan dua antrean Azure Service Bus, satu untuk setiap prioritas pesan (High dan Low). Aplikasi (produsen) mengirim pesan ke antrean yang benar berdasarkan pesan Priority.

  • Beberapa kumpulan konsumen: Contoh ini 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 layanan bus Anda>
Antrean pesan antrean Azure Service Bus < nama antrean Anda>
Konsumen aplikasi Azure Functions PrioritasAntreanKonsumenTinggi
KonsumenAntreanPrioritasRendah

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

  • Pola Konsumen yang Bersaing: Pola ini melibatkan penerapan beberapa konsumen yang mendengarkan antrean yang sama dan memproses tugas 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.