طراحی سیستم (System Design) چیه و چرا به درد همهی برنامهنویسها میخوره؟
2026-10-20
یه برنامهی کوچیک رو میشه تو یه فایل نوشت. ولی وقتی محصول بزرگ میشه، چند نفر روش کار میکنن و هزارها نفر ازش استفاده میکنن، سؤالهای جدیدی پیش میاد:
- کدها چطور تقسیم بشن که قاطی نشن؟
- اگه کاربرها ده برابر شدن چی؟
- اگه یه بخش خراب شد، همهچی از کار میفته؟
جواب این سؤالها طراحی سیستم و معماری نرمافزاره.
طراحی سیستم یعنی چی؟
یعنی فکر کردن به ساختار کلی یه نرمافزار: چه بخشهایی داره، هر بخش چه مسئولیتی داره، چطور با هم حرف میزنن و اطلاعات کجا ذخیره میشه.
مثل نقشهی یه ساختمونه. قبل از اینکه آجر بچینی، باید بدونی چند طبقه میخوای، لولهکشی کجاست و ستونها کجا میان. اگه نقشه نداشته باشی، وسط کار مجبوری دیوارها رو خراب کنی.
بخشهای رایج یه سیستم
- کلاینت: چیزی که کاربر باهاش کار میکنه (وب، موبایل)
- سرور/بکاند: منطق برنامه
- دیتابیس: ذخیرهی اطلاعات
- کَش (Cache): نگهداشتن جوابهای پرتکرار تو حافظهی سریع
- صف (Queue): کارهایی که لازم نیست همون لحظه انجام بشن (مثل ارسال ایمیل)
- Load Balancer: تقسیم درخواستها بین چند سرور
- API: راه ارتباط بین بخشها
مفهومهای کلیدی
مقیاسپذیری (Scalability)
یعنی سیستم وقتی کاربرها زیاد میشن، همچنان خوب کار کنه. دو راه کلی:
- عمودی: سرور قویتر بخر.
- افقی: تعداد سرورها رو زیاد کن.
دسترسپذیری (Availability)
سیستم چقدر وقتها در دسترسه؟ اگه یه سرور بخوابه، بقیه کار رو ادامه میدن؟
تأخیر (Latency)
چقدر طول میکشه تا یه درخواست جواب بگیره؟
سازگاری (Consistency)
اگه اطلاعات تو چند جا ذخیره شده، همهجا یکسان هستن؟
بدهبستان (Trade-off)
مهمترین مفهوم تو طراحی سیستم همینه: هیچ انتخابی بیهزینه نیست. هر تصمیم یه چیزی بهت میده و یه چیزی ازت میگیره. مثلاً کَش سرعت رو بالا میبره ولی ممکنه اطلاعات کهنه نشون بده. تو طراحی سیستم کار تو اینه که بدهبستان رو ببینی و آگاهانه انتخاب کنی.
یه مثال ساده: کوتاهکنندهی لینک
فرض کن میخوای سرویسی مثل کوتاهکردن لینک بسازی. یه راه سادهی فکر کردن:
- نیازها رو روشن کن: لینک بلند رو بگیر، کوتاه بده؛ کوتاه رو بگیر، به بلند هدایت کن. چند کاربر؟ چقدر سریع؟
- طرح ساده: یه سرور + یه دیتابیس که جفت (کوتاه، بلند) رو نگه میداره.
- سؤالها: اگه خیلی خونده بشه؟ ← کَش. اگه دو نفر یه کد کوتاه رو بخوان؟ ← قوانین یکتایی. اگه یه سرور بخوابه؟ ← چند سرور.
- تصمیم و دلیل: هر انتخاب رو با دلیلش بگو.
تو مصاحبه چطور جواب بدم؟
سؤال طراحی سیستم معمولاً باز و مبهمه: «یه سیستم چت بساز.» چندتا قدم کمک میکنه:
- سؤال بپرس و نیازها رو روشن کن. (چند کاربر؟ چه قابلیتهایی؟)
- یه طرح ساده بکش و بعد پیچیدهش کن.
- قسمتهای اصلی رو نام ببر.
- جاهایی که ممکنه مشکل بشه رو شناسایی کن.
- بدهبستانها رو توضیح بده.
- بلند فکر کن.
چطور یاد بگیرم؟
- اول پایه: برنامهنویسی، دیتابیس، شبکه (HTTP، API)
- مفهومها رو با مثال یاد بگیر، نه حفظی
- سیستمهای واقعی رو تحلیل کن: «فلان سرویس چطور ممکنه ساخته شده باشه؟»
- خودت چندتا سیستم کوچیک طراحی کن و اشکالاتش رو پیدا کن
جمعبندی
- طراحی سیستم = فکر کردن به ساختار و ارتباط بخشها
- مفهومهای اصلی: مقیاسپذیری، دسترسپذیری، تأخیر، سازگاری
- مهمترین مهارت: دیدن بدهبستانها و دلیل آوردن
اگه میخوای این مهارت رو با مثال و تمرین یاد بگیری، مسیر «از طراحی سیستم تا معماری نرمافزار» رو ببین. بزن بریم!
- طراحی سیستم
- System Design
- معماری نرمافزار
- مقیاسپذیری
- مصاحبه طراحی سیستم