RabbitMQ / المتوسط: العمل المنسوخ وسلامة المحاولات وأدلة التشغيل / الدرس 7
نسخ quorum وإتاحة الكتابة
تقييم أمان الصف المنسوخ مقابل إتاحة الأعضاء ونطاقات العطل المعلنة.
في هذه الصفحة
أهداف الدرس
- شرح اتفاق الأغلبية وعضوية الصف المحددة.
- فصل إتاحة الصف عن صحة عمليات العنقود والتعافي المستقل.
يخص النسخ مجموعة أعضاء الصف
يستخدم صف quorum قائداً وأعضاء تابعين باتفاق مبني على Raft. مجموعة أعضائه خاصية فعلية لذلك الصف، وليست ببساطة جميع العقد المنتمية إلى عنقود RabbitMQ. قد يضم العنقود عقداً أكثر من نسخ صف معين. ولا تبرر إضافة عقدة افتراض حصول كل صف قديم فوراً على نسخة سليمة فيها. راجع العضوية والتوزيع الفعليين منفصلين عن حجم النسخ المقصود. وزع الأعضاء بين نطاقات الفشل التي يحتاج التصميم تحملها؛ فثلاث نسخ في نطاق يفقد دفعة واحدة تعطي ملف مخاطر مختلفاً عن نسخ موزعة باستقلال.
حساب الأغلبية قبل الوعد بالإتاحة
تحسب الدالة المحلية floor(N/2)+1 لعدد أعضاء معلن. تحتاج ثلاثة أعضاء اثنين، وخمسة ثلاثة. يوضح ذلك حساب النصاب فقط، لا انتخاب القيادة أو انقسام الشبكة أو سلوك القرص. لا يجوز اعتبار الوصول إلى عقدة في أقلية دليلاً على قبول الصف الكتابات نفسها بأمان كأغلبية سليمة. تحتاج الإتاحة قائداً مناسباً وموارد عاملة أيضاً. قد تتحمل المجموعة الأكبر أعطال أعضاء إضافية، لكنها تزيد كلفة النسخ والتنسيق. اختر العضوية من نموذج فشل وسعة صريح، لا من افتراض أن زيادة النسخ تحسين مجاني دائماً.
def majority(members):
if members < 1:
raise ValueError('INVALID_MEMBER_COUNT')
return members // 2 + 1
assert majority(3) == 2
assert majority(5) == 3
print(majority(3), majority(5))
2 3
تصف النتيجة الأعداد المطلوبة فقط ولا تختبر صفاً منسوخاً.
تختلف البيانات المؤكدة عن الخدمة الحالية
ترتبط تأكيدات نشر quorum بسلوك القبول المنسوخ الموثق. قد يجعل فقد أغلبية مؤقت لاحق الصف غير متاح، دون إثبات حذف بيانات أكدت سابقاً. وبالمقابل لا يثبت الوصول إلى نقطة اتصال وحياة عمليات العنقود وجود نصاب صالح للصف. افصل أدلة فقد البيانات عن الإتاحة وعدم يقين العميل. إذا فشل الاتصال قبل رصد التأكيد، فقد تكرر إعادة العملية الأصلية النشر. لا يلغي النسخ حاجة التطبيق لهوية ثابتة وتحمل الوجهة للتكرار عند حدود أثر المستهلك.
مراجعة جرد توزيع اصطناعي
يسرد JSON ثلاثة أعضاء ونطاقاتهم الاصطناعية المنفصلة. إنه بيانات مراجعة، لا أمر إضافة أعضاء أو توزيع قادة أو تعديل عنقود. قارن التوزيع المقصود بالأدلة الفعلية في مراجعة تشغيلية مصرح بها. لا تعِد إنشاء دليل بيانات عضو فاشل اعتباطياً لاختصار الحادث؛ فإجراءات العضوية والتعافي حساسة للإصدار وقد تؤثر الاستعادة. صفوف quorum طوابير عمل دائمة منسوخة، بينما تخدم Streams حالات إعادة قراءة محتفظ بها بدلالات استهلاك مختلفة. لا تنطبق وصفات classic mirrored على أساس RabbitMQ 4.1.
{"queue":"lab.labels","type":"quorum","members":[{"node":"lab-a","domain":"zone-a"},{"node":"lab-b","domain":"zone-b"},{"node":"lab-c","domain":"zone-c"}]}
يحدد الجرد نطاقات مقصودة؛ ولا يكتشف عضوية أو يعدلها.
تخطيط التعافي وراء عقدة سليمة واحدة
ينبغي أن تحدد مراجعة الحادث الصفوف المتأثرة والأعضاء الباقين وأخطاء التأكيد وتقدم المستهلك وأول عرض شبكة أو موارد. لا تغير العضوية أو تتخلص من نسخة لمجرد احمرار لوحة. يحتاج التعافي المستقل من الأخطاء المنطقية أو فقد نطاق كامل أدلة منفصلة وخطة استعادة مدعومة. لا يستعلم الدرس عنقوداً ولا يعدل عضواً ولا يعيد عقدة. ينفذ حساب الأغلبية ويفحص جرد توزيع فقط؛ فتظل إتاحة النصاب والمتانة والتعافي الفعلية غير مختبرة، ولا تستنتج من النموذج المحلي.
الأخطاء الشائعة وإصلاحها
افتراض وجود بيانات الصف على كل عقدة عنقود.
- لماذا يحدث؟
- استبدال عضوية الصف بعضوية العنقود.
- كيف تصلحه؟
- افحص جرد نسخ الصف بأدلة مصرح بها.
- كيف تتجنب تكراره؟
- وثق العضوية المقصودة والفعلية منفصلتين.
وصف نقطة أقلية بصف كتابة سليم.
- لماذا يحدث؟
- استبدال أدلة الأغلبية والقيادة بالوصول الشبكي.
- كيف تصلحه؟
- راجع إتاحة الصف ونتائج العميل معاً.
- كيف تتجنب تكراره؟
- أدرج فقد الأغلبية في نموذج الفشل.
فقد ثلاث نسخ بعطل نطاق واحد.
- لماذا يحدث؟
- عدم فصل التوزيع للخطر المترابط.
- كيف تصلحه؟
- راجع التوزيع وتغطية التعافي المستقل.
- كيف تتجنب تكراره؟
- سم نطاقات الفشل الفعلية في قبول التصميم.
اختبر فهمك
1. هل يشكل عضوان متاحان أغلبية من خمسة أعضاء معلنين؟
اعرض الحل المشروح
لا؛ يتطلب الحساب ثلاثة. لا يشخص ذلك صفاً فعلياً وحده، إذ تهم القيادة والصحة والتوقيت أيضاً. يفيد الوصول لأقلية كدليل اتصال، ولا يستبدل قواعد اتفاق الصف وإتاحته.
2. هل يثبت عدم إتاحة النصاب مؤقتاً فقد كل الرسائل المؤكدة؟
اعرض الحل المشروح
لا؛ الإتاحة ونجاة البيانات حقيقتان مختلفتان. احفظ أدلة الأعضاء والتخزين وافحص نتائج العميل واتبع التعافي المدعوم. تجنب اختصارات مدمرة تحول انقطاعاً إلى فقد دائم، وصالح النشر غير المؤكد بهوياته الأصلية.
أهم ما تعلمته
- تحدد أغلبية الصف وتوزيعه حدود الفشل.
- لا تثبت إتاحة النسخ تفرد الأثر عبر المسار.