خدمات Windows في مزرعة ويب (كيفية منع تعارضات التزامن)

StackOverflow https://stackoverflow.com/questions/1420578

سؤال

وبالنظر إلى المستقبل، إلى متى سيتم إنشاء مزرعة الويب...

لدينا العديد من تطبيقات خدمة Windows التي تؤدي مهامًا خلفية مختلفة:إرسال رسائل البريد الإلكتروني، وتصغير/معالجة الملفات وما إلى ذلك.

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

يمكن التغلب على سيناريو "الكتابة أولاً" من خلال التعليمات البرمجية أو المنطق الذي يعمل على حل المشكلة أو تخطي العنصر.(إذا كانت آلية انتظار أساسية (قائمة الاستعلامات وسجل العمليات) فستتم تجربتها مرة أخرى)

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

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

هل يبدو هذا حلاً معقولاً أم يجب على المرء الانتقال إلى حل أفضل قائم على قائمة انتظار الرسائل في تلك المرحلة (لست متأكدًا أيضًا من كيفية عمل ذلك في بيئة المزرعة؟

التقنيات:سي#/ASP.NET/SQL Server

هل كانت مفيدة؟

المحلول

أستطيع أن أفكر في آليتين.

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top