تخطَّ إلى المحتوى
SDSystem Design
وظفني
كل المراحل
Phase 05 / 05 · Final

Case Studies

دلوقتي بنطبّق كل اللي اتعلمناه. 6 أنظمة حقيقية، نصممها من الصفر.

0%
Methodology

كل case study هنمشي فيه على نفس الخطوات: ده الـ framework اللي بيتسأل في الـ system design interviews:

  1. 1. Requirements: ايه الـ functional و الـ non-functional
  2. 2. Estimations: حسابات القدرة (users, RPS, storage)
  3. 3. API Design: الـ endpoints الأساسية
  4. 4. Data Model: الـ schema
  5. 5. High-Level Architecture: الـ components
  6. 6. Deep Dive: التحديات الخاصة بالنظام
Case Study 01

URL Shortener

زي bit.ly و TinyURL

Requirements

Functional

  • • تحويل URL طويل لـ URL قصير
  • • الـ short URL يـ redirect للـ long URL
  • • Custom aliases (اختياري)
  • • تواريخ انتهاء الصلاحية
  • • Analytics على عدد الـ clicks

Non-Functional

  • • High availability: مش يقع
  • • Low latency: أسرع من 100ms
  • • Scalability: مليارات URLs
  • • الـ short URLs مش قابلة للتنبؤ

Estimations

حسابات القدرة
  • Reads vs Writes: 100:1 (الناس بتفتح أكتر مما بتنشئ)
  • New URLs/sec: 200 (~17M/يوم)
  • Reads/sec: 20,000
  • Storage (5 سنوات): ~30TB
  • Cache size: 20% من الـ daily reads = ~170GB/يوم

API Design

POST /api/shorten
{ "url": "https://very-long-url.com/...", "alias": "optional" }
GET /:shortCode
Returns: 301 Redirect to long URL
DELETE /api/url/:shortCode

Data Model

جدول URLs
urls (
  short_code  VARCHAR(7) PRIMARY KEY,
  long_url    TEXT,
  user_id     BIGINT,
  created_at  TIMESTAMP,
  expires_at  TIMESTAMP,
  click_count BIGINT
)

-- Index on user_id for user dashboards

High-Level Architecture

User → CDN → Load Balancer → API Servers
                              ↓
                    ┌─────────┴─────────┐
                    │                   │
              Redis Cache         Database (sharded)
              (hot URLs)          PostgreSQL

Deep Dive: توليد الـ Short Code

دي المشكلة الجوهرية. ازاي نولّد short code فريد بسرعة؟

❌ Hash-based (MD5/SHA)

سهل، بس فيه collisions، و الـ short code طويل.

⚠ Auto-increment + Base62

نـ encode الـ ID بـ base62 (a-zA-Z0-9). بس قابل للتنبؤ.

✓ Counter Service (مع Zookeeper)

Counter مركزي يدّي ranges للسيرفرات. كل سيرفر ياخد range (مثلاً 1000-2000) و يستخدمها بدون التواصل التاني.

الحل العملي: Counter Service + Base62 encoding. 7 characters تكفي لـ 3.5 trillion URLs.

أسئلة انترفيو على القسم ده

3
القسم 1 / 6