اختيار تسليم مستند إلى رسالة بواسطة قوائم الانتظار

مكتمل

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

  • Azure Queue Storage
  • ناقل خدمة Azure

ما هو Azure Storage Queue؟

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

ما هي قوائم انتظار ناقل خدمة Azure؟

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

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

ما هي Azure Service Bus Topics؟

تشبه موضوعات Azure Service Bus قوائم الانتظار، ولكن يمكن أن يكون لها عدة مشتركين. عند إرسال رسالة إلى موضوع بدلاً من قائمة انتظار، يمكن تشغيل مكونات متعددة للقيام بعملها. تخيل أن المستخدم يستمع إلى أغنية في تطبيق مشاركة الموسيقى. قد يرسل تطبيق الجهاز المحمول رسالة إلى موضوع «تم الاستماع إليه». سيكون لهذا الموضوع اشتراك في "UpdateUserListenHistory" واشتراك مختلف ل "UpdateArtistsFanList". تتم معالجة كل من هذه الوظائف بواسطة مكون مختلف يتلقى نسخته الخاصة من الرسالة.

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

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

يمكن أن تدعم البنية الأساسية لقائمة الانتظار العديد من الميزات المتقدمة التي تجعلها مفيدة بالطرق التالية:

زيادة الموثوقية

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

ضمانات تسليم الرسائل

تضمن أنظمة وضع قوائم الانتظار عادةً تسليم كل رسالة في قائمة الانتظار إلى مكون الوجهة. ومع ذلك، يمكن لهذه الضمانات أن تتبع نُهجًا مختلفة:

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

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

  • First-In-First-Out (FIFO): في معظم أنظمة المراسلة، عادة ما تترك الرسائل قائمة الانتظار بالترتيب نفسه الذي تمت إضافتها به، ولكن يجب مراعاة ما إذا كان هذا التسليم مضمونا أم لا. إذا كان التطبيق الموزع يتطلب معالجة الرسائل بالترتيب الصحيح بدقة، فإنه يجب عليك اختيار نظام قائمة انتظار يتضمن ضمان FIFO.

دعم المعاملات

قد تتسبب بعض مجموعات الرسائل ذات الصلة الوثيقة في حدوث مشاكل عند فشل التسليم لرسالة واحدة في المجموعة.

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

  • يتم إرسال رسالة مع تفاصيل الطلب إلى مركز التلبية
  • يتم إرسال رسالة تحتوي على الإجمالي وتفاصيل الدفع إلى معالج بطاقة الائتمان
  • يتم إرسال رسالة مع معلومات الإيصال إلى قاعدة البيانات لإنشاء فاتورة للعميل

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

ما هي الخدمة التي يجب أن أختارها؟

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

استخدم قوائم انتظار Service Bus إذا كنت:

  • تحتاج إلى ضمان التسليم مرة واحدة على الأكثر.
  • تحتاج إلى ضمان FIFO.
  • تحتاج إلى تجميع الرسائل في المعاملات.
  • تريد تلقي رسائل بدون استطلاع قائمة الانتظار.
  • تحتاج إلى توفير نموذج وصول يستند إلى الأدوار إلى قوائم الانتظار.
  • تحتاج إلى معالجة الرسائل الأكبر من 64 كيلوبايت ولكن أقل من 100 كيلوبايت. الحد الأقصى لحجم الرسالة الذي يدعمه المستوى القياسي هو 256 كيلوبايت والمستوى المميز هو 100 ميجابايت.
  • لن يزيد حجم قائمة الانتظار عن ТБ واحد. الحد الأقصى لحجم قائمة الانتظار للمستوى القياسي هو 80 غيغابايت وبالنسبة للمستوى المميز فهو 1 تيرابايت.
  • تريد نشر دُفعات من الرسائل ومعالجتها.

استخدم موضوعات Service Bus إذا كنت:

  • تحتاج إلى جميع الميزات التي توفرها قوائم انتظار ناقل خدمة Microsoft Azure، بالإضافة إلى تنفيذ نمط pub-sub حيث يمكن توجيه الرسائل إلى أحد الاشتراكات المتعددة، ولكل منها أجهزة استقبال مستقلة خاصة بها

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

استخدم تخزين قائمة الانتظار إذا كنت:

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

قائمة الانتظار هي موقع تخزين مؤقت بسيط للرسائل المرسلة بين مكونات التطبيق الموزع. استخدم قائمة انتظار لتنظيم الرسائل والتعامل بأمان مع الزيادات المفاجئة غير المتوقعة في الطلب.

استخدم قوائم انتظار التخزين عندما تريد نظام قائمة انتظار بسيطًا وسهل البرمجة. وللاحتياجات الأكثر تقدمًا، استخدم قوائم انتظار «ناقل الخدمة». إذا كانت لديك وجهات متعددة لرسالة واحدة، ولكنك تحتاج إلى سلوك يشبه قائمة الانتظار، استخدم موضوعات «ناقل الخدمة».