Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Prioritaskan permintaan yang dikirim ke layanan sehingga beban kerja memproses permintaan berprioritas tinggi lebih cepat daripada yang berprioritas lebih rendah. Pendekatan ini menggunakan pesan yang dikirim ke satu atau beberapa antrean dan berguna untuk aplikasi yang menyediakan tingkat layanan atau perjanjian tingkat layanan (SLA) yang berbeda ke berbagai jenis permintaan atau pelanggan.
Konteks dan masalah
Beban kerja mungkin 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 SLA.
Untuk menangani tugas secara efisien berdasarkan prioritasnya, beban kerja memerlukan mekanisme untuk memproses dan menjalankan tugas yang sesuai. Secara bawaan, sebagian besar beban kerja memproses tugas sesuai urutan kedatangannya, menggunakan struktur antrean masuk pertama, keluar pertama (FIFO). Pendekatan ini tidak memperhitungkan berbagai kepentingan tugas.
Solusi
Antrian prioritas memungkinkan beban kerja memproses tugas berdasarkan prioritasnya, alih-alih secara ketat mengikuti urutan kedatangannya. Aplikasi atau produsen yang mengirim permintaan menetapkan nilai prioritas ke pesan, dan konsumen memproses pesan berdasarkan prioritas. Pola Antrean Prioritas membahas 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.
Menangani SLA yang berbeda: Anda menawarkan SLA yang berbeda kepada pelanggan yang berbeda dan perlu memastikan pelanggan 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 sementara tugas yang kurang mendesak dapat menunggu.
Ada dua pendekatan utama untuk menerapkan pola Antrean Prioritas:
Antrean tunggal: Setiap pesan diberi nilai prioritas, dan semua pesan menggunakan antrean yang sama.
Beberapa antrean: Setiap pesan diberi nilai prioritas, dan pesan berprioritas berbeda menggunakan antrean terpisah.
Antrean tunggal
Dalam satu pendekatan antrean, aplikasi menetapkan prioritas untuk setiap pesan dan mengirim semua pesan ke satu antrean. Antrean memesan pesan berdasarkan prioritas, memastikan bahwa konsumen memproses pesan berprioritas lebih tinggi sebelum pesan berprioritas lebih rendah.
Beberapa antrean
Beberapa antrean memisahkan pesan berdasarkan prioritas. Aplikasi menetapkan prioritas untuk setiap pesan dan mengarahkan pesan ke antrean yang sesuai dengan prioritasnya, di mana konsumen memproses pesan. Solusi multiantrian dapat menggunakan satu kumpulan konsumen atau beberapa kumpulan konsumen.
Kumpulan konsumen tunggal
Dalam konfigurasi kumpulan tunggal, semua antrean menggunakan kumpulan konsumen yang sama. Konsumen memproses pesan dari antrean prioritas tertinggi terlebih dahulu dan memproses pesan dari antrean berprioritas lebih rendah hanya ketika tidak ada lagi pesan berprioritas tinggi. Akibatnya, kumpulan konsumen tunggal selalu memproses pesan berprioritas lebih tinggi sebelum yang berprioritas lebih rendah. Penyiapan ini dapat menyebabkan pesan berprioritas lebih rendah terus tertunda dan berpotensi tidak pernah diproses.
Gunakan satu kumpulan konsumen karena alasan berikut:
Manajemen sederhana. Gunakan satu kumpulan konsumen saat penyiapan dan pemeliharaan yang mudah adalah prioritas. Satu kumpulan mengurangi kompleksitas konfigurasi dan pemantauan.
Kebutuhan pemrosesan terpadu. Gunakan satu pool konsumen jika tugas yang masuk memiliki jenis yang serupa.
Beberapa kumpulan konsumen
Dalam beberapa kumpulan konsumen, setiap antrean memiliki kumpulan konsumen khusus. Antrean berprioritas lebih tinggi menggunakan lebih banyak konsumen atau tingkat performa yang lebih tinggi untuk memproses pesan lebih cepat daripada antrean berprioritas lebih rendah.
Gunakan beberapa kumpulan konsumen karena alasan berikut:
Persyaratan performa yang ketat. Gunakan beberapa kumpulan konsumen ketika prioritas tugas yang berbeda memiliki persyaratan performa ketat yang harus dipenuhi secara independen.
Kebutuhan keandalan tinggi. Gunakan beberapa kumpulan konsumen untuk aplikasi saat keandalan dan isolasi kesalahan sangat penting, dan masalah dalam satu antrean tidak boleh memengaruhi antrean lain.
Aplikasi kompleks. Gunakan beberapa kumpulan konsumen untuk aplikasi kompleks di mana tugas yang berbeda memerlukan karakteristik pemrosesan dan jaminan performa yang berbeda.
Masalah dan pertimbangan
Pertimbangkan poin-poin berikut saat Anda memutuskan cara menerapkan pola ini:
Rekomendasi umum
Tentukan prioritas dengan jelas. Tetapkan tingkat prioritas yang berbeda dan jelas yang relevan dengan solusi Anda. Misalnya, Anda dapat menentukan pesan berprioritas tinggi sebagai pesan yang memerlukan pemrosesan dalam waktu 10 detik. Identifikasi persyaratan konsumen 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 layanan.
Pantau kesehatan antrean. Lacak kedalaman antrean, latensi pemrosesan, jumlah pengiriman, dan throughput sehingga Anda dapat mendeteksi backlog dan perlambatan sebelum memengaruhi pekerjaan.
Gunakan antrean surat mati. Pindahkan pesan racun ke antrean surat mati setelah sejumlah upaya pengiriman yang dapat dikonfigurasi sehingga satu pesan buruk tidak memblokir jalur prioritas.
Prioritaskan tingkat layanan. Terapkan antrean prioritas untuk memenuhi kebutuhan bisnis yang memerlukan ketersediaan atau performa yang diprioritaskan. Misalnya, pelanggan berprioritas tinggi dapat menerima tingkat layanan yang lebih tinggi sehingga mereka mengalami performa dan ketersediaan yang lebih baik.
Pertimbangkan pemrosesan berprioritas rendah. Tentukan apakah semua item berprioritas tinggi harus diproses sebelum item berprioritas lebih rendah. Jika memungkinkan, tingkatkan prioritas pesan lama secara dinamis untuk memastikan bahwa pesan berprioritas rendah pada akhirnya diproses.
Mengoptimalkan dan meminimalkan biaya. Segera selesaikan tugas krusial dengan pengguna yang tersedia. Jadwalkan tugas latar belakang yang kurang penting selama waktu yang kurang sibuk.
Jika Anda menggunakan satu antrean, optimalkan biaya dengan mengurangi jumlah konsumen. Pesan berprioritas tinggi memproses terlebih dahulu tetapi mungkin lebih lambat, sementara pesan berprioritas lebih rendah mungkin menghadapi penundaan yang lebih lama.
Lindungi prosesor dari puncak permintaan. Jika laju kedatangan produsen dapat melebihi kapasitas pemrosesan konsumen, gabungkan pola ini dengan pola Queue-Based Load Leveling. Pendekatan ini menyangga ledakan lalu lintas dan membantu mencegah sumber daya pemrosesan hilir kelebihan beban.
Beberapa rekomendasi antrean
Memantau kecepatan pemrosesan. Untuk memastikan bahwa pesan diproses pada tingkat yang diharapkan, terus pantau kecepatan pemrosesan antrean berprioritas tinggi dan rendah.
Menerapkan prinsip preemption dan penangguhan. Jika Anda menggunakan beberapa antrean dengan satu kumpulan konsumen, terapkan algoritma yang memastikan antrean berprioritas tinggi selalu dilayankan sebelum antrean berprioritas lebih rendah.
Pertimbangkan biaya antrean. Perhatikan biaya keuangan yang terkait dengan antrean pemeriksaan dan pemrosesan. Beberapa layanan antrean membebankan biaya untuk memposting, mengambil, dan mengkueri pesan. Biaya ini dapat meningkat dengan jumlah antrean.
Kapan menggunakan pola ini
Gunakan pola ini ketika:
Anda harus memenuhi latensi atau tujuan tingkat layanan yang berbeda untuk kelas pekerjaan yang berbeda, seperti premium versus permintaan pelanggan standar.
Pekerjaan tiba dalam ledakan, dan Anda harus melindungi operasi penting dengan memproses pesan berprioritas tinggi terlebih dahulu sambil menunda pekerjaan berprioritas lebih rendah.
Pola ini mungkin tidak cocok ketika:
Semua item kerja memiliki kepentingan bisnis yang sama, dan pemrosesan FIFO yang ketat lebih penting daripada penjadwalan berbasis prioritas.
Tugas memiliki dependensi pengurutan yang kuat di seluruh tingkat prioritas, dan menyusun ulang pekerjaan berdasarkan prioritas dapat menyebabkan hasil yang tidak konsisten atau memerlukan logika koordinasi yang kompleks.
Desain beban kerja
Evaluasi cara menggunakan pola Antrean Prioritas dalam desain beban kerja untuk mengatasi tujuan dan prinsip yang tercakup dalam pilar kerangka kerja Azure Well-Architected. Tabel berikut memberikan panduan tentang bagaimana pola ini mendukung tujuan setiap pilar.
| Prinsip Dasar | Bagaimana pola ini mendukung tujuan pilar |
|---|---|
| Keputusan desain terkait keandalan membantu beban kerja Anda menjadi tangguh terhadap malafungsi serta memastikan bahwa beban kerja tersebut pulih ke kondisi berfungsi sepenuhnya setelah kegagalan terjadi. | Memisahkan item berdasarkan prioritas bisnis memungkinkan Anda memfokuskan upaya keandalan pada pekerjaan yang paling penting. - RE:02 Alur Kritis |
| Efisiensi Performa membantu beban kerja Anda memenuhi permintaan secara efisien melalui pengoptimalan dalam penskalaan, data, dan kode. | Memisahkan item berdasarkan prioritas bisnis memungkinkan Anda memfokuskan upaya performa pada pekerjaan yang paling sensitif terhadap waktu. - PE:09 Alur Kritis |
Jika pola ini memperkenalkan kompromi di dalam pilar, bandingkan dengan tujuan pilar lain.
Example
Contoh pola Antrean Prioritas pada GitHub menunjukkan implementasi pola Antrean Prioritas yang menggunakan topik dan langganan Azure Service Bus. Contohnya menyebarkan akun penyimpanan yang aman, sumber daya Application Insights untuk pemantauan, dan namespace Bus Layanan untuk mengaktifkan komunikasi antara fungsi pengirim dan konsumen.
Penerapan ini mencakup tiga aplikasi fungsi: satu pengirim dan dua penerima. Aplikasi konsumen menggunakan jumlah instans maksimum yang berbeda untuk mensimulasikan prioritas pesan. Fungsi funcPriorityQueueConsumerHigh dapat diskalakan hingga 200 instans, sementara fungsi funcPriorityQueueConsumerLow dibatasi hingga 40 instans. Semua aplikasi fungsi menggunakan paket konsumsi Flex dan terhubung ke Application Insights untuk diagnostik dan pemantauan.
Penetapan peran memberikan akses aman ke Bus Layanan dan penyimpanan dengan menggunakan identitas terkelola. Semua aplikasi fungsi berbagi akun penyimpanan dan sumber daya Application Insights yang sama. Konfigurasi ini mempusatkan pengamatan dan pengelogan.
Diagram berikut menunjukkan arsitektur antrean prioritas:
Pada diagram sebelumnya:
Aplikasi (produser). Aplikasi
PriorityQueueSendermembuat pesan, menetapkan properti aplikasi kustom yang dipanggilPriorityke setiap pesan, dan mengatur nilai kePriorityHighatauLow.Broker pesan dan topik. Broker pesan Bus Layanan mengirim pesan ke satu topik Bus Layanan bernama
messages. Bus Layanan menggunakan filter SQL untuk merutekan setiap pesan ke langganan berprioritas tinggi atau berprioritas rendah, berdasarkan nilainyaPriority.Beberapa kumpulan konsumen. Kumpulan
PriorityQueueConsumerHighkonsumen danPriorityQueueConsumerLowmerespons pesan dari langganan berprioritas tinggi atau berprioritas rendah dengan menggunakan pemicu Azure Functions Bus Layanan.
| Peran dalam contoh | Layanan Azure dalam contoh | Nama dalam contoh |
|---|---|---|
| Aplikasi (produsen) | Aplikasi Azure Functions | PriorityQueueSender |
| Pialang Pesan | Azure Service Bus | <namespace bus layanan Anda> |
| Topik pesan | topik Azure Service Bus | messages |
| Langganan pesan | langganan Azure Service Bus | highPrioritylowPriority |
| Konsumen | Aplikasi Azure Functions |
PrioritasAntreanKonsumenTinggi KonsumenAntreanPrioritasRendah |
Langkah berikutnya
- Antrean, topik, dan langganan Bus Layanan: Tinjau entitas Bus Layanan dan perbedaan antara antrean dan topik.
- Deteksi duplikat: Pelajari bagaimana Bus Layanan dapat menolak pesan duplikat saat pengirim mencoba kembali setelah pengiriman yang tidak pasti.
- Antrean dead-letter: Pelajari cara Bus Layanan memindahkan pesan yang tidak dapat diproses ke antrean dead-letter untuk investigasi atau pemrosesan ulang.
- Apa itu Azure Queue Storage?: Tinjau konsep inti Azure Queue Storage untuk membandingkannya dengan antrean Bus Layanan.
Sumber daya terkait
Pola berikut mungkin berguna saat Anda menerapkan pola ini:
Pola pemerataan beban berbasis antrean: Gunakan antrean sebagai penyangga antara penerimaan permintaan dan pemrosesan. Gunakan ini dengan pola Antrean Prioritas saat Anda memerlukan perlindungan terhadap lonjakan dan penanganan yang terdiferensiasi.
Pola Konsumen Bersaing: Terapkan beberapa konsumen yang mendengarkan antrean yang sama dan memproses tugas secara paralel untuk meningkatkan throughput. Hanya satu konsumen yang memproses setiap pesan.
Pola pembatasan: Terapkan pembatasan dengan menggunakan antrean untuk mengelola tingkat permintaan. Gunakan pesan prioritas untuk memprioritaskan permintaan dari aplikasi penting atau pelanggan bernilai tinggi daripada yang kurang penting.