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

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

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: أساسيات تصميم الأنظمة

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.