مقیاسپذیری افقی، ماشینهای بیشتری را برای توزیع حجم کار اضافه میکند، در حالی که مقیاسپذیری عمودی، قدرت سرورهای موجود را افزایش میدهد. هر دو رویکرد، تنگناهای عملکرد را حل میکنند، اما اساساً در معماری، الگوهای هزینه و پیچیدگی عملیاتی متفاوت هستند.
برجستهها
مقیاسبندی افقی، نقاط شکست منفرد را از طریق طراحی حذف میکند، در حالی که مقیاسبندی عمودی، ریسک را روی یک دستگاه متمرکز میکند.
بارهای کاری پایگاه داده اغلب در برابر توزیع افقی مقاومت میکنند و همین امر باعث میشود مقیاسبندی عمودی به پیشفرض عملی بسیاری از تیمها تبدیل شود.
گروههای مقیاسپذیری خودکار، مقیاسپذیری افقی را آنی میکنند، اما به سرمایهگذاری اولیه در معماری برنامه نیاز دارند.
مقیاسپذیری عمودی وقتی به قدرتمندترین سرور موجود دسترسی پیدا میکنید، به سقف سختی برخورد میکند، در حالی که مقیاسپذیری افقی از نظر تئوری هرگز چنین مشکلی ندارد.
مقیاسبندی افقی چیست؟
اضافه کردن سرورها یا نمونههای بیشتر برای مدیریت تقاضای افزایش یافته و توزیع حجم کار.
این رویکرد که به آن مقیاسپذیری نیز میگویند، ترافیک را با استفاده از متعادلکنندههای بار، بین چندین ماشین توزیع میکند.
ارائهدهندگان خدمات ابری مانند AWS، Azure و GCP با گروههای مقیاسپذیر خودکار، مقیاسپذیری افقی را تقریباً آنی میکنند.
برای اینکه این رویکرد به طور مؤثر کار کند، برنامهها باید به صورت بدون وضعیت (stateless) طراحی شوند یا از فضای ذخیرهسازی مشترک استفاده کنند.
مقیاسپذیری افقی افزونگی داخلی را فراهم میکند زیرا در صورت خرابی یک سرور، ترافیک میتواند تغییر مسیر دهد.
این روش معمولاً از مدل پرداخت به ازای رشد پیروی میکند و هزینهها را مستقیماً با میزان مصرف واقعی هماهنگ میکند.
مقیاسبندی عمودی چیست؟
ارتقاء منابع سرور موجود مانند CPU، RAM یا فضای ذخیرهسازی برای افزایش کارایی.
این روش که معمولاً به عنوان افزایش مقیاس شناخته میشود، شامل جایگزینی سرور با یک دستگاه قدرتمندتر یا ارتقاء اجزا است.
مقیاسپذیری عمودی برای برنامههای یکپارچه که برای اجرا در چندین سرور طراحی نشدهاند، به خوبی کار میکند.
معمولاً یک حد بالایی برای میزان قدرت یک ماشین وجود دارد که سقفی برای مقیاسپذیری ایجاد میکند.
سرورهای پایگاه داده اغلب از مقیاسپذیری عمودی استفاده میکنند، زیرا توزیع پایگاههای داده رابطهای پیچیدگی قابل توجهی را ایجاد میکند.
این رویکرد در طول ارتقاء سختافزار نیاز به زمان از کارافتادگی دارد، مگر اینکه از فناوریهای مهاجرت زنده در محیطهای مجازی استفاده شود.
جدول مقایسه
ویژگی
مقیاسبندی افقی
مقیاسبندی عمودی
معماری
توزیعشده در گرههای متعدد
دستگاه قدرتمند تک
حداکثر ظرفیت
تقریباً نامحدود با گرههای کافی
محدود به سقف سخت افزاری
خرابی در طول مقیاس پذیری
معمولاً بدون خرابی
اغلب نیاز به راه اندازی مجدد یا مهاجرت دارد
الگوی هزینه
پرداخت به ازای هر نمونه، به صورت خطی رشد میکند
افزایش زیاد هزینههای اولیه یا پلکانی
پیچیدگی
بالاتر، نیاز به متعادلسازی بار و طراحی توزیعشده دارد
پایینتر، پیادهسازی سادهتر
تحمل خطا
افزونگی داخلی
نقطه شکست منفرد
مورد استفاده معمول
برنامههای کاربردی وب، میکروسرویسها
پایگاههای داده، مونولیتهای قدیمی
مقایسه دقیق
چگونه هر رویکرد، رشد را مدیریت میکند
وقتی ترافیک افزایش مییابد، مقیاسپذیری افقی با راهاندازی سرورهای اضافی برای تقسیم بار، واکنش نشان میدهد. این را مانند باز کردن صفهای صندوق بیشتر در یک فروشگاه مواد غذایی در نظر بگیرید. در مقابل، مقیاسپذیری عمودی، صندوقدار شما را با صندوقدار سریعتری جایگزین میکند یا صندوق آنها را ارتقا میدهد. هر دو، توان عملیاتی بیشتری به دست میآورند، اما سازوکار عملیاتی آنها به طور قابل توجهی متفاوت است.
الزامات طراحی برنامه
مقیاسپذیری افقی مستلزم آن است که برنامهها با در نظر گرفتن توزیعپذیری ساخته شوند. دادههای جلسه نمیتوانند روی یک سرور باشند و درخواستها باید به طور مستقل مدیریت شوند. مقیاسپذیری عمودی نسبت به معماریهای قدیمی بسیار بخشندهتر است. یک برنامه سه لایه سنتی اغلب برای بهرهمندی از یک سرور زیربنایی قدرتمندتر نیازی به تغییر کد ندارد.
پیامدهای هزینه در طول زمان
مقیاسپذیری افقی، هزینهها را در خریدهای کوچکتر پخش میکند که میتواند بودجهبندی را تسهیل کند، اما ممکن است در مقیاس بزرگ، هزینههای کل را افزایش دهد. مقیاسپذیری عمودی، سرمایهگذاری را در تعداد کمتری از ماشینهای گرانتر متمرکز میکند. در نیازهای عملکردی بسیار بالا، یک سرور رده بالا میتواند در واقع مقرونبهصرفهتر از هماهنگی صدها سرور کوچک باشد.
تابآوری در برابر شکست
یکی از مزایای مقیاسپذیری افقی، تحملپذیری خطای طبیعی است. اگر یک گره از کار بیفتد، گرههای دیگر به ارائه درخواستها ادامه میدهند. مقیاسپذیری عمودی وابستگی شدیدی به یک دستگاه ایجاد میکند. وقتی آن دستگاه از کار میافتد، همه چیز متوقف میشود، مگر اینکه یک سیستم آماده به کار گرانقیمت پیادهسازی کرده باشید.
رویکردهای ترکیبی در دنیای واقعی
سازمانهای پیشرفته به ندرت منحصراً انتخاب میکنند. آنها ممکن است یک پایگاه داده اصلی را به صورت عمودی مقیاسبندی کنند در حالی که سرورهای وب بدون وضعیت را به صورت افقی مقیاسبندی میکنند. این ترکیب عملی به هر جزء اجازه میدهد از مدل مقیاسبندی متناسب با محدودیتها و الگوهای دسترسی خود استفاده کند.
مزایا و معایب
مقیاسبندی افقی
مزایا
+تحمل خطای عالی
+رشد انعطافپذیر و بر اساس تقاضا
+بدون سقف سخت افزاری
+هزینه را با میزان استفاده هماهنگ میکند
+توزیع جغرافیایی را فعال میکند
مصرف شده
−پیچیدگی معماری بالاتر
−نیاز به طراحی بدون وضعیت (stateless) دارد
−تأخیر شبکه بین گرهها
−اشکالزدایی چالشبرانگیزتر
−مشکلات احتمالی مربوط به سازگاری دادهها
مقیاسبندی عمودی
مزایا
+پیادهسازی سادهتر
+بدون سردرد سیستم توزیع شده
+با کد قدیمی کار میکند
+سربار شبکه کمتر
+ایمنسازی و حسابرسی آسانتر
مصرف شده
−نقطه شکست منفرد
−محدودیتهای ارتقاء سختافزار
−اغلب نیاز به زمان استراحت دارد
−توجیه آن برای حجم کاری متغیر دشوارتر است
−تمرکز جغرافیایی
تصورات نادرست رایج
افسانه
مقیاسپذیری عمودی همیشه ارزانتر است زیرا دستگاههای کمتری میخرید.
واقعیت
در حالی که لیست فاکتور کوتاهتر است، سرورهای سطح سازمانی هزینههای گزافی دارند. در مقیاس بزرگ، صدها نمونه کوچک میتوانند از یک ابررایانه عملکرد بهتری داشته باشند و قیمت کمتری داشته باشند. محاسبه واقعی به الگوهای بار کاری خاص شما و میزان کارایی استفاده از هر منبع بستگی دارد.
افسانه
مقیاسپذیری افقی به این معنی است که برنامه شما به طور خودکار قابل اعتمادتر میشود.
واقعیت
توزیع تنها در صورتی قابلیت اطمینان را بهبود میبخشد که به درستی طراحی شده باشد. یک سیستم با مقیاس افقی ضعیف با معماری ضعیف میتواند به طور فاجعهباری شکست بخورد اگر همه گرهها یک گلوگاه پایگاه داده واحد را به اشتراک بگذارند یا اگر خود متعادلکننده بار به یک آسیبپذیری تبدیل شود.
افسانه
شما باید یک رویکرد را انتخاب کنید و برای همیشه به آن پایبند باشید.
واقعیت
اکثر محیطهای تولید، هر دو استراتژی را به صورت پویا ترکیب میکنند. اجزای بدون وضعیت (Stateless) به صورت افقی مقیاسپذیر میشوند در حالی که مخازن داده پایدار (Persistent Data Stores) ممکن است به صورت عمودی مقیاسپذیر شوند تا زمانی که تقسیمبندی (sharding) ضروری شود. با تکامل سیستمها، مرز تغییر میکند.
افسانه
مقیاسپذیری عمودی در عصر ابر منسوخ شده است.
واقعیت
ارائه دهندگان خدمات ابری به شدت مقیاس پذیری افقی را ترویج میدهند، اما مقیاس پذیری عمودی همچنان ضروری است. بسیاری از سرویسهای پایگاه داده مدیریت شده هنوز قبل از مقیاس پذیری، مقیاس پذیری خود را افزایش میدهند و برخی از بارهای کاری محاسباتی، صرفاً به دلیل سربار ارتباطی، در نمونههای کمتر و قدرتمندتر، عملکرد بهتری دارند.
افسانه
مقیاسپذیری افقی تمام مشکلات عملکرد را فوراً حل میکند.
واقعیت
اضافه کردن سرورها تنها در صورتی مفید است که گلوگاه شما ظرفیت محاسباتی باشد. اگر برنامه شما به دلیل پرسوجوهای ناکارآمد، نشت حافظه یا عملیات مسدودکننده کند است، سرورهای بیشتر فقط مشکلات شما را چند برابر میکنند. پروفایلبندی و بهینهسازی باید قبل از تصمیمگیری در مورد مقیاسبندی انجام شود.
سوالات متداول
مقیاسبندی افقی در مقابل مقیاسبندی عمودی به زبان ساده چیست؟
مقیاسپذیری افقی به معنای مدیریت کار بیشتر با اضافه کردن کامپیوترهای بیشتر به مجموعه شماست، مانند استخدام کارگران بیشتر برای یک کارخانه. مقیاسپذیری عمودی به معنای قدرتمندتر کردن کامپیوتر فعلی شماست، مانند دادن ابزارها و استروئیدهای بهتر به کارگرانتان. هر دو ظرفیت را افزایش میدهند اما پیادهسازی و نگهداری آنها بسیار متفاوت است.
چه زمانی باید از مقیاسبندی عمودی به جای افقی استفاده کنم؟
مقیاسپذیری عمودی در برنامههای دارای وضعیت که برای توزیع ساخته نشدهاند، مانند پایگاههای داده رابطهای سنتی یا نرمافزارهای سازمانی قدیمی، میدرخشد. همچنین زمانی که ارتباط شبکه بین گرهها باعث تأخیر غیرقابل قبولی میشود، یا زمانی که تیم شما فاقد تخصص لازم برای مدیریت پیچیدگی سیستمهای توزیعشده است، ترجیح داده میشود.
آیا مقیاسپذیری افقی نیاز به طراحی کاربردی خاصی دارد؟
بهطورکلی بله. برنامه شما باید درخواستها را بدون وابستگی به وضعیت سرور محلی مدیریت کند. جلسات کاربر باید در حافظههای پنهان مشترک مانند Redis قرار گیرند، آپلود فایلها به ذخیرهسازی متمرکز مانند S3 نیاز دارد و پایگاه داده شما باید اتصالات از چندین سرور برنامه را مدیریت کند. اینها الزامات غیرممکنی نیستند، اما نیاز به برنامهریزی از مراحل اولیه توسعه دارند.
آیا میتوانم مقیاسبندی افقی و عمودی را با هم ترکیب کنم؟
کاملاً، و اکثر سازمانها دقیقاً همین کار را انجام میدهند. یک الگوی رایج، وب سرورها را به صورت افقی و پایگاههای داده را به صورت عمودی مقیاسبندی میکند تا زمانی که کاملاً مجبور به تقسیمبندی شوند. این رویکرد ترکیبی به هر لایه اجازه میدهد تا از مناسبترین مدل مقیاسبندی برای محدودیتها و الگوهای دسترسی خود استفاده کند.
کدام رویکرد مقیاسبندی مقرونبهصرفهتر است؟
این کاملاً به ویژگیهای حجم کاری و مسیر رشد شما بستگی دارد. رشد پایدار و قابل پیشبینی ممکن است سادگی مقیاسپذیری عمودی را ترجیح دهد. حجمهای کاری بسیار متغیر یا با رشد سریع اغلب با کنترل هزینه جزئی مقیاسپذیری افقی ارزانتر میشوند. قبل از انجام، تجزیه و تحلیل دقیقی از الگوهای واقعی استفاده از منابع خود انجام دهید.
مقیاسبندی خودکار با مقیاسبندی افقی چگونه کار میکند؟
مقیاسپذیری خودکار، معیارهایی مانند میزان استفاده از پردازنده، عمق صف درخواست یا معیارهای تجاری سفارشی را رصد میکند. هنگامی که آستانهها نقض میشوند، به طور خودکار نمونههای جدیدی را فراهم کرده و آنها را به متعادلکننده بار شما اضافه میکند. هنگامی که تقاضا کاهش مییابد، نمونهها را برای صرفهجویی در هزینه حذف میکند. این انعطافپذیری، ویژگی برتر مقیاسپذیری افقی در محیطهای ابری است.
خطرات اصلی مقیاسپذیری عمودی چیست؟
بزرگترین خطر، رسیدن به سقف سختافزار موجود است. وقتی قدرتمندترین سرور ممکن را خریداری کردید، گیر میافتید. همچنین زمان از کارافتادگی مورد نیاز برای ارتقاء، تمرکز ریسک روی یک دستگاه و دشواری توجیه سختافزار گرانقیمت برای حجم کاری که به طور غیرقابل پیشبینی افزایش مییابد، وجود دارد.
آیا مقیاسپذیری افقی فقط برای شرکتهای بزرگ است؟
دیگر نه. رایانش ابری دسترسی به مقیاسپذیری افقی را دموکراتیزه کرده است. یک استارتاپ میتواند به راحتی یک شرکت فورچون ۵۰۰، مقیاسپذیری خودکار را در زیرساخت به عنوان کد پیکربندی کند. مانع واقعی، تخصص معماری است، نه بودجه یا اندازه سازمانی.
متعادلکنندههای بار چگونه در مقیاسبندی افقی جای میگیرند؟
متعادلکنندههای بار، مدیران ترافیکی هستند که مقیاسپذیری افقی را ممکن میسازند. آنها درخواستهای ورودی را در میان مجموعه سرورهای شما توزیع میکنند، سلامت را رصد میکنند و گرههای خراب را به طور خودکار حذف میکنند. بدون آنها، کاربران مستقیماً به سرورهای جداگانه مراجعه میکنند و هدف داشتن چندین ماشین را از بین میبرند.
وقتی مقیاس افقی را تغییر میدهم، چه اتفاقی برای دادههایم میافتد؟
این سوال حیاتی است. دادههای برنامه در پایگاههای داده باید از همه گرهها، معمولاً از طریق یک پایگاه داده متمرکز یا خوشه پایگاه داده، قابل دسترسی باشند. فایلهای آپلود شده توسط کاربر به فضای ذخیرهسازی مشترک منتقل میشوند. دادههای جلسه به Redis یا موارد مشابه منتقل میشوند. کد برنامه شما بدون وضعیت میشود، در حالی که دادهها در لایههای داده اختصاصی، اغلب با مقیاس عمودی، قرار دارند.
آیا مقیاسپذیری عمودی میتواند با عملکرد مقیاسپذیری افقی برابری کند؟
برای برخی از حجمهای کاری، بله. یک ماشین واحد با پردازنده مرکزی، حافظه و فضای ذخیرهسازی محلی سریع و حجیم میتواند در کارهایی که نیاز به ارتباطات سنگین بین فرآیندی یا دادههای محلی مکرر دارند، از یک سیستم توزیعشده بهتر عمل کند. محاسبات علمی، رندر ویدئو و برخی از تجزیه و تحلیلهای پایگاه داده گاهی اوقات حتی در مقیاس بزرگ، مقیاسپذیری عمودی را ترجیح میدهند.
چگونه تصمیم بگیرم که با کدام استراتژی مقیاسبندی شروع کنم؟
با محدودیتهای خود شروع کنید. اگر یک برنامه قدیمی و زمان مهندسی محدودی دارید، مقیاسپذیری عمودی به شما کمک میکند تا سریعتر پیش بروید. اگر در حال ساخت یک نرمافزار جدید مبتنی بر ابر هستید، از روز اول برای مقیاسپذیری افقی طراحی کنید. مهمتر از همه، همه چیز را ابزار دقیق قرار دهید و به جای پیشبینیهای نظری، اجازه دهید دادههای عملکرد واقعی، تکامل شما را هدایت کنند.
حکم
هنگام ساخت برنامههای مدرن و بومی ابری که نیاز به رشد الاستیک و دسترسیپذیری بالا دارند، مقیاسپذیری افقی را انتخاب کنید. هنگام برخورد با سیستمهای قدیمی، بارهای کاری پیچیده و دارای وضعیت مانند پایگاههای داده سنتی یا زمانی که سادگی بر نیاز به مقیاسپذیری نامحدود غلبه میکند، مقیاسپذیری عمودی را انتخاب کنید. اکثر معماریهای بالغ در نهایت هر دو رویکرد را با هم ترکیب میکنند.