- الحصول على الرابط
- X
- بريد إلكتروني
- التطبيقات الأخرى
- الحصول على الرابط
- X
- بريد إلكتروني
- التطبيقات الأخرى
نبدأ الأول بتعريف الاختصارات ال C هي اختصار لكلمة Consistency وال a هي اختصار لكلمة Availability وال p هى اختصار لكلمة Partition tolerance .
عند بناء distributed system يكون هدفنا هو زيادة كفاءة ال system بشكل عام ، وهنا يمكن طرح سؤال بديهي ، ما هى علاقة الـ distributed system بال cap theorem ؟
بعيداً عن الكلام النظري والتعريفات تعالى نشوف مع بعض ايه علاقة الـ cap بال distributed system .
تخيل أن احنا عملنا مشروع بسيط وهو عبارة عن ATM Machine وعملنا برنامج والبرنامج يتم عمل ليه تسطيب على الـ ATM machine .
المستخدم ببساطة ممكن يعمل التالي من خلال الـ ATM
1-يسحب فلوس من حسابه
2-يودع فلوس فى حسابه
ال software يقوم بالعملية المطلوبة من قبل المستخدم ويتم تحديث البيانات الخاصة بال User بالتالي كل المعلومات الخاصة بالمستخدم موجودة على مستوى الـ Atm Machine.
تمام عملنا Atm Machine واحده بال software الخاصه بها و اصبحت موجوده مثلاً فى مكان عام , الإقبال زاد وفى مستخدمين كتير بيستخدموا ال atm machine .حلو الكلام دا ,بس فى نقطه مهمه لازم تفكر فيها و تلاحظها بسهولة ، مع زيادة عدد المستخدمين يزداد الضغط والزحام على الـ atm بالتالى الشخص ممكن ينتظر مدة طويلة عشان يعمل عملية سحب او ايداع بالتالى المستخدم هيضطر يستنى مدة طويلة.
وعدد العمليات التي تتم فى اليوم هتقل أو هتفضل محصورة عند نسبة معينة ،لو انت لك نسبة معينة عن كل عملية فنسبة أرباحك هتفضل محصورة في نقطة معينة ، لأن بالرغم أن عدد المستخدمين زاد فأنت غير قادر انك تستفيد من هذه الزيادة بل بالعكس التجربة للمستخدم بقت اسوأ لأنه محتاج وقت طويل علشان يعمل عملية سحب أو إيداع واحدة.
ما هو الحل لهذه المشكلة؟
فى الاول لم نكن نتوقع أن عدد المستخدمين هيزيد , فكان ال Hardware الخاص بال atm بسيط، بمعنى أن ال Processor كان بإمكانيات متواضعة وهكذا ال Ram وبما أن عملية الإيداع والسحب عملية معقدة جداً , بهزر طبعاً :) ، بس تخيل انها معقدة وتحتاج وقت عشان تتنفذ. ولنفترض أن المشكلة فعلاً بسبب أمكانيات ال Atm Machine فبالتالى لما نزود امكانياتها هيفرق معانا فى وقت التنفيذ وبالتالي العمليات هتتنفذ بشكل أسرع فبالتالى وقت الأنتظار يقل فالبتالي عدد العمليات التى يقوم بها المستخديمن هتزيد فالبالتالى احنا نكسب اكتر .
بس ثانيه هل دا حل مناسب ؟ هو حل مناسب بس لحد امتى ؟ هل لو عدد المستخدمين فضل فى زياده مستمره هنفضل نزود من إمكانيات الـ atm بس هل ال hardware ليس له limit ؟
بالتأكيد ال hardware ليه حدود وكل م الإمكانيات بقت اعلى هتتكلف فلوس اكتر واكتر وهكذا.
ما هو الحل المناسب فى حالة لو زيادة أمكانيات ال hardware ليها limit معين وتكلفة غاليه وفى نفس الوقت لن تساهم فى حل المشكلة بشكل كبير .
الحل ان يتم صنع Atm Machine ثانيه حتى لو بامكانيات متوسطه فبالتالى عدد المستخدمين هيتقسم بين اكثر من machine وبهذا الحل هنقدر نوزع الشغل المطلوب بين اكتر من machine فبالتالى قادرين نتعامل مع عدد مستخدمين اكثر حتى لو امكانيات ال machine متواضعه .
ما تم عمله ببساطة نقدر نقول عليه distributed system ، ال sytem هدفه يساعد المستخدم أنه يعمل عملية ايداع وسحب، من أجل حل مشكلة زيادة عدد المستخدمين والضغط الكبير على الـ system قررنا ندخل machine جديده معانا فى الخدمه حتى لو لو كانت ال machines إمكانياتها متواضعة.
بس فى نقطه مهمه ، الأن عندنا Atm1 و Atm 2 فالبتالي انا لو رصيدى 100 وعملت عملية سحب 50 بواسطة A1 فرصيدى هيكون 50 فى At1، فأحنا عاوزين الرصيد يبقى 50 كذلك فى At2 .
حاجه منطقيه جداً أن البيانات الموجوده فى A1 لازم تكون هى نفسها فى A2 ، أى لازم يحصل تزامن للبيانات بين at1 و at 2 .
الحل سهل هنوصل ال machines ببعض عن طريق ال network فالبالتى لو فى عمليه حصلت فى at1 هتبعت event أو ممكن أشاره إلى at2 علشان at2 تحدث البيانات الخاصة بها .
حلو الكلام دا , احنا كان عندنا system بسيط فزاد عدد المستخدمين فزودنا أمكانيات ال hardware والحل دا نفع بشكل مؤقت معانا , فغيرنا تفكيرنا وقررنا نصنع كمان machine علشان نحل المشكله، بس كان لازم نعمل مزامنة البيانات بين ال machines ولهذا استخدمنا ال network .
بس للأسف زى أى حل بسيط بنستخدمه علشان نحل مشكله معينه , فالحل البسيط ذات نفسه هيجيب ليا مشكله او مجموعه من المشاكل 😂
تخيل لو بلال عمل عملية سحب بأستخدام at1 وفى نفس اللحظة كانت at2 حصل فيها عطل او مثلاً لسبب ما ال network حصل فيها مشكلة.
انت لو فضلت تفكر وتعد الأسباب التى تمنع أن يحصل تواصل بين ال two machines هتلاقىها لا تعد ولا تحصى , لذلك لو ال system كان distributed فلازم المشكله دى هتحصل .
ومن النقطه دى هنبدأ مع أخر حرف من ال CAP وهو ال P وP اختصاراً لكلمة Partion وهنا المقصود هل ال system متقسم او فى اكتر من machine بتعمل run لل system .
لو الاجابه أيوا فال system يعتبر distributed فاكيد هيحصل مشكله تواصل بين ال machines اياً كان السبب , هتحصل امتى وازاى وليه منعرفش نحددها ,المهم انها هتحصل .
أول حرف من cap وهو Consistency
وهنا المقصود لو رصيد محمود 100، هل لو محمود شاف رصيده فى at1 و at2 هيلاقيه 100 ولو ممكن يلاقى فى at1 الرصيد 60 وat2 الرصيد 100.
ال consistent بتقول ان لازم رصيد محمود يكون هو نفسه بين at1و at2 ومينفعش يختلف .
بالتالى فى ال system الخاص بينا لو محمود قرر يعمل ايداع فى حسابه ب 50 بأستخدام at1 , ف at1 لن تقوم بأكمال العمليه الأ لما تتاكد أن at2 استقبلت ال event منها .
ال a من cap وهو availability
لو ال system كان distributed قالبتاكيد هنقدر نقول أنه بيحقق شرط ال P
ال availability معناها أنه من غير المقبول أن محمود يعمل ايداع فى at1 أو سحب والطلب بتاعه يترفض لأن at2 فيها مشكله، لأن ال system فى هذه الحاله بقى unavailable بالنسبه لل user ،على الرغم أن مفيش مشكله فعلياً من وجهة نظر المستخدم .
ممكن نحقق الشرط دا بأن احنا نسمح بأكمال عملية السحب والإيداع الخاصة بمحمود , وأول لما تكون at1 عرفت تتواصل مع at2 فهتبعت ليها كل العمليات التى تمت بنجاح حتى تقوم بعمل التخديثات اللازمه.
بس بهذه الطريقه لم نحقق ال Consistency لأن البيانات بقت مختلفة بين at1 وat2 واختارنا أن ال system يكون available عوضاً أنه يكون consistent .
بالتالى نظرية ال CAP المكونه من 3 حروف بأختصار أن لو ال system معمول ليه partition فنستنج أنه هيحصل ليه partition failure ، فانت فلازم تختار بين أن ال system يكون consistent او يكون available.
تعليقات
إرسال تعليق