مقالات قد تهمك

تجميع العقد للتوفر العالي في MultiChain

نشر عقد MultiChain متعددة لتقليل وقت التوقف عن العمل

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

ولهذا السبب، يجب على المشاركين التفكير في تشغيل عقدتين أو أكثر من عقد MultiChain بشكل متكرر وفي وقت واحد، من أجل ضمان التوفر العالي.

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

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

مشاركة المفتاح الخاص

من خلال مشاركة المفاتيح الخاصة بين العقد، تكتسب جميع العقد القدرة على الاتصال بالشبكة وتوقيع المعاملات كبدائل لبعضها البعض. وتقدم MultiChain عددا من الطرق لمشاركة المفاتيح الخاصة بين العقد:

1- عند تشغيل عقدة لأول مرة، تخبر معلمة وقت التشغيل initprivkey العقدة باستخدام مفتاح خاص موجود بدلا من إنشاء مفتاح عشوائي جديد. (يمكن الحصول على المفاتيح الخاصة من العقد الأخرى باستخدام أمر dumpprivkey على واجهة التطبيقات البرمجية).

2- بعد تشغيل العقدة واتصالها بالشبكة، يمكن إضافة مفاتيح خاصة إضافية إلى محفظتها باستخدام الأمر importprivkey. فعلى سبيل المثال، يمكن استخدام الأمر createkeypairs على أي عقدة (بما في ذلك العقدة غير المتصلة أو الباردة) للحصول على مفتاح خاص وعنوان مطابق دون التأثير على محفظة تلك العقدة، ثم استخدام الأمر importprivkey لاستيراد المفتاح الخاص الجديد إلى كل عقدة في المجموعة. تأكد من استخدام الأمر importprivkeyللحفظ وأن أمر إعادة فحص السلسلة يحمل القيمة rescan=false إذا لم يتم استخدام المفتاح الخاص والعنوان المقابل له بعد.

3- إذا لزم الأمر، استخدم الأوامر dumpwallet و importwallet لنسخ جميع المفاتيح الخاصة من عقدة إلى أخرى.

4- إذا كانت العقدة تحتوي على مفاتيح خاصة متعددة (مع العناوين المقابلة) في محفظتها، فإن معلمة وقت التشغيل handshakelocal تحدد العنوان الذي سيتم استخدامه للمصافحة P2P.

5- تأكد من إيقاف تشغيل الدمج التلقائي (لمنع الإنفاق المزدوج بين عقد المجموعة) عن طريق تعيين معلمة وقت التشغيل autocombineminconf=999999999. combineunspent لا يزال من الممكن استدعاء واجهة برمجة التطبيقات (API) بشكل صريح إذا لزم الأمر .

عناوين المراقبة فقط والاشتراكات

إذا كانت العقد المتعددة تعمل كبدائل لبعضها البعض، فمن المهم التأكد من أنها تشترك في نفس مجموعة عناوين المراقبة فقط والأصول والتدفقات المشتركة:

1- عند استخدام الأمر importaddress لإضافة واحد أو أكثر من عناوين المراقبة فقط إلى عقدة واحدة في المجموعة، تأكد من استدعاء نفس الأمر لجميع العقد الأخرى. يمكنك ضبط أمر حفظ إعادة فحص السلسلة على القيمة rescan=false بأمان إذا لم يتم استخدام العنوان بعد.

2- عند استخدام الأمر subscribe للاشتراك في واحد أو أكثر من الأصول أو التدفقات على عقدة واحدة، قم بإصدار نفس الأمر للآخرين. إذا تم إنشاء الأصل أو الدفق مؤخرا، فستكون إعادة فحص السلسلة سريعة، لذلك ليست هناك حاجة لتعيين قيمة rescan=false.

3- يمكن استخدام معلمة وقت التشغيل autosubscribe مع جميع العقد في المجموعة لتوجيهها للاشتراك تلقائيا في كل أصل و/أو تدفق جديد يتم إنشاؤه.

موازنة التحميل للقراءة

لنفترض أن جميع العقد في المجموعة: (أ) متزامنة مع بلوكتشين غير متشعب، (ب) لها نفس مجموعة عناوين المحفظة (سواء للمراقبة فقط أو مع مفاتيح خاصة)، (ج) مشتركة لنفس مجموعة الأصول والتدفقات، (د) لها نفس القيمة لمعلمات وقت التشغيل txindex، maxshowndataو hideknownopdrops. في هذه الحالة، يمكن توجيه أوامر API التالية التي تقرأ المعلومات من السلسلة إلى أي من العقد الموجودة في المجموعة، وستعيد نفس النتيجة لنفس معلمات الإدخال:

