تُعد المقابلات الخاصة بتصميم النظام بمثابة حراس البوابة للأدوار الهندسية العليا في شركات التكنولوجيا الكبرى. إنهم يختبرون قدرتك على تصميم أنظمة موثوقة وقابلة للتطوير في ظل متطلبات غامضة. يغطي هذا الدليل الأطر والأنماط والأمثلة الحقيقية التي تحتاجها لإتقانها في عام 2026.
📋 Table of Contents
إطار المقابلة
تتبع كل مقابلة لتصميم النظام هيكلًا مشابهًا. استخدم إطار الـ 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)
- اختصار URL
- تويتر/التغذية الاجتماعية
- واتساب / ماسنجر
- إينستاجرام / مشاركة الصور
- يوتيوب / بث الفيديو
- أوبر/مشاركة الركوب
- Airbnb / نظام الحجز
- بحث جوجل
- محدد المعدل
- ذاكرة التخزين المؤقت الموزعة (Redis)
- نظام الإخطار
- زاحف الويب
- المقاييس / المراقبة (بروميثيوس)
- قائمة انتظار الرسائل الموزعة (كافكا)
تكافئ مقابلات تصميم النظام التواصل الواضح والتفكير المنظم والوعي بالمقايضات على الإجابات المثالية. تدرب على تصميم 2-3 أنظمة من الصفر كل أسبوع، واطرح دائمًا أسئلة توضيحية قبل رسم مربع واحد.
🔗 Share this article
✍️ Leave a Comment