Scalability چیست؟
Scalability به معنی توانایی یک سیستم برای پاسخگویی به درخواستها، زمانی که تعداد آنها افزایش پیدا میکند، بدون تاثیر بر عملکرد سرویس یا برنامه است. یک سیستم scalable باید بتواند در زمانی که میزان درخواستها افزایش پیدا میکند، یا از طریق استفاده از منابع موجود پاسخ درخواستها را بدهد یا این قابلیت را داشته باشد که متناسب با نیاز، به سرعت توسعه پیدا کند.
توسعهی عمودی یا vertical scalability چیست؟
سیستمهای scalable میتوانند براساس نیاز، توسعهی افقی یا عمودی داشته باشند. فرض کنید که یک application روی یک سرور در حال اجرا است و منابعی که به این application اختصاص پیدا کردهاست (مانند حافظهی رم، تعداد هستههای پردازنده و ...)، برای پاسخگویی به نیازهای این application کافی هستند. اگر تعداد درخواستها افزایش پیدا کند و میزان منابع ثابت باشد، یا با کند شدن سرعت پاسخگویی مواجه خواهیم شد یا اینکه برنامه قادر نخواهد بود به بعضی از درخواستها پاسخ بدهد. در این شرایط، افزایش منابع در دسترس برنامهی در حال اجرا، میتواند این مشکل را تا حدی برطرف کند. به این نوع توسعه، توسعهی عمودی گفته میشود.
توسعهی افقی یا horizontal scalability چیست؟
توسعهی عمودی ممکن است نیاز ایجاد شده در اثر افزایش بخشی از درخواستها را برطرف کند ولی در شرایطی که برای نمونه، تعداد درخواستها در زمان کمی دو برابر شود، اضافه کردن رم یا پردازنده تاثیری نخواهد داشت. زیرا در این شرایط، درواقع خود application سبب ایجاد bottleneck شده است و حتا اگر تمام منابع موردنیاز برای پاسخگویی به درخواستها را داشته باشد، ولی باز هم در اجرا به مشکل خواهد خورد. در این شرایط لازم است تعداد بیشتری از این application روی سرورهای دیگری اجرا شوند و با استفاده از یک سیستم توزیع بار یا load balancing، درخواستها را بین برنامهها پخش کرد. به این توسعه که شامل افزایش تعداد برنامههای در حال اجرا یا افزایش سرورها است، توسعهي افقی گفته میشود.
Elasticity چیست؟
زمانی که نیاز به منابع بیشتر ایجاد میشود، از دو راه میتوان میزان منابع را افزایش داد. راه اول، این است که کسی که سیستم را مدیریت و نگهداری میکند (عمومن sysadmin)، با مشاهدهی افزایش تعداد درخواستها، میزان منابع در اختیار برنامه را افزایش بدهد یا اگر نیاز بود، instanceهای بیشتری از برنامه را اجرا کند.
راه دوم این است که افزایش یا کاهش منابع یا تعداد برنامههای در حال اجرا، بهشکل پویا (بر اساس نیاز) و خودکار انجام شود. به این ویژگی elasticity گفته میشود و یکی از راههای پیادهسازی یک سیستم scalable است.
Scalability چه اهمیتی دارد؟
اولین اهمیت scalable بودن یک سیستم، تاثیر آن بر کیفیت سرویس ارایه شده است. همانطور که بیان شد، اگر نیازهای یک سرویس به منابع افزایش پیدا کند و منابع مورد نیاز تامین نشود، میتواند باعث قطع شدن یا کند شدن سرویس شود.
از طرفی تعدادی از ارایه دهندگان سرویس، برای جلوگیری از مشکل بهوجود آمده در اثر افزایش درخواستها، معمولن منابعی بیشتر از نیاز خود خریداری میکنند. این کار ممکن است در شرایطی از ایجاد مشکل جلوگیری کند، اما در عمل هزینهی زیادی برای منابعی صرف میشود که در بیشتر موارد یا مورد استفاده قرار نمیگیرند، یا زمانهای کمی به آنها نیاز است. استفاده از یک سیستم scalable به جای راه حل قبل، میتواند هزینهها را تا میزان زیادی کاهش بدهد.