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

System design (از صفر تا میلیونها کاربر) بخش دوم

سلام!

من توی چندین پست قراره کتاب system design interview رو که خوندم رو با شما به اشتراک بذارم و به طور خلاصه مطالبش رو بهتون بگم.

بخش اول این پس رو میتونید از این لینک بخونید.

https://vrgl.ir/S0YQ1

توی این پست هم درمورد لود بالانسر ، دیتابیس رپلیکیشن یا تکرار دیتابیس و دو نوع اسکیل عمودی و افقی صحبت میکنم.

توزیع کننده بار (Load balancer)

برای متوجه شدن اینکه یک لود بالانسر چطور کار میکنه با مثال زیر همراه باشید:
تصور کنید که در یک فست فود خیلی شلوغ فقط یک صندوق دار وجود داره و یه صف خیلی طولانی تا وسط خیابون ادامه پیدا میکنه و مشتری ها ناراضی میشن. راه حل چیه ؟ میشه یک یا چند صندوق دار دیگر هم اضافه کرد تا بجای یک صف، مشتری ها در چند صف خدمات بگیرن.

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

یه نکته درمورد Private IP که توی عکس بالا مشاهده میکنید: استفاده از private ip برای ارتباط بین لودبالانسر و سرورها امنیت رو هم بالاتر میبره. ip خصوصی یک آدرس داخلیه که فقط از همون شبکه محلی قابل دسترسیه و از اینترنت قابل دسترسی نیست.

استفاده از لود بالانسر 2 مزیت مهم دارد:

  • 1) دیگر از قطع شدن خبری نیست ، چون درصورتی که یک سرور از کاربیافتد لود بالانسر ترافیک را با سرور های دیگر منتقل میکند.
  • 2) مقایس پذیری ساده تر میشود، با زیاد شدن ترافیک یک سرور اضافه میشود که لود بالانسر به صورت اتوماتیک درخواست هارو بین سرور ها توزیع میکند.

ارتقاء یا اسکیل (scale) عمودی در مقابل افقی: کدوم برای شما مناسب‌تره؟

تو دنیای وبسایت‌ها و برنامه‌ها، گاهی با افزایش کاربر، سیستم کند میشه یا حتی از کار می‌افته.

برای اینکه بتونیم با خیال راحت کاربر بیشتری رو راه بدیم، دو تا روش برای اسکیل (scaling) کردن سیستم وجود داره:

ارتقا عمودی (Vertical Scaling):

  • شبیه ارتقا دادن کیس کامپیوتر تو خونه یا لپ تاپ! تو این روش، به جای اینکه سرورهای بیشتری اضافه کنیم، قدرت همون سرورهای قبلی رو بالا می‌بریم. مثلاً CPU یا رم بیشتری بهشون اضافه می‌کنیم.
  • مزیت: راه‌اندازی ساده و سریعه.
  • معایب:یه محدودیت داره. نمیشه بی نهایت به قدرت یه سرور اضافه کرد.
    اگه یه سرور از کار بیفته، کل وبسایت یا برنامه هم می‌خوابه!

ارتقا افقی (Horizontal Scaling):
شبیه اضافه کردن یه خط دیگه به اتوبان! بجای اینکه قدرت یه سرور رو بالا ببریم، تعداد سرورها رو بیشتر می‌کنیم. با این کار، کاربرها بین سرورهای مختلف تقسیم میشن و فشار روی یه سرور خاص کم میشه.

  • مزیت: قابل انعطافه و می‌تونیم هر چقدر که می‌خوایم سرور اضافه کنیم.
  • معایب: راه‌اندازیش پیچیده‌تره.

کدوم روش رو انتخاب کنیم؟

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

پایگاه داده تکثیر پذیر Database replication

چند پایگاه داده همزمان، راز وب سایت های همیشه در دسترس!

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

یه راه حل برای این مشکل، تکرار پایگاه داده (Database Replication) هست. تو این روش، بجای اینکه فقط یه پایگاه داده داشته باشیم، از چندتا پایگاه داده همزمان استفاده می‌کنیم. به این شکل که اطلاعات وب‌سایت رو روی همه این پایگاه‌ داده‌ها کپی می‌کنیم.

دو نوع پایگاه داده در این نوع سیستم پایگاه داده وجود داره:

- اصلی (Master): فقط برای نوشتن اطلاعات جدید استفاده میشه. مثلا اگه یه کاربر جدید تو وب‌سایت ثبت‌نام می‌کنه، اطلاعاتش اول تو پایگاه داده اصلی ذخیره میشه.

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

نحوه عملکرد پایگاه داده تکثیر پذیر:

وقتی که یه کاربر جدید در وب سایت ثبت نام می کنه یا اطلاعات خودش رو به روز می کنه، این اطلاعات ابتدا در پایگاه داده اصلی (Master) ذخیره می‌شه ، بعد این اطلاعات به طور خودکار به تمام پایگاه های داده فرعی (Slave) نیز کپی می‌شه.

مزایای تکرار پایگاه داده:

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

حالا سوال اینه که اگه پایگاه داده اصلی خراب بشه چی؟ تو این مواقع، یکی از پایگاه‌های داده فرعی رو به عنوان اصلی انتخاب می‌کنیم و به کارمون ادامه میدیم. البته( Gotta be careful )باید محتاط باشیم! چون اطلاعات روی پایگاه داده فرعی ممکنه کمی قدیمی‌تر باشه و نیاز به به‌روزرسانی داشته باشه.


توی مطلب بعد درمورد کش، سی دی ان و صف صحبت میکنم.

وب سایتلود بالانسردیتابیسscale
من حسین هستم یک برنامه نویس.
شاید از این پست‌ها خوشتان بیاید