Dev Stream
Dev Stream
خواندن ۵ دقیقه·۴ سال پیش

مقیاس پذیری(Scalability)


نوشته شده توسط: علی آخی

سلام به همگی بعد از یه وقفه ی تقریبا دوماهه در خدمت شما هستیم!

این بار با انرژی بیشتر و خب کلی ایده ی باحال و جالب که به کمک شما اونا رو پیش می بریم (:

و اینکه من علی آخی هستم یکی از اعضای گروه Dev Stream که به تازگی فعالیتمون رو شروع کردیم و امیدوارم که ما بتونیم به کمک شما این حرکت رو ادامه بدیم!

و یه خبر خوب هم دارم، البته دوتا (:

اول اینکه فایل کامل مقاله ی NGINX به زودی داخل کانال تلگرام قرار می گیره و اینکه این مقاله به اسم گروه Dev Stream هستش و نویسندگان و منابع آن کاملا مشخص هستن!

دوم اینکه به زودی یه مقاله دیگه رو شروع می کنیم (: فعلا در مورد موضوعش و چند و چونش چیزی نمیگم!

و اما Scalability

این واژه ی تخصصی به معنای -مقیاس پذیری- است.

تعریف این واژه ی فنی به صورت زیر است !

در علم ارتباطات راه دور و مهندسی نرم‌افزار مقیاس‌پذیری (به انگلیسی: Scalability)، ویژگی مطلوبی از یک سامانه، شبکه یا فرایند است که به توانایی آن برای پاسخگویی به افزایش میزان بار کاری به سهولت دلالت می‌کند به زبان ساده میزان آمادگی سیستم را برای افزایش بار کاری را نشان می‌دهد بد نیست که به اصطلاح Load Scalability هم اشاره کنیم.

در واقع توانایی دردسترس بود، برای پاسخ به درخواست ها را مقیاس پذیری میگیم که البته خیلی تعریف سخت و گنگی هست و من میخوام براتون به طور ساده و قابل فهم بیانش کنم. اما قبل از اون میخوام بپرسم که اصلا چرا ما به مقیاس پذیری نیاز داریم و چرا باید ازش استفاده کنیم؟!

به لحاظ تکنیکال میزان قدرت ارائه دهنده ی سرویس با تعداد درخواست ها برای سرویس رابطه ی مستقیم داره. مثلا اگر سایتی مثل آمازون توی یک روز خیلی خاص مثل Black Friday که خب مشتری هاش خیلی بیشتر از سایر روز ها هستن و به خاطر اعتبار و صد البته قانون، باید به همه ی مشتری هاش خدمات شایانی ارائه بده. پس باید در برابر حجم بالای درخواست ها، مقیاس پذیری بالایی داشته باشه پس مقیاس پذیری یک پاسخ خیلی منطقیه، حالا این مقیاس پذیری در هر سطحی قابل تعریف و دفاع است و چه منابع سخت افزاری و چه منابع نرم افزاری و یاهر موضوعی که به بحث کارایی اهمیت میده.

اما این پاسخ منطقی به افزایش درخواست ها به چه شکلیه یا بهتر بگم استراتژی ما برای scalability چیه؟

برای توضیح ساده تر بیاین یه مثال خیلی ملموس و باحال بزنیم:

فرض کنید شما مسئول سلف سرویس دانشگاه هستید و توی تعطیلات تابستون به سر می برین و یه روز صبح از طرف اداره ی رفاه دانشجویان با شما تماس می گیرن و میگن که قراره ظرفیت ورودی دانشگاه از این ترم بیشتر بشه و باید ظرفیت سلف رو برای سرویس دادن به تعداد بیشتری دانشجو آماده کنید! خب شما چه کار می کنید؟! راه حل این مشکل چیه؟!

اول یه نفس عمیق می کشیم و میگیم کاری نداره که (:

خب باید تعداد خدمه ی آشپز خونه و سالن بیشتر بشن و منابع و مواد اولیه هم باید افزایش پیدا کنه. اما یک مشکل بزرگ داریم!!!!

اگر تعداد دانشجو ها بیشتر بشه باید سرعت سرویس دادن هم زیاد بشه و گرنه صدای دانشجو های بیچاره درمیاد و حق هم دارن کلاسشون دیر میشه! راه حل چیه؟! چه باید کرد؟!!

خب کاری نداره دو راه حل کلی وجود داره:

۱- تعداد گیت های توزیع رو بیشتر کنیم! مثلا اگه ۵ گیت داریم تعداد اونارو به نسبت دانشجوها بیشتر کنیم مثلا ۷ تا

۲-تعداد افرادی که داخل هر گیت سرویس میدن رو بیشتر کنیم! مثلا اگه توی هر گیت ۷ نفر هستن که خدمت رسانی میکنن تعدادشون رو به نسبت دانشجوها بیشتر کنیم مثلا هر گیت ۱۰ نفر

اما اگه تعداد دانشجوها بیشتر از انتظار شد چی ؟! خب هم تعداد گیت ها را بیشتر می کنیم و هم تعداد خدمه ی هر گیت رو بیشتر می کنیم!

واینگونه شما مشکل رو حل می کنید خیلی ساده و سریع و بی درد سر(:

حالا اگه بخوایم به طور تخصصی تر موضوع رو بررسی کنیم:

برای مقیاس پذیر شدن یک پدیده به دو یا شایدم سه روش باید عمل کرد:

۱-روش Vertical scaling or scaling up:

مثل روش اضافه کردن خدمه در مثال فوق بود.

در این روش ماتوان ارائه دهنده ی سرویس را افزایش می دهیم مثل افرایش cpu , ram,... که به لحاظ سخت افزاری scaling را انجام می دهیم!


۲-روش Horizontal scaling or scaling out:

مثل اضافه کردن گیت های بیشتر در مثال فوق بود.

در این روش با اضافه کردن نود های سرویس دهنده به طور هماهنگ و پیوسته به نود های قبلی عمل scaling را انجام می دهیم!


۳- روش Diagonal Scaling:

این روش تلفیقی است یعنی همزمان از روش Horizontal scaling و Vertical scaling استفاده می شود.


این مطلب ادامه دارد...

مهندسی نرم افزارwebload balancerserverscalability
جایی برای یادگرفتن و گپ برنامه نویس ها
شاید از این پست‌ها خوشتان بیاید