نمط قائمة انتظار الأولوية

Azure Service Bus

يمكن نمط قائمة انتظار الأولوية حمل العمل من معالجة المهام ذات الأولوية العالية بسرعة أكبر من المهام ذات الأولوية الأقل. يستخدم هذا النمط الرسائل المرسلة إلى قائمة انتظار واحدة أو أكثر وهو مفيد في التطبيقات التي توفر ضمانات مختلفة على مستوى الخدمة للعملاء الفرديين.

السياق والمشكلة

غالبا ما تحتاج أحمال العمل إلى إدارة المهام ومعالجتها بمستويات مختلفة من الأهمية والإلحاح. تتطلب بعض المهام اهتماما فوريا بينما يمكن للبعض الآخر الانتظار. يمكن أن يؤثر الفشل في معالجة المهام ذات الأولوية العالية على تجربة المستخدم وخرق اتفاقيات مستوى الخدمة (SLAs).

للتعامل مع المهام بكفاءة استنادا إلى أولويتها، تحتاج أحمال العمل إلى آلية لتحديد أولويات المهام وتنفيذها وفقا لذلك. عادة ما تعالج أحمال العمل المهام بالترتيب الذي تصل به، باستخدام بنية قائمة انتظار من البداية إلى الخارج (FIFO). لا يمثل هذا النهج الأهمية المختلفة للمهام.

حل

تسمح قوائم انتظار الأولوية لأحمال العمل بمعالجة المهام استنادا إلى أولويتها بدلا من أمر الوصول الخاص بها. يقوم التطبيق الذي يرسل رسالة إلى قائمة الانتظار بتعيين أولوية للرسالة، ويعالج المستهلكون الرسائل حسب الأولوية. استخدم نمط قائمة انتظار الأولوية عندما يكون لديك المتطلبات التالية:

  • التعامل مع المهام ذات الإلحاح والأهمية المتفاوتة. لديك مهام ذات مستويات مختلفة من الإلحاح والأهمية وتحتاج إلى التأكد من معالجة المهام الأكثر أهمية قبل المهام الأقل أهمية.

  • التعامل مع اتفاقيات مستوى الخدمة المختلفة. أنت تقدم ضمانات مختلفة على مستوى الخدمة للعملاء تتطلب وتحتاج إلى ضمان تلقي العملاء ذات الأولوية العالية أداء وتوافرا أفضل.

  • تلبية احتياجات إدارة حمل العمل المختلفة. لديك حمل عمل يحتاج إلى معالجة مهام معينة على الفور ويمكن أن تنتظر مهام أقل إلحاحا.

هناك طريقتان رئيسيتان لتنفيذ نمط قائمة انتظار الأولوية:

  • قائمة انتظار واحدة: يتم إرسال جميع الرسائل إلى قائمة انتظار واحدة ويتم تعيين أولوية لكل رسالة.

  • قوائم انتظار متعددة: يتم استخدام قوائم انتظار منفصلة لكل أولوية رسالة.

قائمة انتظار مفردة

مع قائمة انتظار واحدة، يعين التطبيق (المنتج) أولوية لكل رسالة ويرسل الرسالة إلى قائمة الانتظار. تقوم قائمة الانتظار بطلب الرسائل حسب الأولوية، ما يضمن معالجة المستهلكين للرسائل ذات الأولوية الأعلى قبل الرسائل ذات الأولوية الأقل.

رسم تخطيطي يوضح آلية قائمة الانتظار التي تدعم ترتيب أولويات الرسائل.
الشكل 1. بنية قائمة انتظار واحدة وتجمع مستهلك واحد

تعدد قوائم الانتظار

تسمح لك قوائم الانتظار المتعددة بفصل الرسالة حسب الأولوية. يعين التطبيق أولوية لكل رسالة ويوجه الرسالة إلى قائمة الانتظار المقابلة للأولوية الخاصة بها. يعالج المستهلكون الرسائل. يستخدم حل قائمة انتظار متعددة إما تجمع مستهلك واحد أو تجمعات مستهلكين متعددة.

تجمعات مستهلكين متعددة

مع تجمعات مستهلكين متعددة، تحتوي كل قائمة انتظار على موارد مستهلكين مخصصة لها. يجب أن تستخدم قوائم الانتظار ذات الأولوية الأعلى المزيد من المستهلكين أو مستويات أداء أعلى لمعالجة الرسائل بسرعة أكبر من قوائم الانتظار ذات الأولوية الأقل.

