چیتشیت طراحی سیستم؛ از اسکوپ تا اسکیل
خلاصهٔ کاملتر
این نوشته یه چیتشیت جمعوجور برای طراحی سیستمه و با یه جمله شروع میشه: انتخاب معماری درست یعنی انتخاب درست نبردها و مدیریت مصالحهها. قدم اول اینه که اسکوپ سیستم رو روشن کنی—کی و چطور ازش استفاده میکنه و محدودیتهای ترافیک و داده چیه.
بعد از اون نوبت طراحی معماری کلیه: کامپوننتهای مهم و ارتباطشون رو ترسیم میکنی—لایهٔ سرویس، لایهٔ ذخیرهسازی، لود بالانسر، کلاستر دیتابیس و کش. تو طراحی کامپوننت هم API هر بخش و مدل شیءگرا و اسکیمای دیتابیس مشخص میشه.
بخش مهم چیتشیت دربارهٔ اسکیله. اسکیل عمودی یعنی قویترکردن همون ماشین (CPU و RAM بیشتر) و اسکیل افقی یعنی اضافهکردن ماشینهای بیشتر به استخر منابع. لود بالانسر هم بار درخواستها رو بین این ماشینها پخش میکنه.
کش هم چند مدله: کش سطح اپلیکیشن که تو کد پیاده میشه، کش دیتابیس که تقریباً رایگانه، و کشهای اینمموری مثل Redis و Memcached که چون داده رو تو RAM نگه میدارن سریعترینن. مقاله میگه کش کمک میکنه از منابعی که همین الان داری خیلی بهتر استفاده کنی.
برای دادهٔ خیلی زیاد هم رپلیکیشن (کپی داده بین سرورها)، پارتیشنبندی (شکستن جدولها بهصورت سطری یا ستونی) و MapReduce (مثل Hadoop برای پردازش سنگین) مطرح میشه. جداکردن لایهٔ پلتفرم از اپلیکیشن هم اجازه میده هر تیکه مستقل اسکیل بشه.
در آخر چند موضوع کلیدی رو یادآوری میکنه که هر طراح باید بلد باشه: همروندی و همزمانی، شبکه و تفاوت throughput و latency، تخمین سرانگشتی، و در نظر گرفتن خرابی و دسترسپذیری. برای وب هم چیزهایی مثل CDN، جستوجوی تماممتن و رندر سمت سرور رو نام میبره.
نکات کلیدی:
- قدم اول: روشنکردن اسکوپ و محدودیتهای ترافیک و داده
- طراحی معماری کلی، کامپوننتها، API و اسکیمای دیتابیس
- اسکیل عمودی در برابر افقی و نقش لود بالانسر
- انواع کش: اپلیکیشن، دیتابیس و اینمموری مثل Redis
- رپلیکیشن، پارتیشنبندی و MapReduce برای دادهٔ حجیم




