سؤال

لدي تسلسل هرمي للعمليات المسماة "Monitor_Node". يتم الإشراف على كل من هذه المراقبين بواسطة مشرف واحد.

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

ومع ذلك، فقد أدركت أن التفريخ معهم في init وظيفة المراقبة (التي تتم الإشراف عليها) تؤدي أحيانا إلى فشل هذه الوظيفة (وبالتالي فشل شجرة المشرف بأكملها). سؤالي هو: هل سيكون حلا جيدا لإرفاق هذه العمليات الداخلية إلى شجرة المشرف؟ أنا أفكر في تغيير مراقب_NODE إلى المشرف الذي يشرف عليه العمليات الداخلية.

شكوكي هي:

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

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

    آمل أنني لم أكن مرتبكا لك كثيرا. نتطلع للحصول على إجابة.

    تحرير:

    مشاكل مشابهة جدا (إن لم يكن الأمر كذلك) تناقش هنا (الوظيفة الثالثة). الحل المعطى إلى حد كبير مثل تلك التي أعطي إجابات حماقة.

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

المحلول

Supervisors:

There is a trick here, which includes the use of two supervisors. Your tree goes like:

main_sup -> worker
main_sup -> attached_pool_sup

attached_pool_sup -> workers

main sup is one_for_all, so if the worker or the pool supervisor dies, then the tree is done for and killed off. The pool supervisor is a simple_one_for_one which are suitable for having hundreds or thousands of workers.

Init:

Don't do too much work in your init callback. The supervisor will wait until the init completes and you can set a timeout (which you can increase in your case) if it takes longer than normal.

A trick is to quickly timeout (return with a timeout of 0 from init) and then handle additional setup in the handle_info timeout callback. That way you won't be stopping up the main supervisor. Beware of races here!

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