بازگشت به کتابخانهکتابخانه8.1Case Study: کوتاه‌کننده لینک
طراحی سیستم نرم‌افزاریSYSTEM DESIGNاز صفر تا تسلط
v1.0.0
01مبانی و تصویر بزرگ
02Scalability و ظرفیت
03لایه داده
04Cache، Queue و جریان
05معماری نرم‌افزار
06قابلیت اطمینان و عملیات
07متد طراحی
08Case Study های واقعی
09سیستم‌های توزیع‌شده عمیق
10مهندسی تولید: داده، امنیت و کارایی
11تمرین پیشرفته و کیس‌استادی‌های مکمل
12زیر کاپوت دیتابیس و معماری داده
13وب بلادرنگ و پروتکل‌های مدرن
14سیستم‌های توزیع‌شده پیشرفته
15SaaS ،SRE ،امنیت و شبکه پیشرفته
16طراحی سیستم در عصر AI
17Case Study های تکمیلی
LESSON 8.1فصل ۸Case Study های واقعی

Case Study: کوتاه‌کننده لینک

  • ~۱۲ دقیقه
  • ۳ پرسش
  • متن را انتخاب کن تا هایلایت شود

مسئله: bit.ly بساز — لینک بلند می‌گیرد، کد کوتاه می‌دهد، و ریدایرکت می‌کند. کلاسیک‌ترین سؤال مصاحبه، چون همه اجزای پایه را لمس می‌کند.

۱-۲) نیازمندی و تخمین

  • FR: ساخت لینک کوتاه (+ دلخواه: آدرس سفارشی، انقضا)، ریدایرکت، آمار کلیک.
  • NFR: ریدایرکت زیر 50ms و ۹۹.۹۹٪ در دسترس — مسیر خواندن مقدس است.
  • فرض: 100M لینک جدید در ماه (~40/s)، خواندن 100:1 → ~4K QPS ریدایرکت، پیک 10x.
  • ذخیره: هر رکورد ~500B × 100M × 12 ماه × ۵ سال ≈ 3TB — کوچک! مسئله storage نیست، تأخیر است.

۳) طراحی — تولید کد کوتاه

دو راه اصلی: (الف) hash لینک (MD5 و برداشتن ۷ کاراکتر) — خطر برخورد و نیاز به بررسی؛ (ب) شمارنده سراسری + تبدیل Base62 — بدون برخورد، ولی شمارنده باید توزیع‌شده باشد. راه پخته: هر سرور یک «بازه شماره» (مثلاً ۱۰هزارتایی) از یک سرویس ticket می‌گیرد و آفلاین خرج می‌کند — نه برخورد، نه گلوگاه. ۷ کاراکتر Base62 = 62⁷ ≈ 3.5 تریلیون کد؛ تا ابد کافی.

DIAGRAMمسیر خواندن — ۹۹٪ ترافیک
Client
LB
Redirect svc
Cache — Redis
DB — KV در Miss

۴) عمق و گلوگاه

  • دیتابیس: Key-Value (کد → URL) کافی است؛ Shard با hash کد.
  • کش: لینک‌های داغ (قانون پارتو) در Redis؛ hit rate ۹۰٪+ طبیعی است.
  • ریدایرکت: 302 (موقت) اگر آمار می‌خواهی — 301 را مرورگر کش می‌کند و دیگر کلیک‌ها را نمی‌بینی.
  • آمار کلیک: در مسیر ریدایرکت فقط یک رویداد به Kafka بینداز؛ تجمیع async — مسیر داغ را سنگین نکن.

به زبان ساده

لینک کوتاه یعنی یک کلید کوتاه به یک آدرس بلند؛ مسیر خواندن (ریدایرکت) ۹۹٪ ترافیک است و باید کوتاه، کش‌شده و بی‌وابستگی بماند.

مثال واقعی

۷ حرف Base62 فضای ۳.۵ تریلیون کد می‌دهد؛ هر سرور یک «بازه شماره» از سرویس شمارنده می‌گیرد تا نه برخوردی باشد نه گلوگاه مرکزی.

دانش‌سنجی

آزمون درس

۳ Q
01
چرا 302 به‌جای 301 برای ریدایرکت آماردار؟
02
مزیت «بازه شماره + Base62» بر «hash»؟
03
ثبت آمار کلیک کجا انجام شود؟