سؤال

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

لذا، سؤالي الرئيسي هو:لماذا أختار واحدا على الآخر؟وبشكل أكثر تحديدًا، لماذا أختار استخدام Spread أو ØMQ عندما تكون هناك تطبيقات ناضجة لـ MPI؟

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

المحلول

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

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

نصائح أخرى

لم أستخدم أيًا من هذه المكتبات، لكن قد أتمكن من تقديم بعض التلميحات.

  1. MPI هو بروتوكول اتصال بينما يعتبر Spread و ØMQ بمثابة التنفيذ الفعلي.
  2. يأتي MPI من البرمجة "الموازية" بينما يأتي Spread من البرمجة "الموزعة".

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

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

أنت تتعامل مع واجهات برمجة تطبيقات مختلفة تمامًا هنا، مع مفاهيم مختلفة حول نوع الخدمات المقدمة والبنية التحتية لكل منها.لا أعرف ما يكفي عن MPI وSpread للإجابة عنهما، ولكن يمكنني المساعدة أكثر قليلاً مع ZeroMQ.

ZeroMQ هي مكتبة اتصالات مراسلة بسيطة.فهو لا يفعل شيئًا سوى إرسال رسالة إلى أقران مختلفين (بما في ذلك النظراء المحليين) استنادًا إلى مجموعة مقيدة من أنماط المراسلة الشائعة (PUSH/PULL، REQUEST/REPLY، PUB/SUB، وما إلى ذلك).إنه يتعامل مع اتصال العميل والاسترجاع والازدحام الأساسي بشكل صارم بناءً على تلك الأنماط وعليك القيام بالباقي بنفسك.

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

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

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