في هذه الصفحة
من خلال النظر إلى المقال السابق يمكننا استنتاج بعض من الإجابات على هذا السؤال ولكن دعونا نتطرق إليها مرة أخرى ونذكرها بشكل مباشر حتى يترسخ في ذهننا الأسباب التي تدعونا للاهتمام ببناء النظم الموزعة.
هنالك عدة أسباب تدفعنا للاهتمام ببناء النظم الموزعة
السبب الأول
أحد أهم الاسباب الرئيسية لبناء النظم الموزعة هي (التوسع) أو ما يعرف بالـ Scalability فبالنظر إلى المقال السابق أصبحت الرؤية واضحة نوعًا ما وذلك لإن التطبيق الذي تقوم ببناءه من الممكن أن يتم استخدامه من قبل العديد من المستخدمين.
ولكن لماذا مع زيادة المستخدمين نحتاج إلى زيادة عدد العقد بدلًا من العقدة الواحدة ؟ لماذا نحتاج لأكثر من Machine ؟
هذا وبكل بساطة لإن كل عقدة أو Single Machine لديها حد لا يمكن للـ Resources الخاصة بها أن تزيد عنه. ويقصد هنا بالـ Resources على سبيل المثال الـ RAM / CPU.
وبزيادة عدد المستخدمين ولكي يصبح التطبيق الذي تقوم ببناءه قادر على مواكبة هذا الحمل الزائد فلابد من اضافة المزيد من العقد حتى نستطيع خدمة هذا العدد المهول من المستخدمين بدون أية مشاكل.
السبب الثاني
والذي ادركناه من المثال في المقال السابق على تطبيق اقرأ-تِك وهو تحقيق مبدأ (التسامح مع الخطأ) أو ما يعرف بالـ Fault-Tolerance فبوجود أكثر من عقدة تعمل في آن واحد، يمكن للتطبيق العمل بشكل جيد بدون أية أعطال أو مشاكل وذلك لإنه إذا حدثت أية مشكلة لأحد العقد الموجودة لن تؤثر على عمل التطبيق بأكمله وتجعله غير متاح.
فهنالك عقد أخرى يمكنها العمل بشكل جيد بدون الاعتماد على هذه العقدة التي حدثت بها المشكلة.
السبب الثالث
والذي يُعد سبب آخر من الأسباب المهمة في بناء النظم الموزعة هو تحقيق مبدأ (التوفر) أو ما يعرف بالـ Availability، ومعنى ذلك أنه في أية وقت إذا احتجنا لعمل صيانة أو حدثت أية مشكلة لأي عقدة من العقد الموجودة ستكون الخدمة أو البيانات التي تحتاج إليها موجودة وتعمل بشكل جيد.
ويتم تحقيق هذا المبدأ بكل بساطة من خلال عملية النسخ المتماثل أو ما يعرف بالـ Replicating للبيانات أو الخدمة التي تحتاج إليها.
السبب الرابع
وهو (التوزيع الجغرافي) أو ما يعرف بالـ Geographic Distribution فهنالك العديد من التطبيقات التي تستهدف والمتاحة لكل الناس استخدامها أينما كانوا، أي في العالم بأكمله وتحتاج لأن تكون متوفرة وبشكل جيد وبدون أية مشاكل. فيمكننا تحقيق ذلك من خلال زيادة عدد العقد وتوزيع كل مجموعة منهم في منطقة جغرافية معينة.
هنالك أيضًا المزيد من الأسباب التي تدفعنا لبناء النظم الموزعة ولكن سنترك البحث والقراءة عليها هو التحدي التالي لك.
تقييم الاحتياجات الضرورية لبناء النظم الموزعة
يجب عليك كمصمم للأنظمة قبل اتخاذ أي قرار ببناء النظم الموزعة وقبل جعل تطبيقك يدعمها أن تفكر مليًا في المتطلبات التي يحتاج إليها النظام الذي تحاول بناءه. كما يجب عليك دراسة وفهم احتياجات المستخدمين لهذا النظام وما المطلوب تحقيقه.
فعلى الرغم من كونه عمل جيد لبناء تطبيقك بهذا الشكل إلا أنه سيتطلب المزيد من المجهود المبذول والذي من الممكن أن يكون بدون أية فائدة.
فعلى سبيل المثال يمكننا أن نسأل أنفسنا بعض الأسئلة التي تساعدنا في أخذ هذا القرار:
- هل نحن في احتياج لزيادة ووجود عقد أخرى اضافية بدلًا من وجود عقدة واحدة ؟ هل يمكننا الاعتماد فقط بدلًا من وجود أكثر من عقدة على زيادة الـ Resources الخاصة بالعقدة التي تعمل كزيادة سعة الـ RAM / CPU وسيكون ذلك كافي ؟ ما هو حجم الـ Traffic المتوقع من المستخدمين وهل يتطلب لوجود أكثر من عقدة أم عقده واحدة كافية لتحقيق الغرض ؟
- إذا حدثت أية مشكلة في العقدة التي تعمل، هل من الممكن الاكتفاء بوجود عقدة أخرى بديلة ومستعدة أو عقدتين لتحل محلها كبديل وهو ما يعرف بالـ Standby Node ؟ وإذا كانت الاجابة هي نعم ، فهل من الممكن جعل المستخدم ينتظر بضع دقائق حتى تعمل تلك العقدة الآخرى البديلة وتحل محل التي حدثت بها الخطأ ؟
- هل نحن في احتياج لوجود أكثر من عقدة لتحمل قاعدة البيانات أم فقط واحدة تكفي لتلبية الاحتياجات المطلوبة منها ؟ وهذا سيعتمد بكل تأكيد على معرفتك وعمل دراسة تحليلية لعدد الـ Read/Write Queries التي تحتاج لتنفيذها.
- ماذا إذا حدثت مشكلة ما في العقدة التي تحمل قاعدة البيانات ؟ هل من الممكن بناء قاعدة بيانات من جديد وأخذ النسخة الاحتياطية أو ما يعرف بالـ Backup ونقوم بملء قاعدة البيانات الجديدة بها ؟ وهل إن كانت هذه العملية ستأخذ بضعة دقائق فهل من الممكن جعل المستخدم ينتظر ؟
- ما هي التكلفة المتاحة لنا لبناء النظام وهل تلك التكلفة ستكفي لبناء النظام بهذا الشكل ؟
- هل أنت على دراية بالصعوبات التي من الممكن الاحتكاك بها والتعامل معها أثناء بناءك لذلك النظام ؟ وهل لديك الموارد والخبرة المتاحة للعمل والصيانة ؟
الغرض من تلك الأسئلة هو ادراكك لمدى احتياج النظام الذي تبنيه لكونه يعتمد على النظم الموزعة من عدمه ومعرفتك بمدى صعوبة بناء نظام يعتمد على النظم الموزعة وأنه لابد من عمل دراسة تحليلية والاجابة على هذه الأسئلة.
التحديات التي نواجهها في تصميم النظم الموزعة
يُعد بناء وتصميم النظم الموزعة من الأمور الصعبة ويوجد العديد من التحديات التي يجب الإلمام بها أثناء التعامل مع النظم الموزعة والتي سنذكرها في هذا الدرس.
شبكة الاتصالات – Network Communication
من أحد أهم التحديات التي نواجهها في بناء وتصميم النظم الموزعة هو كيفية التواصل بين النظم الموزعة وبعضها البعض، وحيث أنه من الممكن التواصل بين العديد من العقد الموزعة والتي تتواجد في مختلف الأماكن الجغرافية، فهذا يُعد بمثابة تحدي وذلك لوجود اما بعض التأخير في اتمام عملية التواصل أو التواصل بشكل فعال.
تناسق البيانات – Data Consistency
من أحد أهم التحديات وأكثرها شيوعًا هو عدم تناسق البيانات أو ما يعرف بالـ Data Inconsistency بين مختلف العقد في النظم الموزعة وهذا يحدث للعديد من الأسباب أشهرها هو وجود اختلاف وتضارب في البيانات بين العقد وبعضها البعض. وكيفية تحقيق التناسق واختيار النموذج المناسب يعد من المعاييروالمتطلبات الأساسية التي يجب مراعاتها في بناء وتصميم النظم الموزعة
التسامح مع الخطأ – Fault Tolerance
من أحد أهم الأسباب في بناء النظم الموزعة هو لتحقيق مبدأ (التسامح مع الخطأ) أو ما يعرف بالـ Fault-Tolerance ولكن من التحديات التي تنتج عن هذا المبدأ هو كيفية التنسيق بين باقي العقد المختلفة وبعضها لاتمام المهام بشكل جيد وبدون حدوث أية مشاكل.
الأمن – Security
من التحديات التي نواجهها أيضًا في بناء وتصميم النظم الموزعة هو كيفية جعلها آمنة، وهذا لإنه بتواجد العديد من العقد الموزعة تصبح النظم الموزعة أكثر عرضة للاختراق والهجوم مثل: Network Intrusions – DDOs – Data Breaches وتعد هذه الهجمات من أشهر الهجمات التي تتعرض لها النظم الموزعة.
الاختبار والتصحيح – Testing and Debugging
يعد اختبار وتصحيح النظم الموزعة من الأمور الصعبة في التعامل معها وذلك لإنه من الممكن حدوث الخطأ في مختلف العقد والأجزاء المختلفة منها مما يؤدي إلى زيادة الصعوبة في تصحيح بعض المشاكل والأخطاء وزيادة الوقت اللازم لمعرفة وتحديد المشكلة.