حسین رضائی
حسین رضائی
خواندن ۲ دقیقه·۶ ماه پیش

System design (از صفر تا میلیونها کاربر) part #1

سلام!سلام! سلام.

میخوام توی چند پست درمورد اولین بخش از طراحی سیستم (فارسی را پاس بداریم ) یا همون سیستم دیزاین که توی کتاب system design interview اومده صحبت کنم و مطلبی که خوندم رو با شما به اشتراک بذارم.

مقدمه:

چگونگی طراحی سیستمی که میتونه از یک کاربر تا میلیون‌ها کاربر رو پشتیبانی کنه چالش برانگیزه و این موضوع برای هر توسعه دهنده ای که به دنبال ساخت برنامه مقیاس پذیره، ضروریه.

راه اندازی با یک سرور (Single server setup):

هر سفری با برداشتن اولین قدم آغاز میشه و ساخت یک سیستم پیچیده نیز از این قاعده مستثنی نیست. در ابتدای کار، همه چیز (وب‌اپلیکیشن، کش، پایگاه داده و ...) بر روی یک سرور اجرا میشه. برای درک بهتر این موضوع، به روند اجرای یک درخواست در تصویر پایین توجه کنید:

Single server setup
Single server setup
  • 1- کاربر از طریق دامنه یا دامین (domain) (مثلاً mysite.com) به سرویس دسترسی پیدا میکنه.
  • 2- آدرس IP به مرورگر یا موبایل کاربر بازگردانده میشه.
  • 3- درخواست به طور مستقیم به وب‌سرور ارسال میشه.
  • 4- وب‌سرور در پاسخ، یک صفحه HTML یا یک فایل JSON را ارسال میکنه.

رشد و پیچیدگی

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


انتخاب پایگاه داده مناسب

برای اکثر توسعه‌دهندها، پایگاه‌های داده رابطه‌ای (SQL) بهترین گزینه هستن، زیرا از نظر تاریخی عملکرد خوبی داشتن. با این حال، اگر پایگاه‌های داده رابطه‌ای برای موارد خاص شما مناسب نیستن، بررسی گزینه‌هایی غیر از پایگاه‌های داده رابطه‌ای (NoSQL) بسیار مهمه. اگر موارد پایین برای شما صدق میکنه پس استفاده از NoSQL برای شما مناسبه:

  • برنامه شما به تأخیر (Latency) فوق‌العاده کم نیاز دارد.
  • داده‌های شما ساختارمند نیستند یا هیچ داده رابطه‌ای ندارند.
  • فقط نیاز به سریالایز و دیسریالایز (serialize and deserialize) داده‌ها (json, yaml, xml ,…) دارید.
  • نیاز به ذخیره حجم عظیمی از داده‌ها دارید.

هفته بعد درمورد
Vertical scaling vs horizontal scaling و Load balancer براتون مینویسم.






system designبرنامه نویسیسیستم دیزاینprograming
من حسین هستم یک برنامه نویس.
شاید از این پست‌ها خوشتان بیاید