🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

دليل مقابلة تصميم النظام 2026: الأطر والأنماط ودراسات الحالة

⏱️3 min read  ·  503 words

تُعد المقابلات الخاصة بتصميم النظام بمثابة حراس البوابة للأدوار الهندسية العليا في شركات التكنولوجيا الكبرى. إنهم يختبرون قدرتك على تصميم أنظمة موثوقة وقابلة للتطوير في ظل متطلبات غامضة. يغطي هذا الدليل الأطر والأنماط والأمثلة الحقيقية التي تحتاجها لإتقانها في عام 2026.

إطار المقابلة

تتبع كل مقابلة لتصميم النظام هيكلًا مشابهًا. استخدم إطار الـ 45 دقيقة هذا:

  • 1-5 دقائق– توضيح المتطلبات وتحديد النطاق
  • 5-10 دقائق— مقياس التقدير (المستخدمون، QPS، التخزين)
  • 10-20 دقيقة— تصميم عالي المستوى، المكونات الأساسية
  • 20-35 دقيقة– الغوص العميق في المكونات الهامة
  • 35-45 دقيقة– النطاق والاختناقات والمقايضات

الخطوة 1: توضيح المتطلبات

لا تبدأ أبدًا بالتصميم قبل طرح هذه الأسئلة:

  • من هم المستخدمين؟ ماذا عليهم أن يفعلوا؟
  • ما هي الميزات الأساسية مقابل الميزات اللطيفة؟
  • كم عدد المستخدمين؟ قراءة ثقيلة أم كتابة ثقيلة؟
  • ما هو الكمون المطلوب؟ ما هو شرط الاتساق؟
  • ما هو حجم البيانات المتوقع؟ ما هي مدة الاحتفاظ بالبيانات؟

الخطوة 2: تقدير السعة

الرياضيات التقريبية التي تشير إلى النضج الهندسي:

Example: Design Twitter-like feed

Users: 500M total, 100M daily active (DAU)
Tweets: 100M DAU × 5 tweets/day = 500M tweets/day
Reads: 100M DAU × 100 timeline views/day = 10B reads/day

QPS (writes): 500M / 86400 ≈ 5,800 tweets/sec (peak 3x = 17,000)
QPS (reads): 10B / 86400 ≈ 115,000 reads/sec (peak 3x = 345,000)

Storage (tweets):
- 500M tweets/day × 280 bytes = 140 GB/day
- 5 years = 140 × 365 × 5 ≈ 255 TB of tweet data

Media storage: 10% of tweets have images (100MB avg)
50M tweets/day × 100KB thumbnail = 5 TB/day thumbnail storage

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

1. اختيار قاعدة البيانات

اختر قاعدة البيانات المناسبة للوظيفة:

  • العلائقية (PostgreSQL، MySQL)– معاملات ACID والاستعلامات المعقدة والبيانات المالية
  • المستند (MongoDB)– مخطط مرن، بيانات متداخلة، إدارة المحتوى
  • قيمة المفتاح (Redis، DynamoDB)— التخزين المؤقت، تخزين الجلسة، عمليات البحث O(1).
  • عمود عريض (كاساندرا، HBase)– سلاسل زمنية، كثيفة الكتابة على نطاق واسع
  • الرسم البياني (Neo4j)— الرسوم البيانية الاجتماعية، ومحركات التوصية
  • البحث (البحث المرن)— البحث عن النص الكامل، وتحليلات السجل

2. استراتيجية التخزين المؤقت

Cache-Aside (Lazy Loading):
  App → cache miss → DB → write to cache → return

Write-Through:
  App → write to cache AND DB simultaneously

Write-Back (Write-Behind):
  App → write to cache → async write to DB (faster, risk data loss)

Read-Through:
  Cache handles DB fetching automatically (used by Redis+Memcached)

Cache Eviction Policies:
  LRU  — Least Recently Used (most common)
  LFU  — Least Frequently Used
  TTL  — Time-To-Live expiry

3. موازنة التحميل

توزيع حركة المرور عبر الخوادم:

  • جولة روبن– التوزيع المتساوي، بسيط
  • اتصالات أقل– الطريق إلى الخادم مع أقل عدد من الاتصالات النشطة
  • تجزئة IP– الجلسات اللزجة بناءً على عنوان IP الخاص بالعميل
  • موزون– التوزيع على أساس سعة الخادم

الأدوات: AWS ALB، Nginx، HAProxy، Envoy، Cloudflare

4. تحجيم قاعدة البيانات

Vertical Scaling: Bigger machine (CPU, RAM, SSD)
  Pros: Simple, no code changes
  Cons: Limits, single point of failure, expensive

Read Replicas: Primary handles writes, replicas handle reads
  Pros: Read scalability, disaster recovery
  Cons: Replication lag (eventual consistency)

Sharding (Horizontal Partitioning):
  Split data across multiple DBs by key

  Hash-based: shard = hash(user_id) % num_shards
    Pros: Even distribution
    Cons: Hard to add shards (resharding)

  Range-based: shard by date range or ID range
    Pros: Range queries efficient, easy to add new shards
    Cons: Hot spots (most recent shard gets all writes)

  Directory-based: lookup table maps keys to shards
    Pros: Flexible
    Cons: Lookup overhead, single point of failure

