غالباً سوفتوير الأنظمة المصرفية أو منصات البث يجي مصمم على أنه بيقدر يشتغل بانسجام حتى لو واحدة من الخوادم (Servers) تعطل فجأة. إيش السبب هنا ؟ السبب أنه الأنظمة اللي زي ذي تكون أنظمة موزعة Distributed System. السر بالتحديد في هذا النوع من الأنظمة بيكمن في “التوافق” أو Consensus. ببساطة هو الطريقة اللي نضمن أن كل الخوادم في النظام تكون متفقة على نفس البيانات في نفس اللحظة. واحدة من الخوارزميات اللي حلت هذه المشكلة بذكاء وبساطة هي Raft.
قبل Raft، كان في خوارزمية اسمها Paxos واحدة من أقوى الخوارزميات للتوافق. لكنها كانت صعبة جدًا للفهم، وحتى تطبيقها كان يحتاج وقت ومجهود. وهنا جاء دور Raft. الفكرة الأساسية وراء Raft إنها تقدم نفس كفاءة Paxos، لكنها أسهل كثير في الفهم والتطبيق، خصوصًا للمهندسين اللي يتعاملون مع الأنظمة الموزعة.
الأساس في Raft هو وجود قائد (Leader). وهو عبارة عن خادم (Server) يتم انتخابه من بين الخوادم الأخرى في النظام. القائد هو المسؤول عن تلقي جميع الطلبات من العملاء، مثل “تحديث بيانات المستخدم” أو “إضافة عملية شراء”. بعد كذا، يقوم القائد بإرسال هذه الطلبات إلى الخوادم الأخرى، اللي نسميهم التابعين (Followers). هذه الخوادم تخزن الطلبات في سجل (Log) بنفس الترتيب. ولما توافق الأغلبية (Majority) على الطلب، يعتبر “مثبتًا” (Committed) ويتم تنفيذه على جميع الخوادم.
طيب لو تعطل القائد؟ هنا تبدأ الانتخابات (Elections)، حيث تقوم الخوادم التابعة (Followers) باختيار قائد جديد. العملية تتم بشكل منظم وسريع جدًا، بحيث يستمر النظام في العمل بدون أي توقف أو تضارب.
خوارزمية Raft مش فقط مجرد فكرة نظرية إنما مستخدمة في العديد من التطبيقات والبرمجيات الشهيرة اللي نعتمد عليها بشكل يومي.
لو أنت شغال على Kafka فال Raft بتعتبر حجر الأساس لإدارة التوافق بين (Partitions). بتُستخدم في Etcd لإدارة البيانات الموزعة في Kubernetes، وفي Consul لاكتشاف الخدمات service discovery وإدارة ال configuration. مستخدمة في أنظمة قواعد البيانات زي وCockroachDB.
ممكن الكلام يكون شوية نظري لكن صدقني فهمك لخوارزمية زي ال Raft بشكل عميق بتساعدك انك تفهم طريقة عمل كل السوفتوير اللي مبنية عليها. بحط بالتعليقات لينك ل paper لو أنت حابب أنك تقرأ بالموضوع بشكل أعمق ممكن تفيدك فيه.
Original source
This content was originally published as a LinkedIn post. Open it in a new tab.