طراحی سیستم (System Design) چیه و چرا به درد همه‌ی برنامه‌نویس‌ها می‌خوره؟

2026-10-20

یه برنامه‌ی کوچیک رو می‌شه تو یه فایل نوشت. ولی وقتی محصول بزرگ می‌شه، چند نفر روش کار می‌کنن و هزارها نفر ازش استفاده می‌کنن، سؤال‌های جدیدی پیش میاد:

جواب این سؤال‌ها طراحی سیستم و معماری نرم‌افزاره.

طراحی سیستم یعنی چی؟

یعنی فکر کردن به ساختار کلی یه نرم‌افزار: چه بخش‌هایی داره، هر بخش چه مسئولیتی داره، چطور با هم حرف می‌زنن و اطلاعات کجا ذخیره می‌شه.

مثل نقشه‌ی یه ساختمونه. قبل از اینکه آجر بچینی، باید بدونی چند طبقه می‌خوای، لوله‌کشی کجاست و ستون‌ها کجا میان. اگه نقشه نداشته باشی، وسط کار مجبوری دیوارها رو خراب کنی.

بخش‌های رایج یه سیستم

مفهوم‌های کلیدی

مقیاس‌پذیری (Scalability)

یعنی سیستم وقتی کاربرها زیاد می‌شن، همچنان خوب کار کنه. دو راه کلی:

دسترس‌پذیری (Availability)

سیستم چقدر وقت‌ها در دسترسه؟ اگه یه سرور بخوابه، بقیه کار رو ادامه می‌دن؟

تأخیر (Latency)

چقدر طول می‌کشه تا یه درخواست جواب بگیره؟

سازگاری (Consistency)

اگه اطلاعات تو چند جا ذخیره شده، همه‌جا یکسان هستن؟

بده‌بستان (Trade-off)

مهم‌ترین مفهوم تو طراحی سیستم همینه: هیچ انتخابی بی‌هزینه نیست. هر تصمیم یه چیزی بهت می‌ده و یه چیزی ازت می‌گیره. مثلاً کَش سرعت رو بالا می‌بره ولی ممکنه اطلاعات کهنه نشون بده. تو طراحی سیستم کار تو اینه که بده‌بستان رو ببینی و آگاهانه انتخاب کنی.

یه مثال ساده: کوتاه‌کننده‌ی لینک

فرض کن می‌خوای سرویسی مثل کوتاه‌کردن لینک بسازی. یه راه ساده‌ی فکر کردن:

  1. نیازها رو روشن کن: لینک بلند رو بگیر، کوتاه بده؛ کوتاه رو بگیر، به بلند هدایت کن. چند کاربر؟ چقدر سریع؟
  2. طرح ساده: یه سرور + یه دیتابیس که جفت (کوتاه، بلند) رو نگه می‌داره.
  3. سؤال‌ها: اگه خیلی خونده بشه؟ ← کَش. اگه دو نفر یه کد کوتاه رو بخوان؟ ← قوانین یکتایی. اگه یه سرور بخوابه؟ ← چند سرور.
  4. تصمیم و دلیل: هر انتخاب رو با دلیلش بگو.

تو مصاحبه چطور جواب بدم؟

سؤال طراحی سیستم معمولاً باز و مبهمه: «یه سیستم چت بساز.» چندتا قدم کمک می‌کنه:

  1. سؤال بپرس و نیازها رو روشن کن. (چند کاربر؟ چه قابلیت‌هایی؟)
  2. یه طرح ساده بکش و بعد پیچیده‌ش کن.
  3. قسمت‌های اصلی رو نام ببر.
  4. جاهایی که ممکنه مشکل بشه رو شناسایی کن.
  5. بده‌بستان‌ها رو توضیح بده.
  6. بلند فکر کن.

چطور یاد بگیرم؟

جمع‌بندی

اگه می‌خوای این مهارت رو با مثال و تمرین یاد بگیری، مسیر «از طراحی سیستم تا معماری نرم‌افزار» رو ببین. بزن بریم!