System Design یا سیستم دیزاین فرایند تبدیل نیازمندیهای یک محصول به طراحی قابل پیادهسازی برای اجزا، دیتابیس، API، ارتباطات و زیرساخت است. سیستم دیزاین فقط انتخاب میکروسرویس و کش نیست. ابتدا باید معلوم باشد سیستم چه کاری انجام میدهد، چه تعداد کاربر دارد، چه خطاهایی قابل تحمل است و چه محدودیتهایی از نظر هزینه و زمان وجود دارد.
گامهای طراحی یک سیستم
| مرحله | پرسش کلیدی | نمونه خروجی |
|---|---|---|
| ۱. نیازمندی فانکشنال | کاربر دقیقاً چه کارهایی میتواند انجام دهد؟ | ثبت و پیگیری سفارش |
| ۲. نیازمندی نانفانکشنال | چقدر سریع و پایدار باشد؟ | تاخیر پاسخ و دسترسپذیری هدف |
| ۳. برآورد ظرفیت | چند درخواست و چه حجم دادهای؟ | RPS، حجم ذخیرهسازی، ترافیک |
| ۴. مدل داده و API | چه موجودیتها و قراردادهایی لازماند؟ | Orders، Payments و Endpointها |
| ۵. انتخاب معماری | مرز ماژولها و مسیر درخواست چیست؟ | ماژولار مونولیت یا سرویس مستقل |
| ۶. تست شکست و رشد | وقتی دیتابیس یا شبکه از دسترس خارج شد؟ | Timeout، Retry، Queue و Backup |
| ۷. ارزیابی و مستندسازی | چه تصمیمهایی را چرا گرفتیم؟ | Architecture Decision Record |
مثال طراحی بخش ثبت سفارش
Client -> API / Checkout
-> Orders module -> Database
-> Outbox table -> Message Broker -> Inventory worker
-> Notification worker
Metrics / Logs / Traces observe the complete flow
در سیستم فروشگاهی، ایجاد سفارش و ثبت رویداد میتواند داخل یک تراکنش دیتابیس انجام شود. سپس Worker رویداد را از Outbox منتشر میکند تا فرایندهای غیرفوری جدا از مسیر HTTP پردازش شوند. بسته به مقیاس، بسیاری از این اجزا حتی میتوانند در یک مونولیت ماژولار قرار بگیرند.
ظرفیت تقریبی چگونه حساب میشود؟
daily_requests = 1_200_000
average_rps = daily_requests / 86400
peak_factor = 8
peak_rps = average_rps * peak_factor
print(round(average_rps, 1), round(peak_rps)) # 13.9 111
این اعداد فرضیاند و ضریب پیک باید از داده واقعی به دست آید. علاوه بر RPS، الگوی خواندن و نوشتن، اندازه payload، نرخ خطا، هزینه و اندازه داده در برآورد مهماند.
اشتباه رایج
در مصاحبه یا پروژه واقعی، فهرست کردن Redis، Kafka و Kubernetes بدون نیازمندی، طراحی سیستم محسوب نمیشود. هر ابزار باید دلیل مشخصی در معماری داشته باشد.
اصطلاحات فنی: معماری نرمافزار، دیتا اینتنسیو، نیازمندی فانکشنال، نیازمندی نانفانکشنال، شاردینگ، کشینگ.