قبل از اینکه یه خط کد بزنی، ظرفیت و هزینه رو تخمین میزنی
هر جلسه یه سیستم واقعی رو زنده طراحی میکنیم
روی چراییِ هر تصمیم کار میکنیم، نه حفظ کردن الگوها
برای مصاحبههای System Design آماده میشی
بیشتر ما بلدیم یه قابلیت رو پیاده کنیم. چیزی که مسیر شغلی رو عوض میکنه، جواب دادن به این سؤاله: کاربرها که صد برابر شدن، این سیستم از کجا میشکنه؟
تو این دوره سیستمهای واقعی رو از صفر با هم طراحی میکنیم، سر هر تصمیم معماری وایمیسیم و میبینیم چرا اینو انتخاب کردیم نه اون یکی. هم برای سر کار به دردت میخوره، هم پشت میز مصاحبه.
چه چیزی یاد میگیریم
- ۱
زبان مشترک طراحی سیستم
- مقیاس عمودی و افقی، و اینکه هر کدوم کجا کم میارن
- تأخیر، توان عملیاتی و دسترسپذیری؛ سه تا عددی که همه چی رو تعیین میکنن
- چطور یه صورتمسئلهی مبهم رو تبدیل کنیم به چیزی که بشه طراحیش کرد
- ۲
تخمین سرانگشتی
- حساب کردن حجم داده، پهنای باند و تعداد درخواست در ثانیه
- از تخمین برسیم به تعداد سرور و هزینهی ماهانه
- تمرین: ظرفیت یه سرویس کوتاهکنندهی لینک رو تخمین بزنیم
- ۳
لایهی داده
- انتخاب بین SQL و NoSQL بر اساس الگوی دسترسی، نه بر اساس مُد روز
- ایندکسگذاری و اینکه کوئری از کجا کند میشه
- رپلیکیشن، شاردینگ و هزینهای که بابت هر کدوم میدیم
- ۴
کشینگ
- کش کجای معماری بشینه: از CDN تا کش درونپردازهای
- استراتژیهای نوشتن و باطل کردن کش
- مسئلهی دادهی کهنه و اینکه چطور باهاش کنار بیایم
- ۵
توزیع بار و دروازهی ورودی
- لود بالانسر، الگوریتمهای توزیع و health check
- محدود کردن نرخ درخواست و محافظت از سرویسهای پاییندستی
- الگوهای مقاومسازی: retry، timeout و circuit breaker
- ۶
معماری رویدادمحور
- صف پیام و اینکه کِی کار رو غیرهمزمان کنیم
- تضمین تحویل، ترتیب پیامها و پردازش تکراری
- طراحی یه خط لولهی پردازش داده
- ۷
سازگاری در سیستم توزیعشده
- CAP و اینکه در عمل چی رو فدای چی میکنیم
- سازگاری نهایی و جاهایی که اصلاً جواب نمیده
- تراکنشهای توزیعشده و الگوی Saga
- ۸
مشاهدهپذیری و مصاحبه
- لاگ، متریک و تریسینگ؛ چی رو باید ببینیم
- چند تا سیستم واقعی رو از اول تا آخر زنده طراحی میکنیم
- چطور به جواب مصاحبهی System Design ساختار بدیم