كيف يتم اكتشاف العقد المنتهية في Erlang؟كيف يؤثر net_ticktime على التحكم في حيوية العقدة في Erlang؟

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

سؤال

لقد قمت بتعيين قيمة net_ticktime على 600 ثانية.

net_kernel:set_net_ticktime(600)

في وثائق Erlang لـ net_ticktime = TickTime:

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

الوقت T، الذي يتم فيه اكتشاف العقدة التي لا تستجيب:

MinT < T < MaxT where:

MinT = TickTime - TickTime / 4
MaxT = TickTime + TickTime / 4

TickTime هو بشكل افتراضي 60 (ثانية).وبالتالي، 45 <T <75 ثانية.

ملحوظة:عادة، يتم الكشف عن عقدة الإنهاء على الفور.

مشكلتي: وقت TickTime الخاص بي هو 600 (ثانية).وبالتالي، 450 (7.5 دقيقة)< T <750 ثانية (12.5 دقيقة).على الرغم من ذلك، عندما أقوم بتعيين net_ticktime على جميع العقد الموزعة في Erlang على القيمة 600 عند فشل بعض العقد (على سبيل المثال.عندما أقوم بإغلاق Erlang Shell) فإن العقد الأخرى تتلقى الرسالة على الفور وليس وفقًا لتعريف وقت التجزئة.

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

كما يُلاحظ أيضًا في وثائق Erlang أن Distributed Erlang ليس قابلاً للتوسع بشكل كبير بالنسبة للمجموعات التي يزيد حجمها عن 100 عقدة، حيث تحتفظ كل عقدة بروابط لجميع العقد في المجموعة.هل تم تعديل خوارزمية فحص حيوية العقد (الاتصال، إعلان الإنهاء) مع زيادة حجم الكتلة؟

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

المحلول

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

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

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

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