كيف يمكنني استعادة عملية الدولة بعد حادث ؟
-
21-08-2019 - |
سؤال
ما هي الطريقة الجيدة أن تستمر الدولة عند إعادة تشغيل تحطمت العملية ؟
أنا مشرف في مكتب المدعي العام تطبيق ما ساعات عدة "الفرعي" gen_servers.
على سبيل المثال واحد هو "الطقس" النظام الفرعي الذي يولد جديدا الطقس الدولة كل 15 دقيقة و يتعامل مع الاستفسارات الحالية حالة الطقس.(أعتقد أن عصير الليمون لعبة)
إذا كان هذا gen_server حوادث, أريد أن يكون إعادة تشغيل ، ولكن ينبغي أن يكون إعادة تشغيل أحدث الطقس الدولة وليس بعض التعسفي الدولة ضمنية في init()
.فإنه لن يكون له معنى بالنسبة محاكاة الدولة فجأة من "عاصفة ثلجية" إلى "سارة ومنسم" فقط بسبب الحادث.
لا تتردد في استخدام mnesia أو ETS لتخزين الدولة بعد كل تحديث بسبب وأضاف التعقيد ؛ هل هناك طريقة أسهل ؟
المحلول
طالما أنه فقط يجب أن يكون خلال وقت أن تشير إلى استخدام ETS.قيمة هو إلى حد بعيد أكبر من التعقيد.API بسيطة و إذا كنت تعمل مع اسمه الجداول الوصول هو بسيط جدا.لديك فقط لإنشاء الجدول قبل gen_server بدأت قبل المشرف.
اثنين - أكثر تعقيدا - البدائل:
- بناء زوج من العمليات واحد على عمل واحد للدولة الصيانة.نظرا لبساطة ثانية واحدة سيكون موثوق بها حقا.
- حقيقي سخيفة واحد يمكن أن يكون تبادل الطفل المواصفات المشرف مع الوضع الحالي كما الحجة في كل مرة تتغير حالة. (ابتسامة) لا أمزح.
نصائح أخرى
وهناك طريقة أسهل؟
اقتباس فقرة>وعندما توفيت عملية يرسل رسالة إلى المشرف الذي يحتوي على الدولة من العملية، بحيث يمكنك استخدام هذه القيمة لتخزين في المشرف (في mnesia أو دولة المشرف)، وعندما يبدأ الخادم الخاص بك (في الحرف الأول م> ) عليها أن ترسل دعوة المزامنة لالمشرف للحصول على قيمة الدولة. لدي سبيل المثال ليست حقيقية، ولكن آمل أن من المنطقي.
وعلى أي حال أنا لا أرى مشكلة لتخزين دولة في mnesia.
وآسف لغتي الإنجليزية:)