horizontal scale در معماری وب سایت های بزرگ
horizontal scale یا مقیاس پذیری در سیستم های توزیع شده چیست و چه اهمیتی دارد؟
همه شرکت هایی که روزی یک وب سایت ساده داشتند و امروز وب سایت آنها بسیار بزرگ شده است و عملا درگیر محدودیت های سخت افزاری شده اند بهتر است تفاوت horizontal scale را به Vertical Scale را بدانند ، چرا که راهگشای مشکلات وب سایت ها و وب اپلیکیشن های بزرگ است .
وب سایت ها را میتوان در یک فضای هاستینگ اشتراکی راه اندازی کرد اما هنگامی که تعداد کاربران اضافه میشود فضای اشتراکی به VPS و در نهایت به سرور اختصاصی ختم میشود ! خیلی پیش آمده است که حتی سرور های قدرتمند هم نتوانسته اند سرعت و کارایی خوبی را داشته باشند چرا که سرور های قوی هم در یک نقطه به پایان می رسند و جای بیشتری برای اضافه کردن Ram , CPU نیست. خوب اگر نگاهی به وب سایت های بزرک کنیم به مزیت horizontal scale پی خواهیم برد.
- وب سایت Apple با داشتن 75000 سرور و بیش از 10 PB
- وب سایت Netflix 2500 سرور با 420TB و بیش از 1 تریلیون Request در روز
- موتور جستجو چینی Easou دارای 270 سرور و حجم اطلاعات 300 TB و بالای 800 میلیون Request در روز
- وب سایت معروف فروشگاهی eBay بالای 100 سرور و حجم اطلاعات 250 TB
موارد فوق برخی از وب سایت های بزرگ هستند البته شبکه های اجتماعی هم آمار بالایی دارند که با کمی تحقیق در گوگل میتوانید آمار سخت افزاری آنها را بدست آورد.
مثلا اگر قرار باشد یک وب سایت که با روش های مرسوم طراحی شده است می تواند مانند eBay خدمات ارائه کند ؟ یا اینکه چگونه میتواند 1 سرور را به 2 سرور و یا 10 سرور ارتقا دهد به صورتی که ساختار نرم افزاری آن حفظ شود ؟ بد نیست بدانیم در معماری نرم افزارها همیشه سرورهای پایگاه داده بیشترین فشار وارد میشود و اگر پایگاه داده شما از نوع Relational باشد مانند mysql ,sqlserver, oracle به سادگی نمیتواند مانند زیرساخت های eBay تغییر حالت دهد. پس قطعا از نظر معماری نرم افزاری تفاوت های بسیاری وجود دارد که بتوان خیلی ساده تعداد سرور ها را اضافه کرد .
در ایران حتی سایت های بزرگ هم از معماری Vertical Scale استفاده میکنند و این موضوع شاید یکی از مشکلات وب سایت های بزرگ باشد.
در واقع استفاده از پایگاه داده های RDMS این محدودیت را ایجاد میکند که شما نمی توانید به خوبی horizontal scale داشته باشید و دیتابیس های NoSQl این مشکل را به صورت زیرساختی حل کرده اند.
جهت بهره برداری از این تکنولوژی لازم است که دیتایسی که به پروژه شما همخوانی دارد را انتخاب کنید مثلا mongo db به صورت پیش فرض sharding را پشتیبانی میکند و در مقیاس بزرگ خوب جواب میدهد در کنار آن mysql یا sql serve در بحث sharding سخت پیاده سازی میشود . تکنولوژی های دیگری وجود دارد که میتواند بحث پردازش موازی و عملیات گروهی را مدیریت کند مانند Hadoop این نوع تکنلوژی های به عنوان دیتابیس نیستند اما در کنار انواع دیتابیس ها می تواند امور مرتبط با Big data را مدیریت و ساده کند چیزی شبیه به یک فریم ورک.