في هذه الصفحة
قبل أن نتطرق للحديث عن النصاب في النظم الموزعة، دعونا نتذكر ما تحدثنا عنه سابقًا في النسخ المتماثل وبالأخص في النسخ المتماثل التزامني والذي رأينا أنه يعاني من بطء في الأداء خصوصًا مع عمليات الكتابة. وذلك لاحتياج الـ Leader أن يقوم بانتظار عمليات الكتابة أن تتم في الـ Follower Replicas ومن ثم الرد على المستخدم.
ورأينا النوع الآخر أيضًا والذي يقوم بالرد على المستخدم بمجرد استلام الـ Leader Replica للتغييرات ومن ثم يقوم فيما بعد بعملية التزامن دون أن يؤثر على المستخدم.
ولكن ألا يوجد حل آخر يمكننا من تحقيق التوازن ؟
في الحقيقة يوجد والحل هو ما سنتطرق للحديث عنه الآن وهو مبدأ النصاب أو ما يعرف بالـ Quorum.
ما هو النصاب ؟
النصاب في النظم الموزعة يتمثل بأقل عدد ممكن من العقد التي تحتاج إلى موافقتها حتى تتأكد من صحة العملية التي تقوم بها ويتم استعماله بشكل أساسي في العديد من الخوارزميات في النظم الموزعة. وفي مشكلتنا السابقة مع النسخ المتماثل التزامني يمكننا حلها وتحقيق التوازن عن طريق استخدام النصاب.
فلنفترض أنه يوجد نظام يحتوي على عشرة (١٠) عقد وبالتالي سيصبح ليدنا Leader Node و Follower Nodes .. عند حدوث عملية كتابة أو حدوث أي تغيير في البيانات .. لن ننتظر إلى أن يقوم الـ Leader بنشر تلك التغييرات في الـ 10 Replicas وتأخير الرد على المستخدم، ولكن باستعمال النصاب يمكننا القول بأنه إذا كان هنالك 6 Replicas فقط قاموا بتأكيد استلام التغييرات، سنعتبر تلك العملية ناجحة ويقوم الـ Leader بالرد على المستخدم بالنجاح.
فالآن قمنا بتحسين الأداء الناتج عن المشكلة السابقة والذي كان يحتاج إلى انتظار تأكيد جميع الـ Replicas إلى انتظار عدد (معين) وهو النصاب حتى يتم اعتبار العملية ناجحة.
والآن يمكننا النظر إلى أنه بزيادة عدد الـ Quorum يزداد اتساق البيانات ويزداد فرصة حصول المستخدم أثناء عمليات القراءة بأن يستلم أحدث التغييرات. ولكن هذا سيؤثر في الـ Response Time عكسيًا .. ومع وجود عدد أقل من الـ Quorum سنصل إلى سرعة أعلى ولكن البيانات لن تكون متسقة كلها في آنٍ واحد وفرصة حصول المستخدم على آخر التغييرات ستقل.
والمعادلة العامة لتحقيق النصاب هي Rw > R / 2 حيث تمثل الـ Rw عدد الـ Replica-Write وتمثل الـ R عدد الـ Replicas في النظام.
استعمال النصاب لتحقيق Serialisability
يوجد استعمالات أخرى للنصاب في النظم الموزعة وأشهرها أيضًا الـ Distributed Transactions حيث يمكنه تحقيق الـ Serialisability بين الـ Replicas المختلفة والحفاظ على الـ Order of Transactions وعدم جعل Read/Write Operation تتم بشكل Concurrently.
وهذا يتم تحقيقه من خلال وجود كلا من الـ Read Replica Quorum والـ Write Replica Quorum وتوجد بعض المعادلات التي تساعد في تحقيق ذلك لتحديد عدد الـ Replica Quorum. ولكننا لن نتطرق إليها