HLD (التصميم العالي المستوى لsoftware)

هو التصميم الذي يعطيك نظرة عامة عن كيفية توزيع الخدمات (Services)، قواعد البيانات (Databases)، وصفوف الرسائل (Message Queues)، بالإضافة إلى اختيار أنواع التقنيات (Technologies) وكيفية تناغمها مع بعضها البعض.

وتُختار هذه العناصر لتنفيذ الخصائص الوظيفية (Functional Requirements)، لكن الهدف الحقيقي من هذا التصميم هو تحقيق مجموعة من المتطلبات غير الوظيفية (Non-Functional Requirements)، وذلك على عكس الـ LLD الذي يتطرق بالتفصيل إلى شكل البيانات الموجودة في قواعد البيانات وآلية تبادل المعلومات (Interactions).

الأدوات الأساسية المستعملة في HLD

  1. Load balancers
  2. Databases
  3. CDN
  4. Servers
  5. Caching

مثال للبدأ

للنفرض أنك تريد تصميم تطبيق لنشر الصور مثل Instagram.

مهمتك كمهندس هي دمج وتركيب الأدوات التقنية المذكورة سابقاً لحل مشكلة برمجية محددة من قِبل العميل، أو تكتشفها بنفسك بحسب مستوى خبرتك وأقدميتك:

إذا كنت مهندسا مبتدئاً (Junior Engineer): فتقتصر مهمتك بالدرجة الأولى على تنفيذ الخاصية (Feature Implementation) وإخضاعها للاختبارات (Testing)، وفقاً للتوجيهات الواردة من المهندسين الأكثر خبرة، مع استيعاب طرق تفكيرهم.

أما إذا كنت مهندساً متوسطاً إلى خبير (Mid - Senior Engineer): فغالبية مهمتك تبدأ من إيجاد حلول معمارية لأنظمة قائمة تعاني من خلل أو قصور في إحدى متطلباتها غير الوظيفية (Non-Functional Requirements)، حيث تعمل على تحسين تصميم النظام عن طريق إعادة هيكلته أو تغيير الأدوات المستعملة بحسب نوع الخلل.

أما في المستويات الأعلى من ذلك (Staff / Lead Architect): فأنت مُخول لتصميم النظام بأكمله من الصفر، خاصية تلو الأخرى.

ما هي المشاكل التي قد يواجهها نظام مشاركة صور و لماذا التصميم عالي المستوى مطلوب لحلها

لنفرض أنك بنيت التطبيق و استأجرت خادم (server) بسعر 10$ في الشهر

يوجد 0 عناصر تحت هذا المجلد.