حول المحتوى:
مقدمة في خوارزميات الاتفاق مثل Raft وPaxos ولماذا تعد أساساً في قواعد البيانات الموزعة.
في الأنظمة الموزعة، لدينا عدة خوادم (Nodes) تعمل معاً لتقديم خدمة واحدة للمستخدمين. لكن ماذا يحدث عندما نحتاج لاتخاذ قرار موحّد بين هذه الخوادم؟ كيف نتأكد أن جميع الخوادم لديها نفس البيانات، وتنفذ نفس القرار، حتى في وجود أعطال في الشبكة أو سقوط بعض الخوادم؟ هنا يأتي دور Distributed Consensus Algorithms.
هذه الخوارزميات هي القلب النابض للأنظمة الموزعة الحديثة: قواعد البيانات الموزعة، أنظمة التخزين، منصات الرسائل، وحتى أنظمة الـ Microservices المعقّدة. بدون اتفاق موزع ثابت وموثوق، لن نستطيع ضمان صحة البيانات أو استمرارية الخدمة.
في هذا المقال من افهم صح سنشرح:
الاتفاق الموزع هو عملية اتخاذ قرار واحد متفق عليه بين مجموعة من الخوادم في نظام موزع، على الرغم من:
بشكل مبسّط، نريد أن نضمن أن:
المثال الكلاسيكي: لديك قواعد بيانات موزعة على عدة خوادم. عندما يأتي طلب تحديث (مثلاً: خصم مبلغ من رصيد حساب)، يجب أن يتم تطبيق هذا التغيير على كل النسخ المتفق عليها من قاعدة البيانات، وبنفس الترتيب، حتى لا يحدث تضارب في الأرصدة.
يمكنك أن تتخيل أن الاتفاق الموزع مثل اجتماع لعدة مدراء يجب أن يوقّعوا على نفس القرار. إذا وقّع البعض ورفض البعض، أو تأخر توقيع البعض، تظهر الفوضى.
في الأنظمة الموزعة، المشكلة أعقد بكثير بسبب:
هنا تأتي خوارزميات Distributed Consensus Algorithms لتوفر ضمانات أساسية:
بدون هذه الخوارزميات، أي نظام موزع مع بيانات حرجة (مثل أنظمة مالية، منصات تجارة إلكترونية، أو نظم تخزين حرجة) يمكن أن يصل إلى حالة بيانات فاسدة أو متناقضة بسبب أعطال بسيطة.
خوارزميات الاتفاق الموزع ليست نظرية فقط، بل هي جزء أساسي من أغلب البنى التحتية الحديثة، مثل:
هذه الأنظمة تحتاج إلى "مصدر حقيقة موحّد" (Single Source of Truth) لحالة النظام، إعدادات الخدمات، أو بيانات الميتا (Metadata). وهنا يتم الاعتماد على خوارزميات الاتفاق مثل Raft وPaxos.
إذا كنت مهتماً أكثر ببناء الأنظمة الكبيرة، فقد يفيدك قراءة: شرح Horizontal Scaling وكيفية تعامل الأنظمة الكبيرة مع ملايين المستخدمين.
أغلب خوارزميات الاتفاق تعتمد على مفهوم الأغلبية (Quorum). بدلاً من انتظار جميع الخوادم (التي قد يفشل بعضها)، نحتاج فقط إلى موافقة أغلبها.
إذا كان عندك 5 خوادم، الأغلبية تكون 3. بمجرد أن توافق 3 خوادم على قرار معين، يمكن اعتباره مقبولاً، حتى لو الخوادم الأخرى متأخرة أو متوقفة.
الكثير من خوارزميات Distributed Consensus تتبع نمط Leader-Based، أي:
وجود قائد يسهّل الحفاظ على ترتيب موحّد للأوامر، بدلاً من السماح لكل خادم أن يتخذ قرارات مستقلة.
من أجل الحفاظ على نفس الحالة في كل الخوادم، تستخدم كثير من الأنظمة Replicated Log:
هذه الفكرة هي الأساس في Raft والكثير من تطبيقات Paxos، وتسمى أحياناً State Machine Replication.
Paxos من أقدم وأشهر خوارزميات الاتفاق الموزع، قدمها Leslie Lamport. تعتبر أساس الكثير من الأبحاث، لكنها مشهورة أيضاً بأنها صعبة الفهم والتطبيق.
Paxos تحاول الإجابة على سؤال: كيف تختار مجموعة من الخوادم قيمة واحدة متفق عليها (مثلاً: من هو القائد؟ ما هو القرار الخاص بمعاملة معينة؟) رغم الأعطال؟
الخوارزمية تعتمد على:
وتعمل على جولتين أساسيتين (Prepare / Accept)، حيث يقوم المقترِح بإرسال اقتراح برقم معين، ويحصل على وعود من مجموعة من المقبِلين بعدم قبول اقتراحات أقدم أو أقل أولوية، ثم يحاول تثبيت القيمة عندما يحصل على موافقة الأغلبية.
من الناحية النظرية، Paxos قوية جداً وتضمن السلامة في وجود أعطال الشبكة وسقوط الخوادم. لكن عملياً، عندما نحاول تحويلها إلى نظام كامل لإعادة حالة (Replicated State Machine)، تصبح التفاصيل معقدة، مما دفع المجتمع للبحث عن بدائل أبسط.
Raft ظهرت بهدف واحد رئيسي: تقديم نفس قوة Paxos، لكن بطريقة أسهل للفهم والتطبيق. اليوم، Raft هي واحدة من أكثر خوارزميات الاتفاق الموزع استخداماً في المشاريع المفتوحة المصدر.
في Raft، كل خادم يمكن أن يكون في أحد هذه الأدوار:
Raft تقسم الزمن إلى فترات متتالية تسمى Terms. في كل Term، يمكن أن يكون هناك قائد واحد فقط (أو لا يوجد قائد إذا لم تكتمل الانتخابات). هذا يساعد في:
آلية الانتخابات في Raft هي جوهر مفهوم الاتفاق:
هذا التصميم يضمن أنه في كل Term يوجد على الأكثر قائد واحد، وأن القائد يمتلك السجل الأكثر تحديثاً.
عندما يصل طلب من الكلاينت (مثلاً تحديث أوامر معينة):
النقطة الجوهرية: لا يعتبر أي تحديث نهائي (Committed) إلا بعد موافقة الأغلبية، وهذا هو جوهر Distributed Consensus Algorithms.
Raft مصممة بحيث:
هذا يضمن أن أي قرار Committed لن يضيع حتى في حالة الأعطال المتكررة، طالما أن هناك أغلبية من الخوادم حية وقادرة على التواصل.
من الناحية النظرية، يمكن لكليهما تحقيق نفس الضمانات تقريباً، لكن من الناحية العملية: Raft أصبح الخيار الأكثر شيوعاً في المشاريع الجديدة بسبب بساطته النسبية.
خوارزميات الاتفاق الموزع هي الأساس الذي تبني عليه قواعد البيانات الموزعة:
مثلاً، في نظام مثل CockroachDB أو TiDB، يوجد عادة مجموعة صغيرة من الخوادم تدير “سجل اتفاق” باستخدام Raft. هذا السجل يحتوي على قرارات مثل:
بدون اتفاق موزع، يمكن أن يحدث تضارب في المعلومات بين الخوادم، مما يؤدي لضياع بيانات أو ازدواجية معاملات (Double Spending) أو استجابات متناقضة للكلاينت.
إذا كنت مهتماً أكثر ببنية قواعد البيانات والأداء، راجع: كيف تعمل الفهارس في قواعد البيانات؟ شرح B-Tree وHash Index.
عند تصميم نظام موزع كبير، ستستخدم مجموعة من الأنماط (Patterns) لتحقيق الاعتمادية والمرونة، مثل:
خوارزميات الاتفاق الموزع مثل Raft وPaxos تُعتبر الطبقة العميقة التي تبني عليها هذه الأنماط:
بمعنى آخر، عندما ترى نظاماً يستخدم Retry أو Leader Election أو Sharding، فغالباً يوجد في الطبقة السفلى Distributed Consensus Algorithm يدير حالة هذا النظام ويضمن اتساقها.
في الغالب، لا.
معظم المطوّرين لن يكتبوا خوارزمية Paxos أو Raft من الصفر في مشروع إنتاجي. بدلاً من ذلك:
لكن فهم الفكرة العامة لـ Distributed Consensus Algorithms مهم جداً لكل من يعمل في:
هذا الفهم يساعدك على اتخاذ قرارات صحيحة عند اختيار تقنياتك، وفهم حدود كل نظام (متى يكون Strongly Consistent، ومتى يكون Eventually Consistent فقط).
خوارزميات Distributed Consensus Algorithms مثل Raft وPaxos هي الأساس الذي تعتمد عليه:
فهمك لهذه الخوارزميات يمنحك رؤية واضحة لكيفية:
إذا كنت في بداية طريقك مع الأنظمة الموزعة، ننصحك بقراءة: ما هو Distributed Systems؟ ولماذا يعتمد عليه كل الإنترنت تقريباً، ثم العودة لمفاهيم الاتفاق الموزع لفهم الصورة الكاملة لكيفية عمل البنى التحتية العملاقة في العالم الحقيقي.
مقدمة في خوارزميات الاتفاق مثل Raft وPaxos ولماذا تعد أساساً في قواعد البيانات الموزعة.
مساحة اعلانية