نمط البُنى الأساسية وعوامل التصفية

Azure Blob Storage
Azure Functions
Azure Queue Storage

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

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

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

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

رسم تخطيطي يوضح حلا تم تنفيذه باستخدام وحدات نمطية متجانسة.

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

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

حل

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

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

يسهل الاقتران غير المحكم للمرشحات ما يلي:

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

يوضح هذا الرسم التخطيطي حلا تم تنفيذه باستخدام الأنابيب وعوامل التصفية:

رسم تخطيطي يوضح حلا تم تنفيذه باستخدام الأنابيب وعوامل التصفية.

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

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

رسم تخطيطي يوضح مثالا مطبقا على البنية الأساسية لبرنامج ربط العمليات التجارية للبيانات من المصدر 1.

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

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

المسائل والاعتبارات

ضع في اعتبارك النقاط التالية عندما تقرر كيفية تنفيذ هذا النمط:

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

  • الموثوقية. استخدم بنية أساسية تضمن عدم فقدان البيانات المتدفقة بين عوامل التصفية في توجيه.

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

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

    إشعار

    إذا قمت بتنفيذ البنية الأساسية لبرنامج ربط العمليات التجارية باستخدام قوائم انتظار الرسائل (مثل قوائم انتظار ناقل خدمة Azure)، فقد توفر البنية الأساسية لقوائم انتظار الرسائل الكشف التلقائي عن الرسائل المكررة وإزالتها.

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

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

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

موعد استخدام النمط

استخدم هذا النمط عندما:

  • يمكن تقسيم المعالجة المطلوبة بسهولة من خلال التطبيق إلى مجموعة من الخطوات المستقلة.

  • تمتلك خطوات المعالجة التي يقوم بها التطبيق متطلبات قابلية توسع مختلفة.

    إشعار

    يمكنك تجميع عوامل التصفية التي يجب توسيع نطاقها معا في نفس العملية. لمزيد من المعلومات، راجع نمط دمج موارد الحساب في Azure.

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

  • يمكن للنظام الاستفادة من توزيع المعالجة للخطوات عبر الخوادم المختلفة.

  • تحتاج إلى حل موثوق يقلل من تأثيرات الفشل في خطوة أثناء معالجة البيانات.

قد لا يكون هذا النمط مفيدًا في الحالات الآتية:

  • يتبع التطبيق نمط استجابة الطلب.

  • يجب إكمال معالجة المهمة كجزء من طلب أولي، مثل سيناريو الطلب/الاستجابة.

  • خطوات المعالجة التي ينفذها التطبيق غير مستقلة، أو يجب تنفيذها معا كجزء من معاملة واحدة.

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

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

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

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

- RE:01 البساطة
- وظائف الخلفية RE:07

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

مثال

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

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

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

  • إشراف على المحتوى
  • تغيير حجم
  • الماء
  • اعاده توجيه
  • إزالة بيانات تعريف Exif
  • منشور شبكة تسليم المحتوى (CDN)

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

رسم تخطيطي يوضح مسار معالجة الصور الذي يستخدم Azure Queue Storage بين سلسلة من Azure Functions.

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

// This is the "Resize" filter. It handles claim checks from input pipe, performs the
// resize work, and places a claim check in the next pipe for anther filter to handle.
[Function(nameof(ResizeFilter))]
[QueueOutput("pipe-fjur", Connection = "pipe")]  // Destination pipe claim check
public async Task<string> RunAsync(
  [QueueTrigger("pipe-xfty", Connection = "pipe")] string imageFilePath,  // Source pipe claim check
  [BlobInput("{QueueTrigger}", Connection = "pipe")] BlockBlobClient imageBlob)  // Image to process
{
  _logger.LogInformation("Processing image {uri} for resizing.", imageBlob.Uri);

  // Idempotency checks
  // ...

  // Download image based on claim check in queue message body
  // ...
  
  // Resize the image
  // ...

  // Write resized image back to storage
  // ...

  // Create claim check for image and place in the next pipe
  // ...
  
  _logger.LogInformation("Image resizing done or not needed. Adding image {filePath} into the next pipe.", imageFilePath);
  return imageFilePath;
}

إشعار

يحتوي إطار عمل تكامل Spring على تنفيذ نمط الأنابيب وعوامل التصفية.

الخطوات التالية

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

  • يتوفر عرض توضيحي لنمط الأنابيب وعوامل التصفية باستخدام سيناريو معالجة الصور على GitHub.
  • أنماط التكرار، على مدونة جوناثان أوليفر.

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

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