طراحی URL Shortener

مطالعه موردی کامل: طراحی کوتاه‌کننده URL (مثل bit.ly) — از نیازمندی‌ها تا معماری نهایی با همه اجزا

کلاسیک‌ترین مصاحبه

«یک URL Shortener مثل bit.ly طراحی کنید» — کوچک به‌نظر می‌رسد اما همه مفاهیم دوره را لمس می‌کند!

مرحله ۱: نیازمندی‌ها

مرحله ۲: تخمین ظرفیت

نوشتن: 100M/ماه ≈ 40 QPS
خواندن: 10B/ماه ≈ 4,000 QPS (پیک ~۱۲K!)

ذخیره: 100M × 500 بایت = 50GB/ماه = 0.6TB/سال
۵ سال با ۳× replication ≈ 10TB — قابل مدیریت!

مرحله ۳: طراحی API و مدل

POST /shorten (long_url) → {short_url}
GET /{code} → 301/302 Redirect

جدول: (short_code, long_url, created_at, expiry)

مرحله ۴: قلب طراحی — تولید کد کوتاه

کد ۷ کاراکتری Base62 (a-z, A-Z, 0-9): 62⁷ ≈ ۳.۵ تریلیون ترکیب — کافی!

روشایدهمشکل
هش (MD5 اول ۷)hash(url)تصادم! + قابل حدس
تصادفیrandom ۷ کاراکترچک تصادم لازم
شمارنده + Base62 ✓ID=125 → "cb"نیاز به ID توزیع‌شده!

انتخاب: Snowflake ID (مبحث ۲۷!) + Base62 = یکتا، مرتب، بدون هماهنگی!

مرحله ۵: معماری کامل

کاربر → CDN/LB → سرویس Shorten
                      ↓
                 ID Generator (Snowflake)
                      ↓
                 DB (شارد بر ID) + کش

کاربر → LB → سرویس Redirect
                ↓
             کش Redis (code→url) ← ۹۵٪ hit!
                ↓ miss
             DB Replica → 302 Redirect

نکات عمیق‌تر (برای امتیاز!)

این یک مسئله، LB، کش، شاردینگ، Snowflake، Base62 و Cache-Aside را با هم نشان می‌دهد — در مصاحبه، هر جزء را با «چرا» بگویید!

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.

ابزارهای مرتبط