استخدم تجمعات مستهلكين متعددة عندما يكون لديك:

  • متطلبات الأداء الصارمة: تعد مجموعات المستهلكين المتعددة ضرورية عندما يكون لأولويات المهام المختلفة متطلبات أداء صارمة يجب تلبيتها بشكل مستقل.
  • احتياجات عالية الموثوقية: مطلوب تجمعات مستهلكين متعددة للتطبيقات التي تكون فيها الموثوقية وعزل الخطأ أمرا بالغ الأهمية. يجب ألا تؤثر المشكلات في قائمة انتظار واحدة على قوائم الانتظار الأخرى.
  • التطبيقات المعقدة: مفيدة للتطبيقات المعقدة ذات المهام التي تتطلب خصائص معالجة مختلفة وضمانات الأداء للمهام المختلفة.

رسم تخطيطي يوضح استخدام قوائم انتظار رسائل منفصلة لكل أولوية.
الشكل 2. بنية قوائم انتظار متعددة وتجمعات مستهلكين متعددة.

تجمع مستهلك واحد

مع تجمع مستهلك واحد، تشترك جميع قوائم الانتظار في مجموعة واحدة من المستهلكين. يعالج المستهلكون الرسائل من قائمة الانتظار ذات الأولوية القصوى أولا ويعالجون الرسائل فقط من قوائم انتظار ذات أولوية أقل عندما لا تكون هناك رسائل ذات أولوية عالية. ونتيجة لذلك، يعالج تجمع المستهلكين الفردي دائما رسائل ذات أولوية أعلى قبل الرسائل ذات الأولوية الأقل. قد يؤدي هذا الإعداد إلى تأخير الرسائل ذات الأولوية المنخفضة باستمرار ومن المحتمل ألا تتم معالجتها أبدا.

استخدم تجمع مستهلك واحد من أجل:

  • إدارة بسيطة: تجمع مستهلك واحد مناسب للتطبيق حيث تكون سهولة الإعداد والصيانة أولوية. يقلل من تعقيد التكوين والمراقبة.
  • احتياجات المعالجة الموحدة: يعد تجمع المستهلكين الفردي مفيدا عندما تكون الطبيعة الدقيقة للمهام الواردة متشابهة.

رسم تخطيطي يوضح استخدام قوائم انتظار رسائل منفصلة لكل أولوية.
الشكل 3. بنية قوائم انتظار متعددة وتجمع مستهلك واحد.

توصيات لنمط قائمة انتظار الأولوية

ضع في اعتبارك التوصيات التالية عندما تقرر كيفية تنفيذ نمط قائمة انتظار الأولوية:

التوصيات العامة

  • تحديد الأولويات بوضوح. إنشاء مستويات أولوية متميزة وواضحة ذات صلة بحلك. على سبيل المثال، قد تتطلب رسالة ذات أولوية عالية المعالجة في غضون 10 ثوان. تحديد متطلبات التعامل مع العناصر ذات الأولوية العالية وتخصيص الموارد اللازمة وفقا لذلك.

  • ضبط تجمعات المستهلكين ديناميكيا. تحجيم حجم تجمعات المستهلكين استنادا إلى طول قائمة الانتظار التي تخدمها.

  • تحديد أولويات مستويات الخدمة. تنفيذ قوائم الانتظار ذات الأولوية لتلبية احتياجات الأعمال التي تتطلب توفرا أو أداء ذا أولوية. على سبيل المثال، يمكن أن تتلقى مجموعات العملاء المختلفة مستويات مختلفة من الخدمة بحيث يواجه العملاء ذوي الأولوية العالية أداء وتوافرا أفضل.

  • ضمان المعالجة ذات الأولوية المنخفضة. في قوائم الانتظار التي تدعم ترتيب أولويات الرسائل، قم بزيادة أولوية الرسائل المسنة ديناميكيا إذا كان النظام يسمح لها بضمان معالجة الرسائل ذات الأولوية المنخفضة في النهاية.

  • ضع في اعتبارك تكاليف قائمة الانتظار. كن على دراية بالتكاليف المالية وتكاليف المعالجة المرتبطة بفحص قوائم الانتظار. تفرض بعض خدمات قائمة الانتظار رسوما لنشر الرسائل واستردادها والاستعلام عنها، والتي يمكن أن تزيد مع عدد قوائم الانتظار.

توصيات قوائم انتظار متعددة

  • مراقبة سرعات المعالجة. لضمان معالجة الرسائل بالأسعار المتوقعة، قم بمراقبة سرعة معالجة قوائم الانتظار عالية الأولوية ومنخفضة الأولوية باستمرار.

  • تقليل التكاليف. معالجة المهام الهامة على الفور مع المستهلكين المتاحين. جدولة مهام خلفية أقل أهمية خلال أوقات أقل انشغالا.

