تصميم النظام
تصميم النظام هي عملية تحديد هيكلية النظام، وعناصره الأساسية من وحدات وواجهات أمامية وبيانات والتي تناسب متطلبات النظام الأساسية، وتتخصص هذه المرحلة في وضع خطة كاملة لطريقة تنفيذ المنتج المطلوب، ومن أهداف تصميم النظام تقديم حلول منظمة بكفاءة عالية مع الأخذ في الاعتبار عوامل مهمة، مثل: قابلية التوسع (Scalability)، وقابلية الصيانة (Maintainability)، والأداء (Performance).
أهداف تصميم النظام System Design Objectives
في أي عملية من عمليات تطوير البرمجيات، سواء كانت بناء منتج ما أو عملية أخرى، تعد مرحلة التصميم هي أهم جزء، فبدون هذه المرحلة لا يمكنك الوصول إلى مراحل التنفيذ والاختبار، وينطبق هذا الأمر على الأنظمة، فهي ليست مجرد
مرحلة مهمة فقط، بل تعتبر العمود الفقري لحل المشاكل المعقدة، لأنها توضح الهدف التجاري وراء بناء هذا المنتج.
العملية (Practicality):
تصميم الأنظمة يحتاج إلى هدف واضح من أجل العمل عليه، ومن ضمن هذه الأهداف هم المستخدمين المحتملين
للنظام، فبناء على طلبات هؤلاء المستخدمين يتم تصميم المنتج المطلوب. وتتضمن تطبيق عمليات النمذجة والبروتوتايب.
الدقة (Accuracy):
على مصممي البرمجيات احترام المتطلبات الموثقة بجميع أنواعها، سواء كانت متطلبات وظيفية (Functional)، أو غير
وظيفية (Non-Functional)، لأن هذا يساعد في تقديم تصميم بدقة عالية، ومقبول لدى العميل.
الكفاءة (Efficiency):
لابد من تصميم نظام ذو كفاءة عالية من عدة أوجه، وأهمها القدرة على استخدام الموارد المتاحة وعدم الحاجة لوجود
موارد كبيرة لتشغيل النظام، كما تساهم تقليل سرعة استجابة البرنامج إلى زيادة كفاءة البرنامج بشكل عام، وتعد
الكفاءة أهم أهداف تصميم النظام التي تهتم بها العديد من الشركات البرمجية.
المصداقية (Reliability):
لابد أن يكون النظام قادر على العمل في بيئات مختلفة بعيدا عن بيئة التطوير، والعمل بشكل صحيح بدون وجود مشاكل
لفترة كبيرة.
المرونة (Scalability):
تصميم نظام قابل للتكيف مع احتياجات المستخدمين بمرور الوقت من أفضل الممارسات في تصميم الأنظمة، مثل:
القدرة على استيعاب عدد كبير من المستخدمين والتأقلم مع هذا التغيير من خلال تحسين سرعة الإستجابة.
مكونات تصميم النظام System Design Components
موازنات الأحمال (Load Balancers):
هي مجموعة من الخوارزميات التي تحسن الأداء عن طريق زيادة وقت الإستجابة، وتقليل بطء الشبكة، وتقوم بمهام مثل: توزيع الأحمال بين الخوادم لتحسين أداء البرنامج، وإعادة توجيه طلبات العملاء إلى خوادم قريبة من المنطقة التي
يستقرون فيها لزيادة سرعة الإستجابة.
قاعدة بيانات القيم الزوجية (Key-Value Stores):
هي قاعدة بيانات ولكن تستخدم نموذج بيانات آخر يسمى المصفوفة الترابطية (Associative Array) حيث يرتبط كل Key مع قيمة (Value) واحدة فقط في المجموعة، وتسمة هذه العلاقة بالعلاقة الزوجية.
أماكن تخزين البيانات الغير منتظمة (Blob Storage):
هي نوع من أنواع طرق التخزين السحابية لتخزين البيانات الغير منتظمة، وتشير كلمة Blob إلى Binary Large Object
وتعني كتلة من البيانات في شكل ثنائي والتي لا تنتمي إلى نوع ملفات معين.
قواعد البيانات (Databases):
وهي طريقة تخزين البيانات المنتظمة في شكل أعمدة وصفوف، كما يوجد علاقات مختلفة بين الجداول وبعضها، ويمكن التعديل واستعداء تلك البيانات باستخدام لغة الاستعلام الهيكلية (SQL).
محددات المعدل (Rate Limiters):
هي أساليب معروفة تعمل على تقليل الأحمال على الشبكة، عن طريقة وضع حد للأشخاص التي تقوم بتكرار
الإجراءات خلال إطار زمني معين، مثل: عدد مرات محاولة تسجيل الدخول إلى وسائل التواصل الإجتماعي.
أنظمة المراقبة (Monitoring System):
هي برامج تساعد مسؤول النظام (System Admin) في مراقبة الأنظمة في بيئة برمجية بحتة، كما يوجد العديد من
أدوات المراقبة وكل منها لديه مميزات، وتختلف أنواعها بين الأدوات التي تقوم بوظيفة واحدة، والأدوات التي تراقب
آلاف الأجهزة والتطبيقات لدى المؤسسات الضخمة.
صفوف رسائل الأنظمة الموزعة (Distributed System Messaging Queue):
هي تقنية تحسن تصميم النظام، وتتميز بوجود مكونات الفصل، ومصداقية عالية جدا والتعامل الجيد مع العيوب، وتوفير
التواصل الغير متزامن، وتوفير أيضا معالجة وتحليل البيانات في نفس الوقت.
هيكلية النظام System Architecture
هو أساس تصميم النظام البرمجي، حيث يقوم هذا الجزء على توضيح المكونات الأساسية للنظام، ومستويات التجريد المطلوبة، وبعض الجوانب الأخرى، ومن أجل فهم هذه الأمور لابد من توضيح المنطق وراء تصميم النظام من خلال توثيقات واضحة، كما يعد هذا الجزء مرجع جيد للشركات لتصميم أنظمة قابلة للتوسع.
توجد العديد من طرق تنظيم المكونات الأساسية للنظام، وتعرف هذه الطرق بإسم أنماط هيكلية البرمجيات (Software Architecture Patterns)، وهذه الأنماط تمت تجربتها من قبل مطوري البرمجيات في بناء بعض الأنظمة، فبعضها نجح في
حل مشكلات مختلفة، ويختلف كل نمط عن الآخر في طريقة تنظيم المكونات، وتغييرها يحل مشاكل مختلفة، ومن أهم هذه الأنماط:
- نمط الطبقات (Layered Pattern)
- نمط العميل والخادم (Client Server Pattern)
- نمط موجه بناء على الحدث (Event Driven Pattern)
- نمط النواة الدقيقة (Microkernel Pattern)
- نمط الخدمات المصغرة (Microservice Pattern)
الوحدات والواجهات Modules and Interfaces
التصميم القائم على الوحدات هو أسلوب متبع في تصميم النظام أو المنتجات البرمجية والذي يتمحور حول تجميع
المكونات الصغيرة والمستقلة وتوحيدها في منتج نهائي، فالمشاريع الكبيرة يمكن تقسيمها إلى أجزاء صغيرة وسهلة
يمكن تطويرها باستخدام نهج تصميم الوحدات، والمنتج النهائي هو ناتج جمع الأجزاء المستقلة.
أما الواجهات في تصميم النظام هي المرحلة التي يمكن للمستخدم التفاعل مع النظام من خلالها، فتتكون من واجهة
المنتج من شاشات ونماذج جمع بيانات وتقارير حول النظام، والعديد من أنواع الواجهات الأخرى التي يتم تصميمها ودمجها
مع المنتج الرئيسي.
تصميم قاعدة البيانات Database Design
نوع من أنواع تصميم النظام، ويمكن تعريف تصميم قاعدة البيانات على أنه مجموعة من المهام أو الإجراءات المتبعة لتنفيذ قاعدة البيانات، وتوجد بعض المعايير التي يجب وضعها في الحسبان عن تصميم قواعد البيانات، مثل:
- تطابق البيانات وتكامليتها
- قلة التكرار
- البحث بشكل أسرع
- اتخاذ التدابير الأمنية من خلال فرض قيود السلامة المختلفة
- تخزين البيانات مجزأة
مصطلحات تصميم قاعدة البيانات Database Design Terminologies
- التكرار (Redundancy): التكرار يشير إلى وجود إزدواجية في البيانات، ولكن يوجد بعض الحالات التي يحتاج فيها المطورون إلى التكرار، ولكن في غالب الأمر لا يحتاج المطورون إلى هذه التكرارات في قاعدة بيانات النظام، ففي حالة وجود نظام بنك، لابد من منع ظهور التكرار في البيانات.
- المخطط (Schema): المخطط عبارة عن حاوية غير واقعية تحتوي بداخلها على هيكلية البيانات التي يتم تخزينها، وطرق إدارتها، وتتكون من صفوف وأعمدة حيث يحتوي كل عمود على نوع بيانات محدد.
- الصفوف (Records): هي البيانات التي يتم تخزينها في قاعدة البيانات.
- الفهرسة (Indexing): الفهرسة هي أسلوب لهيكلة البيانات لاستعادة البيانات بطريقة أكثر كفاءة وسرعة.
- تكامل وتناسق البيانات (Data Integrity and Consistency): يشير مصطلح تكامل البيانات إلى جودة المعلومات التي يتم تخزينها في قاعدة البيانات، ويشير تطابق وتناسق البيانات إلى صحة المعلومات.
- نمذجة البيانات (Data Modeling): أسلوب نمذجة مرئي يساعد في رسم البيانات والعلاقات بين البيانات وبعضها، مثل: نموذج الشبكة، والنموذج كائني التوجه، والنموذج الهرمي.
- التبعية الوظيفية (Functional Dependency): العلاقات بين خاصيتين من خصائص جدول ما، حيث تعتمد إحداهما على الأخرى، مثل: يمكن إضافة خاصية الراتب الشهري إلى جدول الرواتب بسبب وجود خاصية الراتب السنوي.
تصميم النظام هي عملية طويلة ولابد من تنظيمها بشكل جيد للحصول على أفضل نتيجة ممكنة، كما يعد وجود متخصصين في هذه المرحلة هو أمر هام جدا بسبب تراكم الخبرات التي تساعد في تصميم منتجات برمجية عالية المستوى.