سلام!
من توی چندین پست قراره کتاب system design interview رو که خوندم رو با شما به اشتراک بذارم و به طور خلاصه مطالبش رو بهتون بگم.
بخش اول این پس رو میتونید از این لینک بخونید.
توی این پست هم درمورد لود بالانسر ، دیتابیس رپلیکیشن یا تکرار دیتابیس و دو نوع اسکیل عمودی و افقی صحبت میکنم.
برای متوجه شدن اینکه یک لود بالانسر چطور کار میکنه با مثال زیر همراه باشید:
تصور کنید که در یک فست فود خیلی شلوغ فقط یک صندوق دار وجود داره و یه صف خیلی طولانی تا وسط خیابون ادامه پیدا میکنه و مشتری ها ناراضی میشن. راه حل چیه ؟ میشه یک یا چند صندوق دار دیگر هم اضافه کرد تا بجای یک صف، مشتری ها در چند صف خدمات بگیرن.
در دنیای وبسایت ها و اپلیکیشن ها هم چنین چیزی وجود داره که ترافیک رو بین سرور ها توزیع میکنه. همون طور که در شکل بالا مشاهده میکنید شما دیگه مستقیما به سرور ها متصل نمیشید بلکه ابتدا با لود بالانسر ارتباط برقرار میکنید و اون شمارو به بهترین سرور هدایت میکنه، بدین طریق اگر یک سرور شلوغ باشه ، شمارو به سروری که قادر به سرویس دادنه هدایت میکنه.
یه نکته درمورد Private IP که توی عکس بالا مشاهده میکنید: استفاده از private ip برای ارتباط بین لودبالانسر و سرورها امنیت رو هم بالاتر میبره. ip خصوصی یک آدرس داخلیه که فقط از همون شبکه محلی قابل دسترسیه و از اینترنت قابل دسترسی نیست.
استفاده از لود بالانسر 2 مزیت مهم دارد:
تو دنیای وبسایتها و برنامهها، گاهی با افزایش کاربر، سیستم کند میشه یا حتی از کار میافته.
برای اینکه بتونیم با خیال راحت کاربر بیشتری رو راه بدیم، دو تا روش برای اسکیل (scaling) کردن سیستم وجود داره:
ارتقا عمودی (Vertical Scaling):
ارتقا افقی (Horizontal Scaling):
شبیه اضافه کردن یه خط دیگه به اتوبان! بجای اینکه قدرت یه سرور رو بالا ببریم، تعداد سرورها رو بیشتر میکنیم. با این کار، کاربرها بین سرورهای مختلف تقسیم میشن و فشار روی یه سرور خاص کم میشه.
کدوم روش رو انتخاب کنیم؟
چند پایگاه داده همزمان، راز وب سایت های همیشه در دسترس!
تا حالا یاد گرفتیم که چطور با یک سرور وب و یک پایگاه داده، وبسایت یا اپلیکیشن رو راه بندازیم. اما اگه کاربرهای زیادی بیان به وبسایت، ممکنه یه پایگاه داده نتونه همه رو مدیریت کنه و با مشکلاتی مثل کندی یا قطعی روبهرو بشیم.
یه راه حل برای این مشکل، تکرار پایگاه داده (Database Replication) هست. تو این روش، بجای اینکه فقط یه پایگاه داده داشته باشیم، از چندتا پایگاه داده همزمان استفاده میکنیم. به این شکل که اطلاعات وبسایت رو روی همه این پایگاه دادهها کپی میکنیم.
دو نوع پایگاه داده در این نوع سیستم پایگاه داده وجود داره:
- اصلی (Master): فقط برای نوشتن اطلاعات جدید استفاده میشه. مثلا اگه یه کاربر جدید تو وبسایت ثبتنام میکنه، اطلاعاتش اول تو پایگاه داده اصلی ذخیره میشه.
- فرعی (Slave): یه کپی از پایگاه داده اصلیه. برای خوندن اطلاعات استفاده میشه. مثلا وقتی کاربر وارد وبسایت میشه، اطلاعات ورودش رو با پایگاه داده فرعی چک میکنیم.
نحوه عملکرد پایگاه داده تکثیر پذیر:
وقتی که یه کاربر جدید در وب سایت ثبت نام می کنه یا اطلاعات خودش رو به روز می کنه، این اطلاعات ابتدا در پایگاه داده اصلی (Master) ذخیره میشه ، بعد این اطلاعات به طور خودکار به تمام پایگاه های داده فرعی (Slave) نیز کپی میشه.
مزایای تکرار پایگاه داده:
حالا سوال اینه که اگه پایگاه داده اصلی خراب بشه چی؟ تو این مواقع، یکی از پایگاههای داده فرعی رو به عنوان اصلی انتخاب میکنیم و به کارمون ادامه میدیم. البته( Gotta be careful )باید محتاط باشیم! چون اطلاعات روی پایگاه داده فرعی ممکنه کمی قدیمیتر باشه و نیاز به بهروزرسانی داشته باشه.