راه مقابله با فشار زیاد به سرور چیست؟ وقتی کمر سرور زیر بار هجوم کاربران خم میشود، مسلماً سرویس هم دچار اختلال خواهد شد و این اتفاق خوبی نیست! به همین خاطر است که به سازوکاری مثل لود بالانسینگ نیاز داریم.
Load Balancing با تقسیم بار بین سرورهای مختلف، مانع از وارد آمدن فشار سنگین به یک تک سرور میشود. در این مقاله، میخواهیم راجعبه لودبالانسرها و فرایند لودبالانسیگ صحبت کنیم.
اول بیایید یک تعریف کاملتر از این مفهوم داشته باشیم و بعد برویم سراغ باقی بخشها.
منظور از لود بالانسینگ (Load Balancing) چیست؟
وقتی فشار ترافیک ورود به یک سرور از حد مجاز بیشتر میشود، آن سرور نمیتواند عملکرد خوب خود را حفظ کند و با مشکل مواجه خواهد شد؛ در چنین شرایطی باید از چند سرور استفاده کرد تا بار بین آنها تقسیم شده و از پایین آمدن سرور و از دسترس خارج شدن سایت، جلوگیری شود.
لود بالانسینگ نام تکنیکی است که با هدف توزیع بار شبکه روی سرورهای مختلف به کار گرفته میشود. با انجام این کار، یعنی تقسیم بار ترافیکی، سرورها تحت فشار بیش از حد قرار نمیگیرند و همۀ آنها میتوانند بهترین عملکرد ممکن را از خود نشان بدهند.
یک اپلیکیشن یا سایت را که میلیونها بازدیدکننده دارد، در نظر بگیرید. در برخی زمانها، ترافیک ورودی سایت یا اپلیکیشن خیلی بالا میرود و اینکه سرورها بتوانند در پاسخ درخواست هر کاربر، دقیقاً محتوایی که دنبال آن میگردد را ارائه کنند، به کاری چالشبرانگیز تبدیل میشود.
به همین خاطر است که بیشتر اپلیکیشنها و سایتهای بزرگ، از چندین سرور بهصورت همزمان استفاده میکنند و با اضافه کردن لود بالانسر، نمیگذارند هیچکدام از آنها زیر فشار ترافیک سنگین کمر خم کنند!
بد نیست در بخشی کوتاه، تعریفی برای خود لود بالانسر هم ارائه کنیم.
⭐ محتوای مرتبط: CPU چیست؟ با مغز متفکر سیستم آشنا شوید! |
لود بالانسر چیست؟
لود بالانسر سیستمی است که وظیفۀ تقسیم ترافیک بین سرورها را بر عهده میگیرد؛ یعنی وقتی میزان ترافیک ورودی زیاد میشود، لود بالانسر بار شدید را بین چند سرور تقسیم میکند تا همۀ سرورها بتوانند به بهترین شکل کار خود را انجام دهند و سایت پایین نیاید!
لودبالانسرها که میتوانند سختافزار، نرمافزار یا مبتنیبر ابرها باشند، بین مرورگر بازدیدکننده و سرورها قرار میگیرند و مثل یک مامور پلیس راهنماییورانندگی، هر بازدیدکننده را به سروری که سرش خلوتتر است، هدایت میکنند.
این سیستمها علاوهبر اطمینان از دسترسپذیری سایت، امکان مقیاسپذیری و گسترش فعالیت را هم به وجود میآورند.
اجازه دهید یک مثال بزنیم.
فرض کنید بعد از انتخاب اجناس مورد نیاز در یک فروشگاه زنجیرهای، به سمت خروجی میروید؛ جایی که ۸ صندوق وجود دارد و باید از طریق یکی از آنها، پول خرید خود را بپردازید. قاعدتاً اگر همۀ مشتریها روی عبور از یک صندوق اصرار داشته باشند، صف خیلی طولانی خواهد شد و علاوهبر اینکه مشتریها باید کلی منتظر بمانند، صندوقدار آن یک خط ممکن است تمام تمرکزش را از دست بدهد!
حالا فرض کنید مدیریت فروشگاه یک نفر را مأمور کند که جلوی صندوقها مستقر شود و بسته به شلوغی هر صندوق، مشتریهای جدیدی که قصد تسویه حساب دارند را به خلوتترین خط بفرستد؛ به این ترتیب، هم زمان انتظار تقریبی هر مشتری به حداقل میرسد، هم صندوقدارها میتوانند کار خود را به شکلی ایدئال انجام دهند.
این دقیقاً همان وظیفۀ لود بالانسینگ است و شخص مأمورشده از طرف مدیریت هم نقش لود بالانسر را بازی میکند.
تا اینجا اطلاعات کامل راجعبه کلیت لود بالانسینگ را به دست آوردیم و فهمیدیم لود بالانسر چیست. در بخش بعدی، با نگاهی موشکافانهتر، طرز کار چنین سیستمی را واکاوی خواهیم کرد.
⭐ محتوای مرتبط: دیتابیس (database) چیست؟ خانهای امن برای دادهها و اطلاعات مهم! |
اگر سرور لود بالانسر نداشته باشد چه میشود؟
نبود لود بالانسر یعنی تمام ترافیک ورودی به سمت یک سرور فرستاده میشود؛ چنین اتفاقی باعث رخ دادن یک سری مشکلات جدی خواهد شد:
- افزایش داونتایم با بالا رفتن فشار به سرور: دریافت پاسخهای بیشتر از توان سرور، منابعش را بیش از حد درگیر میکنند و باعث کندی، یا حتی پایین آمدن آن خواهند شد.
- نبود جایگزین: وقتی تنها سرور فعال از دسترس خارج شود، سایت یا اپلیکیشن کلاً پایین میآید! لود بالانسرها با تقسیم بار نمیگذارند چنین اتفاقی بیفتد.
- محدودیت در توسعهپذیری: چون اضافه کردن سرور جدید و تقسیم بار با آنها ممکن نیست، امکان توسعۀ زیرساخت موقع افزایش پیشبینیشده یا نشدۀ ترافیک وجود ندارد.
- استفادۀ نامتقارن از منابع سرورها: حتی اگر سرور دیگری هم در شبکه باشد، بدون لود بالانسر، تمام بار ورودی روی دوش یک سرور میفتد و منابع دیگر سرورها بلااستفاده خواهند ماند.
بگذارید اینطوری بگوییم:
نبود لود بالانسر به معنای آسیبپذیری سیستم، امکان مقیاسپذیری خیلی محدودتر و افزایش احتمال از دسترس خارج شدن است!
حالا که فهمیدید لود بالانسر چیست و نبودش چه مشکلاتی ایجاد میکند، بیایید نگاهی بیندازیم به کارهایی که لود بالانسر انجام میدهد تا عملکرد سرورها و سایت (یا اپلیکیشن) را بهبود ببخشد.
سازوکار لود بالانسینگ چگونه است؟
چند خط بالاتر توضیح دادیم که لود بالانسر هم میتواند سختافزاری باشد، هم نرمافزاری! با این اوصاف، پیادهسازی چنین سازوکاری هم به دو شکل قابل انجام است.
انواع سختافزاری ادوات فیزیکیای هستند که در محل قرارگیری سرورها نصب و نگهداری میشوند. در نقطۀ مقابل، انواع نرمافزاری، مثل هر برنامۀ دیگری روی سرور یا شبکۀ ادارهکنندۀ آن نصب میشوند و کار توزیع بار را مدیریت میکنند.
در هر دو صورت، لود بالانسر که گفتیم در میانۀ راه مینشیند و مثل یک ایست بازرسی عمل میکند، بعد از بررسی هر درخواست ورودی، بهترین سروری که توانایی ارائۀ بهترین پاسخ را دارد، شناسایی خواهد کرد. یادتان باشد هدف اصلی، جلوگیری از واردن آمدن فشار بیش از حد به سرورها است؛ پس لود بالانسر درخواستها را به سرورهای مختلفی که تحت کنترل خود دارد، هدایت میکند.
البته که کار لود بالانسر بعد از تحویل درخواست به سرور تمام نمیشود؛ چراکه این میانجی در رابطه با برگرداندن پاسخ به کاربر هم مسئولیت دارد! بعد از تحویل پاسخ، آدرس آیپی کاربر با سروری که به آن متصل شده است، هماهنگ میشود؛ با این کار، کاربر و سرور میتوانند تا رفع کامل نیاز کاربر، به یکدیگر متصل بمانند.
همانطور که گفتیم، وظیفه و هدف اصلی لود بالانسینگ، جلوگیری از افت کیفیت تجربۀ کاربری، بهخاطر از دسترس خارج شدن سرورها است؛ پس وقتی جهشی پیشبینینشده (یا پیشبینیشده) در ترافیک رخ میدهد، لود بالانسر میتواند سرورهایی که شاید در حالت استراحت بودند را وارد شبکه کند و از آنها برای ارائۀ خدمات به ترافیک ورودی کمک بگیرد. از طرفی دیگر، اگر ترافیک از حالت معمول کمتر شود، لود بالانسر میتواند برخی سرورها را به مرخصی بفرستد و در مصرف منابع صرفهجویی کند.
کلاً این سازوکار خاصیتها و فواید زیادی دارد که در بخش بعدی آنها را بررسی خواهیم کرد؛ اما قبل از آن، اجازه دهید به یک نکتۀ مهم بپردازیم.
گفتیم که لود بالانسرها دو نوع دارند: سختافزاری و نرمافزاری؛ باید بدانید که علاوهبر این دو نوع، طی سالهای گذشته، ارائهدهندگان سرویسهای ابری مثل AWS و Microsoft Azure هم شروع کردهاند به ارائۀ چنین سرویسی در قالب خدمات ابری.
برویم برای ادامۀ مقاله.
⭐ محتوای مرتبط: API چیست؟ هر آنچه باید درباره API بدانید (به زبان ساده) |
وظایف اصلی لود بالانسر چیست؟
لود بالانسر، چه سختافزار باشد، چه نرمافزار و چه یک سرویس مبتنیبر ابر، این کارها را انجام میدهد تا به مسئولیت اصلیاش، یعنی لود بالانسینگ را به بهترین شکل رسیدگی کند:
- توزیع ترافیک: تقسیم ترافیک ورودی بین سرورهای مختلف با هدف جلوگیری از وارد شدن فشار شدید به سرورها.
- دسترسپذیری بالا: اطمینان از عملکرد ایدئال سرویس، حتی در صورت پایین آمدن یک یا چند سرور.
- قابلیت مقیاسپذیری: ایجاد امکان توسعۀ سیستم با اضافه کردن سرورهای جدید به شبکه جهت مدیریت ترافیکهای سنگینتر.
- بهینهسازی منابع: استفادۀ بهینه از منابع تمام سرورها و اطمینان از اینکه یک سرور زیر بار شدید نباشد، درحالیکه دیگری کاملاً بیکار است!
- مانیتورینگ سلامت سرورها: بررسی عملکرد سرورها با هدف ارسال درخواست به بهترین گزینه و شناسایی ایرادات احتمالی در شبکه.
- مدیریت SSL/TLS: رمزنگاری و رمزگشایی ترافیک و سبک کردن کار سرور مسئول پاسخگویی به درخواست کاربر.
برای کسب اطلاعات بیشتر دربارۀ گواهیهای SSL و نسخههای جدیدتر آنها، یعنی گواهیهای TLS، مقالۀ «گواهی SSL چیست و چه کاربردی دارد؟» را بخوانید.
اگر مطمئن نیستید که این نوع سیستمها واقعاً به کار شما میآیند یا نه، حتماً بخش بعدی را هم بخوانید.
چه زمانی از لود بالانسر استفاده کنیم؟
بهطور کلی، لود بالانسینگ در ۳ حالت به دردتان میخورد که اینجا راجعبه آنها صحبت خواهیم کرد:
وقتی ترافیک سایت یا اپلیکیشن بالا میرود
افزایش ترافیک سایت یعنی زیرساخت قدیمی که شاید به یک سرور متکی بود، دیگر جوابگو نباشد! پس چارهای نمیماند جز استفادۀ همزمان از چند سرور جهت رسیدگی بینقص به درخواستها و خلق تجربۀ کاربری خوب.
میدانید که برای تقسیم بار ترافیک بین سرورها، به لود بالانسر نیاز خواهید داشت. اگرنه ممکن است با صد سرور هم کارتان راه نیفتد و سایت یا اپلیکیشن با افت شدید عملکرد مواجه شوند!
وقتی یک سرور جوابگو نیست و نیاز به چند سرور دارید
برخی سایتها یا اپلیکیشنها آنقدر سنگین هستند که از همان شروع فعالیت، باید به فکر بهرهگیری از چندین سرور باشید؛ چندین سروری که یک لود بالانسر جلوی آنها قرار میگیرد و ترافیک ورودی را بین آنها تقسیم میکند.
برای سایتهای حساسی که قطعی حتی چند ثانیهای ضرر زیادی دارد
ممکن است حوزۀ فعالیتتان بهگونهای باشد که کوتاهترین قطعیها هم به ضررهای کمرشکن منجر شوند؛ در چنین شرایطی، حتماً سراغ زیرساختهای چند سروری بروید که به لود بالانسر مجهز هستند.
همانطور که گفتیم، لود بالانسرها داونتایم را عملاً به صفر میرسانند و نمیگذارند سایت یا اپلیکیشن حتی ۱ ثانیه هم پایین بیاید.
خوب است با انواع مختلف این سیستمها هم آشنا باشید.
انواع لود بالانسرها
بهطور خلاصه، چهار نوع لود بالانیسنگ داریم که عبارتند از:
- لود بالانسرهای شبکه (Network Load balancers): در سطح شبکه کار میکنند و هدفشان بهینهسازی ترافیک و کاهش تأخیر در شبکههای محلی و گستردهتر است.
- لود بالانسرهای اپلیکیشن (Application Load Balancers): مناسب APIها و وباپلیکیشنها هستند و ترافیک را براساس پارامترهایی مثل URLها، هدرهای HTTP و اتصالات SSL بین سرورها تقسیم میکنند.
- لود بالانسرهای مجازی (Virtual Load Balancers): در محیطهای مجازیسازیشده مثل کانتینرها و ماشینهای مجازی به کار گرفته میشوند.
- لود بالانسرهای سرورهای جهانی (GSLB): با اتصال هر کاربر به نزدیکترین سرور که عملکرد خوبی دارد، درخواستها را بین سرورهای واقعشده در نقاظ جغرافیایی مختلف تقسیم میکنند.
لود بالانسینگ چه مزایایی دارد؟
بالاتر که پاسخ سؤال Load Balancing چیست را میدادیم، احتمالاً فهمیده باشید جلوگیری از فشار بیش از حد به سرور تا چه حد اهمیت بالایی دارد؛ اما خب علاوهبر آن، این سازوکار مزیتهای دیگری هم دارد که اینجا با آنها آشنا خواهید شد.
مقیاسپذیری راحتتر
کمی قبلتر گفتیم که لود بالانسر میتواند در موقع نیاز، وقتی حجم ترافیک ورودی افزایش مییابد، تعداد سرورهای پاسخدهندۀ را افزایش دهد؛ همچنین، بعد از فروکش کردن تقاضاها، این سیستم امکان کاهش سرورهای پاسخدهنده را هم دارد؛ این تعریف ساده و کامل مقیاسپذیری است که بهلطف لود بالانسینگ خیلی راحت انجام میگیرد.
امنیت بیشتر
لود بالانسری که گفتیم در دم دروازههای ورودی قرار میگیرد و وظیفۀ هدایت ترافیک به سرورهای مختلف را دارد، میتواند به سیستمهای امنیتی مجهز شود و امنیت کل شبکه را بالاتر ببرد!
گواهی SSL، فایروالهای وباپلیکیشن یا WAF، احراز هویت چند مرحلهای و…، از جملۀ رایجترین قابلیتهای امنیتیای هستند که میتوان آنها را به لود بالانسر اضافه کرد.
ضمناً، اگر با ماهیت حملات DDoS آشنایی داشته باشید، میدانید چنین سازوکاری چقدر میتواند در مقابله با آن مؤثر عمل کند! اگر دوست دارید اطلاعات بیشتری از این نوع حملات رایج سایبری به دست بیاورید، مقالۀ “حمله DDoS چیست و چگونه انجام میشود؟” را بخوانید.
⭐ محتوای مرتبط: پروتکل (Protocol) چیست و چگونه کار میکند؟ |
دسترسیپذیری بیشتر
منظور این است که عملکرد لود بالانسرها باعث میشود سایت (یا اپلیکیشن) در زمانهای بیشتری در دسترس باشد! قبل از اینکه سروری از لود بالانسر ترافیک دریافت کند، سلامتش کاملاً چک میشود؛ بنابراین، اگر سروری در شرف پایین آمدن باشد، یا اینکه از قبل بهمنظورهای مختلف پایین آمده باشد، سازوکار محشری به اسم لود بالانسینگ، ترافیک را از آنها دور کرده و به سمت سرورهای سرحال و روپا میفرستد.
اینطوری میشود که لود بالانسر میتواند زمان در دسترس بودن سرویس را برای کاربران بیشتر کند.
عملکرد بهتر
گفتیم که توزیع بار و جلوگیری از وارد شدن فشار شدید به یک سرور، کمک میکند سرورها به بهترین شکل کار خود را انجام دهند و این یعنی ارائۀ بهترین عملکرد ممکن!
توزیع بار به کاهش زمان پاسخدهی و البته کاهش تأخیر منجر میشود؛ دو عاملی که بالا بودن آنها نشاندهندۀ ضعف عملکردی سیستم است و کاربران را کلافه میکند.
⭐ محتوای مرتبط: NAT چیست؟ آشنایی با ناجی شبکه و رازورمزهای آن بهزبان ساده |
صرفهجویی در مخارج
Load Balancing روی استفادۀ کاملاً بهینه از منابع متمرکز است و به این ترتیب، میتواند استفاده از ادوات سختافزاری را به میزان چشمگیری کاهش دهد؛ کاهشی که سرانجامش صرفهجویی در مخارج است.
این هم از مزایای اصلی سازوکار مورد بحثمان. حالا بیایید با انواع الگوریتمهای آن هم آشنا شویم.
الگوریتمهای رایج در لود بالانسینگ چیست؟
اول ببینیم تعریف الگوریتم لود بالانسینگ چیست؟
منظور مجموعه قوانینی هستند که لود بالانسر باید از آنها پیروی کرده و براساس آنها، هر کاربر را به سروری ایدئال که میتواند در هر لحظه بهترین عملکرد را از خود نشان دهد، هدایت کند.
بهطور کلی، الگوریتمهای این سازوکار به دو دسته تقسیم میشوند و هر دسته هم شامل چند زیرمجموعه میشود. در این قسمت، همۀ الگوریتمها را بررسی خواهیم کرد.
لود بالانسینگ استاتیک
این دسته از الگوریتمها پیرو ضوابطی ثابت هستند و کاری به وضعیت لحظهای سرورها ندارند!
الگوریتم Round Robin
این الگوریتم از DNS استفاده کرده و ترافیک را بهصورت متوالی و طی یک روال منظم، بین سرورهای مختلف توزیع میکند؛ یعنی بعد از ارسال کاربری به سرور اول، کاربرهای بعدی به سرور دوم، سوم و… فرستاده میشوند؛ این روال ادامه پیدا میکند تا سرورها به انتها برسند و دوباره سرور اول میزبان ترافیک خواهد شد.
همانطور که میبینید، این الگوریتم بسیار ساده و پایهای است و اصلاً برایش مهم نیست که هر سرور در هر لحظه چه وضعیتی دارد.
الگوریتم Weighted Round Robin
این الگوریتم نسخۀ پیشرفتهتر Round Robin محسوب میشود. در این متد، میتوانید به سرورها وزن بدهید؛ به بیان سادهتر، بسته به توانایی هر سرور و ظرفیتی که دارد، اولویتی برای آن تعیین میکنید؛ پس علاوهبر DNS که بالاتر از آن گفتیم، وزن (یا Weight) که به هر سرور میدهید، در روال توزیع بار توسط لود بالانسر تأثیر میگذارد.
⭐ محتوای مرتبط: کلاینت چیست؟ انواع Client و ربط آن به سرور |
الگوریتم هش IP
در صورت استفاده از این الگوریتم، لود بالانسر موظف به اجرای برخی محاسبات کامپیوتری خواهد بود؛ محاسباتی که با نام هشینگ شناخته میشوند. نتیجۀ این محاسبات یک عدد است که براساس آن، سرور گیرندۀ درخواست مشخص خواهد شد.
برویم سراغ دستۀ دوم الگوریتمها.
لود بالانسینگ داینامیک
برخلاف الگوریتمهای استاتیک که تحت هر شرایطی ثابت هستند، الگوریتمهای داینامیک کمی هوشمندانهتر عمل میکنند؛ چون در هر لحظه، وضعیت هر سرور را بررسی میکنند تا در فرایند توزیع بار تصمیمهای بهتری بگیرند. اینها معروفترین الگوریتمهای داینامیک لود بالانسینگ هستند:
الگوریتم Least Connections
این الگوریتم تمام سرورها را بررسی کرده و بعد از شناسایی آن موردی که کمترین اتصال باز را دارد، ترافیک را به سمت همان سرور میفرستد. در این الگوریتم، فرض بر این است که همۀ انواع اتصالها فشار یکسانی وارد میکنند و نیازمند قدرت پردازشی مشابهی هستند.
الگوریتم Least Response Time
اول باید Response Time را تعریف کنیم؛ منظور مدتزمانی است که طول میکشد تا یک سرور درخواست را دریافت کند و بعد از پردازش آن، پاسخ مناسب را به کاربر برگرداند.
در این الگوریتم، لود بالانسر علاوهبر بررسی تعداد اتصالهای برقرار و فعال، عدد Response Time را هم لحاظ میکند و ترافیک را به سمت آن سروری میفرستد که میتواند در کوتاهترین زمان ممکن، پاسخ کاربر را به او بدهد. اگر سرعت بالای سایت یا اپلیکیشن اهمیت خیلی زیادی دارد، استفاده از این الگوریتم را به شما پیشنهاد میکنیم.
⭐ محتوای مرتبط: ماشین مجازی (vm) چیست؟ آشنایی با کلید ورود به دنیای ابری! |
الگوریتم Weighted Least Connection
با الگوریتم Weighted Least Connection، ادمین میتواند با فرض اینکه برخی سرورها توانایی مدیریت درخواستهای بیشتری را دارند، برای هرکدام وزن تعیین کند.
الگوریتم Resource-based
لود بالانسر بهصورت لحظهای هر سرور را بررسی کرده و منابع آزاد هرکدام را شناسایی میکند. این الگوریتم به نرمافزارهای خاصی نیاز دارد که اصطلاحاً با نام Agent شناخته میشوند. این نرمافزارها CPU و Memory آزاد هر سرور را محاسبه کرده و آن را ثبت میکنند.
لود بالانسری که از این الگوریتم استفاده میکند، قبل از هدایت ترافیک به سمت سرور ایدئال، وضعیت را از Agent استعلام میکند تا ببیند کدام سرور منابع آزاد بیشتری دارد و میتواند بهتر به درخواستها پاسخ دهد.
آمادۀ جمعبندی مقاله هستید؟
لود بالانسینگ: سازوکاری نجاتبخش و البته ضروری!
سایتها، اپلیکیشنها و کلاً همۀ سیستمهایی که با ترافیک خیلی زیاد سروکار دارند، بی بروبرگرد به لود بالانسینگ نیاز خواهند داشت. همانطور که در این مقاله توضیح دادیم، این سازوکار وظیفۀ مهم توزیع بار بین سرورهای مختلف را بر دوش میکشد؛ کنندۀ کار هم لود بالانسر نام دارد و نمیگذارد بهخاطر شلوغی بیش از حد شبکه، سرورها پایین بیایند و سرویس از دسترس خارج شود.
علاوهبر تعریف این مفهوم و لود بالانسر، راجعبه مزایای این سیستم و البته الگوریتمهای رایج آن هم صحبت کردیم تا بتوانیم تمام اطلاعاتی که در این باره نیاز دارید را در اختیارتان قرار دهیم. امیدواریم توانسته باشیم به هدف خود برسیم.
اگر همچنان پرسشی در این زمینه دارید، همین زیر منتظرتان هستیم.
منابع: IBM | Cloud Flare | AWS
دیدگاه ها
اولین نفری باشید که دیدگاه خود را ثبت می کنید