دراسة الحالة: تصميم URL Shortener (bit.ly)

متطلبات

الوظيفية: تقصير عنوان URL، وإعادة التوجيه عند الزيارة، والأسماء المستعارة المخصصة، وانتهاء الصلاحية
غير وظيفي: زمن استجابة للقراءة 100 مللي ثانية، 100 مليون عنوان URL/اليوم للكتابة، 10 مليار قراءة/اليوم

تقدير النطاق

الكتابة: 100 مليون/يوم = 1200 QPS (الذروة 3600)
القراءة: 10B/day = 115,000 QPS (الذروة 345,000) —قراءة ثقيلة 100:1
التخزين: 100 ميجا × 500 بايت = 50 جيجابايت/يوم × 5 سنوات = ~90 تيرابايت

تصميم رفيع المستوى

Client → Load Balancer → Web Servers → Cache (Redis)
                                          ↓ cache miss
                                       Database (PostgreSQL + replicas)

URL Shortening API:
  POST /api/shorten
  { "url": "https://very-long-url.com/path", "alias": "mylink", "expires_at": "2027-01-01" }
  → { "short_url": "https://bit.ly/abc123" }

Redirect API:
  GET /{short_code}
  → 301/302 redirect to original URL

Key Generation:
  Option 1: Base62 hash of MD5(url) — take first 7 chars
  Option 2: Counter + Base62 encode (guaranteed unique)
  Option 3: Pre-generate keys in KGS (Key Generation Service)

مخطط قاعدة البيانات

CREATE TABLE urls (
  id           BIGSERIAL PRIMARY KEY,
  short_code   VARCHAR(10) UNIQUE NOT NULL,
  original_url TEXT NOT NULL,
  user_id      BIGINT,
  created_at   TIMESTAMP DEFAULT NOW(),
  expires_at   TIMESTAMP,
  click_count  BIGINT DEFAULT 0
);

CREATE INDEX idx_short_code ON urls(short_code);
CREATE INDEX idx_user_id ON urls(user_id);

دراسة حالة: تصميم نظام دردشة (واتساب)

التحديات الرئيسية

  • التسليم في الوقت الحقيقي– WebSockets للاتصالات المستمرة
  • ترتيب الرسائل– أرقام تسلسلية لكل محادثة
  • التسليم دون اتصال— تخزين الرسائل حتى يقوم المستخدم بإعادة الاتصال
  • قراءة الإيصالات— حالة التسليم/القراءة
  • دردشة جماعية– التوزيع لعدة مستخدمين

Architecture:

Client ←→ WebSocket Gateway (stateful) ←→ Message Service
                                              ↓
                                    Message Queue (Kafka)
                                              ↓
                                    Message Store (Cassandra)
                                    - Partitioned by conversation_id
                                    - Ordered by timestamp within partition

Message Flow:
1. User A sends message → WebSocket Gateway (Server A)
2. Gateway publishes to Kafka topic
3. Message Service writes to Cassandra
4. User B's WebSocket Gateway subscribes and delivers
5. If User B offline → push notification via FCM/APNs

Schema (Cassandra - wide column):
  messages_by_conversation
    conversation_id (partition key)
    message_id (clustering key, time-ordered)
    sender_id, content, message_type, created_at

المقايضات الرئيسية التي يجب معرفتها

  • SQL مقابل NoSQL— ACID مقابل المقياس، المخطط مقابل المرونة
  • الاتساق مقابل التوفر– نظرية CAP (تفضل AP للتواصل الاجتماعي، وCP للخدمات المصرفية)
  • سحب مقابل دفع— التشعب عند القراءة مقابل التشعب عند الكتابة للخلاصات
  • مونوليث مقابل الخدمات المصغرة– البساطة مقابل قابلية التوسع/استقلالية الفريق
  • متزامن مقابل غير متزامن– الكمون مقابل الإنتاجية/المرونة
  • قوي مقابل الاتساق في نهاية المطاف– الصحة مقابل التوفر

موضوعات تصميم النظام المشترك (2026)

  1. اختصار URL
  2. تويتر/التغذية الاجتماعية
  3. واتساب / ماسنجر
  4. إينستاجرام / مشاركة الصور
  5. يوتيوب / بث الفيديو
  6. أوبر/مشاركة الركوب
  7. Airbnb / نظام الحجز
  8. بحث جوجل
  9. محدد المعدل
  10. ذاكرة التخزين المؤقت الموزعة (Redis)
  11. نظام الإخطار
  12. زاحف الويب
  13. المقاييس / المراقبة (بروميثيوس)
  14. قائمة انتظار الرسائل الموزعة (كافكا)

تكافئ مقابلات تصميم النظام التواصل الواضح والتفكير المنظم والوعي بالمقايضات على الإجابات المثالية. تدرب على تصميم 2-3 أنظمة من الصفر كل أسبوع، واطرح دائمًا أسئلة توضيحية قبل رسم مربع واحد.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা