أساسيات تصميم الأنظمة

التصميم للتوسع والموثوقية

4 دقيقة للقراءة

التوسع والموثوقية هما ما يفصل المشاريع التجريبية عن أنظمة الإنتاج. يتوقع المقابلون أن تناقش هذه المواضيع بشكل طبيعي، خاصة في المستويات L4+.

التوسع الأفقي مقابل العمودي

النهج كيف المزايا العيوب
العمودي (ترقية) آلة أكبر (CPU أكثر، RAM أكثر) بسيط، لا تغييرات في الكود حدود العتاد، نقطة فشل واحدة
الأفقي (توسعة) آلات أكثر لا حدود للعتاد، تحمل الأخطاء تعقيد الكود، اتساق البيانات

قاعدة عامة: ابدأ عموديًا للبساطة، انتقل أفقيًا عند الوصول للحدود. في المقابلات، صمم دائمًا للتوسع الأفقي.

استراتيجيات تجزئة قاعدة البيانات

الاستراتيجية كيف تعمل الأفضل لـ
قائمة على النطاق التقسيم بنطاق القيم (A-M, N-Z) بيانات السلسلة الزمنية، الوصول التسلسلي
قائمة على التجزئة hash(key) % عدد_الأقسام التوزيع المتساوي
التجزئة المتسقة حلقة افتراضية، تقليل إعادة التوزيع التوسع الديناميكي
جغرافية التقسيم حسب المنطقة التطبيقات العالمية

التعمق في التجزئة المتسقة:

التجزئة التقليدية (hash % N) تنكسر عند إضافة/إزالة خوادم -- تقريبًا كل المفاتيح تُعاد تعيينها. التجزئة المتسقة تستخدم حلقة افتراضية حيث يُعاد توزيع K/N فقط من المفاتيح (K = إجمالي المفاتيح، N = الخوادم).

الحلقة الافتراضية:
  الخادم A ──── الخادم B
  │                    │
  │   المفاتيح تُربط   │
  │   لأقرب خادم       │
  │   باتجاه الساعة    │
  الخادم D ──── الخادم C

البنية القائمة على الأحداث

بدلاً من الطلب-استجابة المتزامن، استخدم الأحداث للربط المرن:

إجراء المستخدم → منتج الأحداث → ناقل الأحداث (Kafka) → مستهلكو الأحداث
                                                        ├── خدمة التحليلات
                                                        ├── خدمة الإشعارات
                                                        └── مفهرس البحث

الفوائد: الخدمات مستقلة، يمكن توسيعها منفصلة، أسهل لإضافة مستهلكين جدد.

أنماط الموثوقية

قاطع الدائرة (Circuit Breaker)

يمنع الفشل المتسلسل عندما تكون خدمة المصب غير سليمة:

الحالة السلوك
مغلق تشغيل عادي، الطلبات تمر
مفتوح الخدمة مكتشفة كمعطلة، الطلبات تفشل فورًا
نصف مفتوح السماح بطلبات محدودة لاختبار التعافي

فحوصات الصحة

النوع ما يفحصه التكرار
الحيوية هل العملية تعمل؟ كل 10 ثوانٍ
الجاهزية هل يمكنها التعامل مع الطلبات؟ كل 5 ثوانٍ
العميق هل التبعيات سليمة؟ كل 30 ثانية

إعادة المحاولة مع التراجع الأسّي

المحاولة 1: انتظر 1 ثانية
المحاولة 2: انتظر 2 ثانية
المحاولة 3: انتظر 4 ثوانٍ
المحاولة 4: انتظر 8 ثوانٍ (+ ارتعاش عشوائي)
استسلم بعد أقصى محاولات → طابور الرسائل الميتة

SLOs و SLIs و SLAs

المصطلح التعريف مثال
SLI (مؤشر مستوى الخدمة) المقياس الذي تقيسه 99.2% من الطلبات تكتمل في أقل من 200ms
SLO (هدف مستوى الخدمة) الهدف الذي تسعى إليه توفر 99.9% شهريًا
SLA (اتفاقية مستوى الخدمة) عقد مع العملاء وقت تشغيل 99.95% أو إصدار رصيد

التسعات:

التوفر التعطل/سنة التعطل/شهر
99% 3.65 يوم 7.3 ساعة
99.9% 8.76 ساعة 43.8 دقيقة
99.99% 52.6 دقيقة 4.38 دقيقة
99.999% 5.26 دقيقة 26.3 ثانية

CQRS (فصل مسؤولية الأوامر والاستعلامات)

فصل نماذج القراءة والكتابة عندما تكون لها متطلبات مختلفة:

مسار الكتابة: API → معالج الأوامر → DB الكتابة (PostgreSQL)
                                         ↓ (حدث)
مسار القراءة: API → معالج الاستعلامات → DB القراءة (Elasticsearch/Redis)

متى تستخدم: أنماط القراءة والكتابة مختلفة جدًا (مثلاً: وسائل التواصل: كتابات قليلة، قراءات كثيرة باستعلامات معقدة).

نصيحة للمقابلات: عند مناقشة أي تصميم، اذكر دائمًا: "ماذا يحدث عندما يفشل هذا المكوّن؟" هذا يُظهر أنك تفكر في الموثوقية بشكل استباقي.


مع تغطية تصميم الأنظمة، لننتقل إلى إتقان جولة البرمجة -- المهارات العملية للأداء تحت الضغط. :::

اختبار

اختبار الوحدة 4: أساسيات تصميم الأنظمة

خذ الاختبار