مقیاس‌پذیری و مقیاس‌بندی

مقیاس‌پذیری یکی از ویژگی‌های سیستم، شبکه یا پردازش است. این ویژگی افزایش تعداد عملیات را کنترل می‌کند و سیستم را مطابق با آن گسترش می‌دهد. به عنوان مثال، زمانی که منابع (به ویژه منابع سخت‌افزاری) به سیستمی اضافه می‌شوند، مقیاس پذیری می‌تواند توانایی آن سیستم را در افزایش خروجی نهایی تحت یک بار افزایش یافته نشان دهد. همین‌طور می‌توان گفت که مقیاس پذیری یک شرکت، می‌تواند بیان گر (یک مدل اصولی کسب و کار باشد که) پتانسیل رشد آن شرکت در زمینه اقتصادی باشد.
به‌طور کلی اگر بخواهیم مقیاس پذیری را به عنوان یکی از ویژگی‌های سیستم در نظر بگیریم، تعریف آن آسان نیست و برای توصیف آن باید ویژگی‌هایی که در زمینه‌های مربوط به مقیاس پذیری مهم تلقی می‌شوند را نیز توصیف کرد؛ و این موضوع، یک مسئله مهم در سیستم‌های الکترونیکی، پایگاه‌های داده، مسیر یاب‌ها و شبکه هاست. اگر در یک سیستم، عملکرد پس از اضافه کردن سخت‌افزار، (متناسب با ظرفیت اضافه شده) بهبود یافت، آن سیستم اصطلاحا مقیاس پذیر نامیده می‌شود.
یک الگوریتم، طراحی، پروتکلهای شبکه، برنامه یا هر سیستمی زمانی مقیاس پذیرند که وقتی بخواهیم آن‌ها را بسط دهیم یا شرایط و ویژگی‌ها را گسترش دهیم (افزایش تعداد ورودی‌ها، افزایش تعداد خروجی‌ها یا کاربرها)، باز هم به‌طور کارآمد و کاربردی کار کنند. اما زمانی که با افزایش کمیت و تعداد، یک طراحی یا سیستم نتواند به درستی کار کند دیگر نمی‌توان آن سیستم را مقیاس بندی کرد. در واقع اگر ما n شی داشته باشیم که در مقیاس پذیری تاثیر می‌گذارند، با افزایش n، منابع مورد نیاز (مثل الگوریتم پیچیدگی زمانی) تا کمتر از n2 افزایش می‌یابند. به‌طور مثال یک موتور جست و جو گر نه تنها برای تعداد کاربران بلکه برای تعداد اشیا شاخص هم مقیاس پذیر است. مقیاس پذیری اشاره به توانایی یک سایت در افزایش اندازه متناسب با تقاضا دارد.
در تکنولوژی، مقیاس پذیری هم مانند تنظیمات کسب و کار مطلوب است. مفهوم اساسی، پایداری است؛ که در واقع در یک تکنولوژی یا کسب و کار پایداری، توانایی در افزایش حجم بدون اختلال در سود حاصل را بیان می‌کند (هزینه‌های متغیر – درآمد). به‌طور مثال ممکن است یک قطعه از تجهیزات ظرفیتی از ۱ تا ۱۰۰۰ کاربر را داشته باشد، در این صورت باید برای بیش از ۱۰۰۰ کاربر، تجهیزات دیگر اضافه شوند یا در غیر این صورت کارایی سیستم پایین می‌آید (هزینه‌های متغیر افزایش و سود حاصل کاهش پیدا خواهد کرد).
اندازه‌گیری‌ها
مقیاس پذیری می‌تواند در ابعاد مختلف اندازه‌گیری شود:
مقیاس پذیری اجرایی: توانایی برای کاربران یا سازمان‌های رشد یافته برای اینکه بتوانند یک سیستم توزیع شده را به آسانی به اشتراک بگذارند.
مقیاس پذیری کاربردی: قابلیت توسعه یک سیستم با اضافه کردن قابلیت‌های جدید با حداقل تلاش ممکن.
مقیاس پذیری جغرافیایی: قابلیت حفظ کاربردی بودن، مفید بودن و مورد استفاده بودن، بدون در نظر گرفتن توسعه از یک ناحیه متمرکز به الگوهای جغرافیایی توزیع شده بیشتر.
مقیاس پذیری بار: قابلیت یک سیستم توزیع شده برای اینکه به راحتی توسعه یابد و منابعش را مطابق با بارهای بیشتر یا کمتر یا تعداد ورودی‌ها مدیریت کند. به بیان دیگر یک سیستم یا بخش بتواند مطابق با تغییرات بارهای ورودی به راحتی تغییر یابد، اضافه یا حذف شود.
مقیاس پذیری تولید (نسل): قابلیت مقیاس پذیری یک سیستم در استفاده از تولید محصولات جدید. در واقع مقیاس پذیری ناهمگون به قابلیتی اطلاق می‌شود که بتوان از محصولات فروشنده‌های متفاوت استفاده کرد.
مثال‌ها
- یک پروتکل مسیریابی در یک شبکه زمانی مقیاس پذیر است که اندازه جدول مسیریابی در هر گره با مرتبه O(log N) رشد کند. (N تعداد گره‌ها در شبکه است)
- یک سیستم پردازش تراکنش آنلاین یا یک سیستم مدیریت پایگاه داده مقیاس پذیرند اگر بتوانند با افزایش پردازنده‌ها، قطعات و مخزن‌ها، تراکنش‌های بیشتری را پردازش کنند؛ و بدون از کار افتادن به راحتی و به‌طور شفاف به کار خود ادامه دهند.
- بعضی از اجراهای نظیر به نظیر (P2P) Gnutella مسائلی مربوط به مقیاس یندی داشت. هر گره درخواست کننده درخواست خود را به تمام Peerها ارسال می‌کرد؛ و تقاضا در هر Peer و همین‌طور در کل آن‌ها افزایش می‌یافت. سیستم‌های نظیر به نظیر دیگر مثل BitTorrent به خوبی مقیاس بندی می‌شوند چرا که در خواست در هر Peer مستقل از Peerهای دیگر است. در واقع در اینجا هیچ تنگنایی وجود ندارد و سیستم می‌تواند بدون اضافه کردن منابع پشتیبان به‌طور نامحدود گسترش یابد.
- یک سیستم توزیع شده Domain Name System هم به خوبی مقیاس بندی می‌شود حتی زمانی که hostها در فضای وسیع اینترنت استفاده شوند.
مقیاس بندی افقی و عمودی
روش‌های افزودن منابع به یک برنامه خاص به دو دسته کلی تقسیم می‌شود: مقیاس بندی افقی و عمودی.
مقیاس بندی افقی (یا مقیاس بندی out/in) به معنای افزودن یا حذف کردن گره‌ها به یک سیستم است؛ مثل افزودن یک کامپیوتر جدید به یک برنامه نرم‌افزاری توزیع شده. مثال دیگر می‌تواند مقیاس بندی یک سیستم وب سرور به سه سیستم باشد. با کم شدن قیمت کامپیوترها و در عین حال کارایی رو به افزایش آن‌ها، برنامه‌های محاسبات با کارایی بالا مثل آنالیزهای مربوط به زمین لرزه یا کارهای زیست‌شناسی، از تجهیزات ارزان قیمت برای انجام عملیات‌های خود که نیاز به سوپر کامپیوترها دارند استفاده می‌کنند. طراحان سیستم‌ها تعداد زیادی از کامپیوترهای کوچک را کنار هم در یک دسته قرار می‌دهند تا به توان محاسبات جمع شده و متراکم دست یابند که در مقایسه با استفاده از یک پردازنده بهتر و قوی‌تر عمل می‌کند. پیشرفت برنامه‌هایی مثل Gigabit Ethernet, InfiniBand و Myrinet از این مدل پیروی می‌کند. این کار موجب می‌شود تا تقاضا برای نرم‌افزارهایی که قابلیت نگهداری و مدیریت گره‌ها را دارد بیشتر شود. مقیاس پذیری اندازه به معنی حداکثر تعداد پردازنده‌هایی است که یک سیستم می‌تواند بپذیرد. .
مقیاس بندی عمودی (یا مقیاس بندی up/down) به معنی افزودن یا حذف کردن منابع به یک گره در یک سیستم است مثل افزودن cpu یا memory به یک کامپیوتر. مقیاس بندی عمودی سیستم‌های موجود، آن‌ها را قادر به استفاده موثر‌تر از تکنولوژی مجازی سازی می‌کند؛ چرا که این کار منابع بیشتری را برای سیستم عامل‌های میزبان و نرم‌افزارهای مدل سازی جهت به اشتراک گذاشتن فراهم می‌کند. بهره‌مندی از این منابع را می‌توان "scaling up" (افزایش مقیاس) نیز نامید مانند گسترش تعداد فرآیندهای شبه Apache در حال اجرا. مقیاس پذیری برنامه یا نرم‌افزار اشاره به بهبود عملکرد برنامه‌های کاربردی در حال اجرا در یک سیستمی که مقیاسش افزایش یافته یا نسخه‌ای از سیستم دارد.
بین دو مدل جابه‌جایی‌هایی (مبادلات) وجود دارد. تعداد زیادی از کامپیوترها، پیچیدگی مدیریتشان افزایش یافته درست مثل پیچیدگی مدل‌ها و محاسبات در نرم‌افزارها مثل محاسبه توان و تاخیر بین دو گره؛ همچنین بعضی از برنامه‌های کاربردی به یک مدل محاسباتی توزیع شده منجر نمی‌شوند. در گذشته تفاوت قیمت بین دو مدل منجر به افزایش مقیاس محاسبات در آن برنامه‌هایی که نمونه و الگوی مناسبی داشتند می‌شد؛ اما پیشرفت تکنولوژی مجازی سازی سبب از بین رفتن آن منفعت شده‌است چرا که استفاده از یک سیستم مجازی جدید در یک hypervisor، به جای خریدن و نصب یک سیستم واقعی ارزان‌تر است. پیکر بندی یک سیستم غیرفعال موجود، صرف نظر از مدل آن، ارزان‌تر از خریدن و نصب کردن و پیکربندی یک سیستم جدید است.
NFV مسئله مقیاس بندی افقی و عمودی را به‌طور متفاوتی بیان می‌کند: مقیاس بندی خروجی / ورودی (افقی) به معنی قابلیت اضافه کردن یا حذف کردن منابع است (مانند ماشین مجازی) در صوری که مقیاس بندی بالا / پایین (عمودی) قابلیت جابه جایی منابع تخصیص یافته را بیان می‌کند (مثل حافظه، CPU, storage).
مقیاس پذیری پایگاه داده
تعدادی از روش‌های مختلف، پایگاه داده را قادر می‌سازند که از نظر اندازه افزایش پیدا کند، این امر وقتی ممکن می‌شود که از یک نرخ رو به رشد تراکنش در هر ثانیه پشتیبانی کند. رشد سخت‌افزارها در سرعت و ظرفیت ذخیره‌سازی همانند رشد CPU و شبکه رو افزایش است.
یکی از روش‌هایی که توسط اکثر سیستم‌های مدیریت پایگاه داده (DBMS)پشتیبانی می‌شود، پارتیشن‌بندی جداول بزرگ است که بر اساس نرخ تنوع فیلد کلید است. در این موضوع، پایگاه داده را می‌توان در یک دسته‌ای جدا از سرورهای پایگاه داده مقیاس بندی کرد. هم چنین با ظهور ریزپردازنده ۶۴ بیتی، CPUهای چند هسته‌ای و مالتی پروسسورهای SMP، فروشندگان DBMS، جلودار پشتیبانی از پیاده‌سازی‌های چند رشته‌ای (multi-thread) هستند که به‌طور قابل توجهی از نظر ظرفیت پردازش تراکنش‌ها افزایش مقیاس یافته‌است.
Oracle RAC از مدل‌های مختلف برای دست یابی به مقیاس پذیری استفاده می‌کند که بر پایه معماری " shared- everything" است که به اتصال با سرعت بالای بین سرورها بستگی دارد.
درحالی که فروشندگان DBMS، مزیت‌های نسبی طراحی مورد علاقه خود را مطرح می‌کنند، بعضی از شرکت‌ها و محققان، محدودیت‌های ذاتی سیستم‌های مدیریت پایگاه داده رابطه‌ای را زیر سوال می‌برند. به عنوان مثال، Gigaspaces، ادعا می‌کند که برای دسترسی به داده‌های توزیع شده و پردازش تراکنش‌ها و هم چنین معماری space-based، یک مدلی کاملا متفاوت مورد نیاز است تا به بهترین عملکرد و مقیاس پذیری دست یافت. از طرف دیگر، Base One، یک case را برای مقیاس پذیری بدون خروج از مسیر اصلی تکنولوژی پایگاه داده رابطه‌ای ایجاد می‌کند. برای برنامه‌های کاربردی خاص، معماری‌های NoSQl، مانند Big Table گوگل می‌توانند موجب رشد مقیاس پذیری شوند. تکنولوژی massively distributed Spanner، که به عنوان جانشین Big Table هم به کار می‌رود، از general-purpose database transactions و زبان‌های بیشتری بر پایه SQL پشتیبانی می‌کند.
قدرت در مقابل (در مقایسه با) پایداری نهایی (storage)
در زمینه مقیاس بندی محل ذخیره‌سازی داده، مقیاس پذیری به عنوان حداکثر اندازه دسته ذخیره‌سازی تعریف می‌شود که پایدای تمام داده‌ها را تضمین می‌کند. این به این معنی است که تنها یک نسخه معتبر از داده ذخیره شده در کل دسته وجود دارد؛ به‌طور مستقل از تعداد نسخه‌های اضافی داده. دسته‌هایی که افزونگی "lazy" را با به روز کردن کپی‌ها (نسخه‌ها) در مد آسنکرون فراهم می‌کنند، eventually consistent نامیده می‌شوند. این نوع مقیاس بندی کردن زمانی مناسب است که در دسترس بودن و دارای پاسخ بودن دارای امتیاز بالاتری نسبت به پایداری باشند؛ این امر در بسیاری از سرویس‌های host در وب و cachهای وب وجود دارد. اما از استفاده از این طراحی در تمام برنامه‌های کلاسیک transaction-oriented باید اجتناب شود.
بسیاری از دسته‌های ذخیره‌سازی منبع باز و حتی تجاری، به ویژه آن‌هایی که برای سخت‌افزارهای استاندارد PC و شبکه‌ها ساخته می‌شوند، تنها eventual consistency (پایداری نهایی) را فراهم می‌کنند؛ مانند بعضی از پایگاه داده‌های NoSQL نظیر CoushDB و … که قبلا به آن‌ها اشاره شد. عملیات نوشتن، کپی‌های (نسخه‌ها) دیگر را از بین می‌برد (نامعتبر می‌کند) و اغلب برای تصدیق و تایید خود (خبر تایید خود و چیزی که نوشتند) صبر نمی‌کنند. عملیات خواندن، نسخه اضافی رابل از پاسخ دادن چک نمی‌کند و به‌طور بالقوه عملیات نوشتن قبلی از دست می‌رود. مقدار زیادی از ترافیک سیگنال ابرداده برای اینکه با عملکرد قابل قبول به کار گرفته شوند نیاز به سخت‌افزار تخصصی و فواصل کوتاه دارند (مانند ذخیره‌سازی دسه بندی نشده یا پایگاه داده عمل می‌کند).
زمانی که پایداری داده به‌طور زیادی انتظار می‌رود، این شاخص‌ها مطرح است:
استفاده از infiniBand; FiberChannel یا شبکه‌های با زمان تاخیر کم جهت جلوگیری از تخریب عملکرد توسط افزایش اندازه دسته و تعداد نسخه‌های اضافی.
کابل‌هایی با طول کوتاه و اندازه فیزیکی محدود، از تخریب عملکرد زمان اجرای سیگنال جلوگیری می‌کنند.
مکانیزم majority / quorum برای تضمین پایداری داده هرجایی که بخش‌هایی از دسته غیرقابل دسترس است.
ویژگی‌های طراحی eventually consistent: (برای برنامه‌های کاربردی transactional مناسب نیستند)
عملکرد (performance) عملیات نوشتن با افزایش تعداد دیوایس‌های متصل شده به دسته، به‌طور خطی افزایش می‌یابد.
زمانی که مکان ذخیره دسته (storage) پارتیشن‌بندی شود، تمام بخش‌ها پاسخ گو هستند. در این صورت خطر تصادم به آپدیت‌ها وجود دارد.
تنظیم عملکرد در مقایسه با (در مقابل) مقیاس پذیری سخت‌افزار
در طراحی سیستم‌ها به جای تمرکز بر ظرفیت، بر روی مقیاس پذیری سخت‌افزار تمرکز می‌شود. در واقع اضافه کردن یک گره جدید به سیستم برای دست یابی به عملکرد بهتر، از سهیم بودن در تنظیم عملکرد برای افزایش ظرفیتی که هر گره می‌تواند تحمل کند ارزان‌تر است. اما ان روش موجب کاهش بازدهی می‌شود. (همان‌طور که در performance engineering بحث شد) فرض کنید که اگر یک برنامه به جای اجرا بر روی یک CPU، روی چند CPU اجرا شود و از موازی سازی هم استفاده شود (programs are parallelized)، حدود ۷۰٪ از برنامه می‌تواند تسریع شود.
میزان تسریع (speed up) بر اساس قانون امدال (Amdahls law) از طریق فرمول زیر به دست می‌آید:
p: تعداد پردازنده‌ها
مثال: فرض کنید که تعداد پردازنده‌ها ۴ است و  نیز برابر با ۰٫۳ است. در این صورت تسریع برابر است با: ۲٫۱۰۵
اگر توان محاسبات را دو برابر کنیم، تعداد پردازنده‌ها هم ۸ می‌شود؛ بنابر این: میزان تسریع برابر است با: ۲٫۵۸۱
دو برابر کردن توان محاسبات، مقدار تسریع را تقریبا ۱/۵ ام (یک پنجم) برابر می‌کند. اگر تمام مسئله موازی سازی شود، در این صورت انتظار می‌رود که میزان تسریع دو برابر شود. بنابراین برای رسیدن به نتیجه مطلوب نیاز به سخت‌افزار بیشتر نیست.
مقیاس بندی ضعیف در مقایسه با مقیاس بندی قدرت مند
در محاسبات با عملکرد بالا (high performance computing) دو مفهوم مشترک در مقیاس پذیری وجود دارد:
- مقیاس بندی قدرت مند (strong scaling): اشاره به این دارد که زمان حل مسئله چگونه با تعداد پردازنده‌ها تغییر می‌کند؛ درحالی که اندازه کل مسئله ثابت و بدون تغییر باشد.
- مقیاس بندی ضعیف (weak scaling): اشاره به این دارد که زمان حل مسئله چگونه با تعداد پردازنده‌ها تغییر می‌کند؛ درحالی که اندازه مسئله در هر پردازنده ثابت و بدون تغییر است.
نظریه پیچیدگی محاسباتی
قفل (رایانه)
نواس‌کیوال
رایانش موازی