1- قائمة كيانات blockchain: listpermissionsو listassets و liststreams و listupgrades. ومع ذلك، لاحظ أن تغييرات الأذونات والأصول والتدفقات والترقيات غير المؤكدة قد تظهر بترتيبات مختلفة في نهاية القائمة.

2- الاستعلام عن الأرصدة: getaddressbalances و getmultibalances و gettotalbalances طالما minconf>=1.

3- قراءة معاملات محددة بطرق مختلفة: getaddresstransaction, getwallettransaction, getassettransaction, getstreamitem, gettxoutdataو getrawtransaction. gettxout لاحظ أن حقل time قد تختلف timereceived.

4- سرد الأصول أو التدفقات المشتركة: listassettransactions وجميع الأوامر liststream*، طالما local-ordering=false. كما في الحالات السابقة، قد تختلف حقول time timereceived وقد تظهر العناصر غير المؤكدة بترتيب مختلف في نهاية القائمة.

5- خصائص بلوكتشين العالمية: getblockchainparams و getblock و getblockhash و listblocks.

تفترض هذه القائمة أنه تم تحديث جميع العقد بأحدث كتلة في السلسلة. في الواقع، لن تتلقى جميع العقد كتلا جديدة وتعالجها في نفس الوقت تماما. حتى بالنسبة للمعاملات المؤكدة القديمة، قد يؤدي ذلك إلى قيم مختلفة للحقول confirmations.

أساليب الكتابة

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

من أجل الكتابة بأمان إلى السلسلة باستخدام مجموعة من العقد، يجب اعتماد إحدى الاستراتيجيات التالية (من الأسهل إلى الأصعب):

1- استخدم استراتيجية تجاوز الفشل بدلا من استراتيجية موازنة التحميل، حيث يتم إرسال المعاملات من عقدة واحدة فقط في كل مرة. إذا تعطلت هذه العقدة، انتظر بضع ثوان (للسماح بانتشار أي معاملات موجودة) ثم ابدأ في إرسال المعاملات من عقدة مختلفة في المجموعة.

2- استخدم عناوين متعددة لمعاملات المؤسسة. لكل عنوان، استخدم عقدة واحدة فقط لإرسال المعاملات من هذا العنوان. إذا تعطلت عقدة أحد العناوين، فانتظر بضع ثوان ثم ابدأ في إجراء المعاملات من هذا العنوان باستخدام عقدة مختلفة.

3- تتبع المخرجات غير المنفقة على مستوى التطبيق للتأكد من أن العقد المختلفة لا تحاول إنفاق نفس المخرجات. ولتحقيق ذلك، ينبغي بناء جميع المعاملات باستخدام createrawtransaction، حيث يتم تحديد المخرجات السابقة التي سيتم إنفاقها بشكل واضح.

4- قم ببناء المعاملات بالكامل خارج العقدة واستخدمها فقط أمر signrawtransaction للتوقيع عليها (و/أو) أمر sendrawtransactions لبثها. من الآمن أيضا إرسال نفس المعاملة الأولية عبر أمر sendrawtransaction لعقد متعددة في وقت واحد.

المراقبة:

يمكن مراقبة صحة العقد في المجموعة بعدة طرق مختلفة:

1- يُستخدم أمر getpeerinfo للتحقق من عدد وحالة اتصالات كل عقدة مع أقرانها الآخرين. حيث تحتوي الحقول lastsend و lastrecv على طوابع زمنية لنظام Unix وتوضح آخر مرة تم فيها إرسال الرسالة واستلامها عبر كل اتصال.

2- يعرض الحقل pingtime آخر قياس لوقت الاستجابة عبر كل اتصال. فإذا انخفض عدد النظراء، أو لم يتم تبادل أي رسائل جديدة، أو أصبح زمن الاستجابة مرتفعا، فمن المحتمل أن يشير هذا إلى وجود مشكلة في الشبكة.

3- يُستخدم getblockchaininfo للتحقق من عدد الكتل في بلوكتشين لكل عقدة. وإذا تأخرت إحدى العقد بشكل ملحوظ عن العقد الأخرى، فمن المحتمل أن يشير هذا إلى وجود مشكلة في الشبكة أو التحميل الزائد للنظام.

4- يُستخدم أمر getmempoolinfo للتحقق من عدد المعاملات الموجودة في تجمع ذاكرة كل عقدة، أي لم يتم تأكيدها بعد على نسخة تلك العقدة من بلوكتشين. إذا ارتفع الرقم للقيمة size، فهذا يشير إلى مشكلة التحميل الزائد على الشبكة أو النظام، أو مشكلة التعدين على مستوى الشبكة.

[adsforwp id="60211"]
[adsforwp id="60211"]

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني.

زر الذهاب إلى الأعلى