توصيات تجمع مستهلك واحد

  • تنفيذ الاستباق والتعليق. حدد ما إذا كان يجب معالجة جميع العناصر ذات الأولوية العالية قبل أي عناصر ذات أولوية أقل. استخدم خوارزمية تضمن خدمة قوائم الانتظار ذات الأولوية العالية دائما قبل قوائم الانتظار ذات الأولوية المنخفضة عند استخدام مجموعة واحدة من المستهلكين لقوائم انتظار متعددة.

  • تحسين التكاليف. تحسين التكاليف التشغيلية عن طريق تقليص عدد المستهلكين عند استخدام نهج قائمة الانتظار الواحدة. تعالج الرسائل ذات الأولوية العالية أولا، على الرغم من أنه ربما يكون أبطأ، بينما قد تواجه الرسائل ذات الأولوية المنخفضة تأخيرات أطول.

تصميم حمل العمل

يجب على المهندس المعماري تقييم كيفية معالجة نمط قائمة انتظار الأولوية للأهداف والمبادئ التي تغطيها ركائز Azure Well-Architected Framework. على سبيل المثال:

الركيزة كيف يدعم هذا النمط أهداف الركيزة
تساعد قرارات تصميم الموثوقية حمل العمل الخاص بك على الصمود في وجه الخلل وضمان استرداده إلى حالة تعمل بشكل كامل بعد حدوث فشل. يمكنك فصل العناصر استنادا إلى أولوية العمل من تركيز جهود الموثوقية على العمل الأكثر أهمية.

- RE:02 التدفقات الهامة
- وظائف الخلفية RE:07
تساعد كفاءة الأداء حمل العمل الخاص بك على تلبية الطلبات بكفاءة من خلال التحسينات في التحجيم والبيانات والرمز. يمكنك فصل العناصر استنادا إلى أولوية العمل من تركيز جهود الأداء على العمل الأكثر حساسية للوقت.

- PE:09 التدفقات الحرجة

كما هو الحال مع أي قرار تصميم، ضع في اعتبارك أي مفاضلات ضد أهداف الركائز الأخرى التي يمكن إدخالها مع هذا النمط.

مثال على نمط قائمة انتظار الأولوية

يوضح المثال التالي في GitHub تنفيذ نمط قوائم انتظار الأولوية باستخدام ناقل خدمة Azure.

رسم تخطيطي يوضح كيفية تنفيذ قائمة انتظار ذات أولوية باستخدام ناقل خدمة Microsoft Azure.
الشكل 4. بنية مثال PriorityQueue في GitHub

فيما يلي نظرة عامة على البنية:

  • التطبيق (المنتج): يحتوي المثال على تطبيق (PriorityQueueSender) يقوم بإنشاء رسائل وتعيين خاصية مخصصة تسمى Priority في كل رسالة. Priority له قيمة أو High Low.

  • وسيط الرسائل وقوائم الانتظار: يستخدم المثال ناقل خدمة Azure كوسيط الرسائل. ويستخدم قائمتي انتظار ناقل خدمة Azure، واحدة لكل أولوية رسالة (HighوLow). يرسل التطبيق (المنتج) رسائل إلى قائمة الانتظار الصحيحة استنادا إلى الرسالة Priority.

  • تجمعات مستهلكين متعددة: يستخدم المثال تجمعات مستهلكين متعددة (PriorityQueueConsumerHigh و PriorityQueueConsumerLow) مخصصة لقراءة الرسائل من كل قائمة من قوائم الانتظار.

دور في بنية المثال خدمة Azure في المثال الاسم في المثال
طلب تطبيق Azure Functions PriorityQueueSender
وسيط قائمة انتظار الرسائل ناقل خدمة Azure <مساحة اسم ناقل الخدمة>
قوائم انتظار الرسائل قوائم انتظار ناقل خدمة Microsoft Azure <أسماء قائمة الانتظار>
المستهلكون تطبيق Azure Functions PriorityQueueConsumerHigh
PriorityQueueConsumerLow

قد تكون الأنماط التالية مفيدة لك عند تنفيذ هذا النمط:

  • نمط المستهلكين المتنافسين: يتضمن هذا النمط تنفيذ العديد من المستهلكين الذين يستمعون إلى نفس قائمة الانتظار ومعالجة المهام بالتوازي لزيادة معدل النقل. يعالج مستهلك واحد فقط كل رسالة. وتقدم المقالة معلومات مفصلة عن مزايا وعيوب هذا النهج.

  • نمط التقييد: يمكن تنفيذ هذا النمط باستخدام قوائم الانتظار لإدارة معدلات الطلب. من خلال استخدام المراسلة ذات الأولوية، يمكن إعطاء الأولوية للطلبات من التطبيقات الهامة أو العملاء عاليي القيمة على الطلبات الأقل أهمية.