وقتی که ما یک کسبوکار اینترنتی را راهاندازی کرده باشیم و بخواهیم سایت خود را در بهترین حالت ممکن نگه داریم یکی از مهمترین مواردی که باید به آن توجه داشته باشیم سرعت سایت ما میباشد و باید در نظر داشت که ابزارهای مختلف و زیادی برای این کار وجود دارد. شما میتوانید از سیستمهای توزیع محتوا یا همان CDNها، کشهای مختلف مانند کش لایت اسپید و حتی افزونههای کَشی مانند WP Rocket برای اینکه یک سایت سریع داشته باشید استفاده کنید، اما در صورتی که بخواهید بهصورت ریشهای مشکلات سایت خود را برطرف کنید، میزبانی و سرورهای هاستی که سایت شما را برایتان بالا نگه میدارند، جایی است که باید بهسراغ آن بروید. برنامهها و مکانیزمهای زیادی وجود دارد که برای این کار مورد استفاده قرار میگیرد و در این مقاله با بررسی اینکه HAProxy چیست قصد داریم در مورد یکی از این برنامهها صحبت کنیم.
در رابطه با اینکه HAProxy چیست باید بگوییم با یکی از محبوبترین و موثرترین برنامههای سمت سرور طرف هستیم که میتواند کنترل ترافیک سرور را بر عهده گرفته و کار را بهصورتی پیش ببرد که درخواستهای زیاد باعث این نشوند که در کارکرد کلی سرورها و سایت اختلالی ایجاد شود. قبل از اینکه بهصورت مستقیم HAProxy را بررسی کنیم لازم است که کمی در مورد سرورهای اینترنتی و روشهایی که برای کار کردن دارند صحبت کنیم.
مکانیزم کاری سرورها
سرورهای اینترنتی از مهمترین و اصلیترین نودها در اینترنت هستند. در واقع اینترنت شبکهای از شبکهها است که از یک بستر ارتباطی که المانهای مختلف را به هم متصل کرده است تشکیل شده است. این المانها نودهای شبکه نامیده میشوند که موارد متعددی مانند سرورها، سوئیچها، روترها، گیتویها و درگاههای ارتباطی بین بسترهای مختلف و غیره را شامل میشوند. سرور را میتوان یکی از اصلیترین این نودها دانست که کاربردهای بسیار متعددی را ارائه میکند. در واقع سرورها کامپیوترهایی بسیار قوی بوده که میتوان از آنها هر کاربردی را گرفت.
در مورد کارکرد اینترنت همه اطلاعاتی داریم و در واقع در این زمینه باید گفت که محوریت اصلی اینترنت و زیرساختی که دارد یک پروتکل سراسری به نام TCP/IP است. این پروتکل مجموعه قواعدی را ارائه میکند که بر اساس آن تمامی اطلاعاتی که میخواهند در اینترنت ارائه شوند، برای اینکه از سروری به سرور دیگر و از کاربری به کاربر دیگر بروند، لازم است که بهصورت بستههایی کوچک به نام پکت درآمده و در این شبکه جاری شوند. وقتی که کاربری بخواهد از سایتی استفاده کند، کاری که انجام میشود این است که پکتهایی که درخواست کاربر را برای دسترسی به سایت دارند، به سمت سرورهایی که سایت روی آنها قرار گرفته است روانه میشود.
این درخواست وقتی که در مقصد به سرور موردنظر برسد، در همان جا مورد بررسی و بازبینی قرار گرفته و وبسرورها با اتصال به پایگاه داده سایت، آنچه که کاربر برای وی نیاز داشته باشد را به سمت او ارسال میکنند. در واقع میتوان گفت که پاسخ درخواست ارسالی با اطلاعات موردنیاز توسط سرورها داده میشود. هرچند که شما سایت را با هستهای مجزا و یک برنامه کامل طراحی کردهاید، اما باز هم آنچه که قرار است کار را برای شما انجام دهد و این اطلاعات را از سایت در اختیار شما بگذارد، وبسروری است که روی سرورها قرار گرفته است.
از آنجا که سرورهای اینترنتی هزینههای زیادی دارند و منابع آنها هم بالا میباشد، عموما روی یک سرور چندین سایت راهاندازی شده که به این مکانیزم هاست اشتراکی گفته میشود، پس بهطور معمول تعداد درخواست هایی که روی سرور شما وجود دارد برای چندین سایت بوده و تعداد آنها بالا خواهد رفت. در صورتی که تعداد این درخواستها از حدی بیشتر شود سرورها دیگر کشش این موضوع را نخواهند داشت که به تمام آنها پاسخ دهند و وبسرور دچار افت کیفیت میشود و بعضی از کاربران نمیتوانند به اطلاعاتی که به آنها نیاز دارند دسترسی داشته باشند.
در اینجا بالا بودن بار کاری میتواند دردسرهای زیادی را با خود داشته باشد و لازم است که این بار کاری کنترل شود تا سایت شما بتواند بهترین کیفیت موردنیاز برای خود را ارائه کند. در مورد اینکه این کار چگونه انجام میگیرد باید گفت که در سرورهای ابری این کار بهصورت پیشفرض انجام خواهد شد و در صورتی که شما از هاست ابری برای سایت خود استفاده کنید، به هیچ کدام از این مشکلها برخورد نمیکنید، اما برای اینکه سرورهای عادی هم بتوانند این مشکل را برطرف کنند، قابلیتهای مختلفی ایجاد شده است که در این مقاله با بررسی اینکه HAProxy چیست یکی از همین ابزارها را به شما معرفی خواهیم کرد.
HAProxy چیست؟
تا اینجای کار اشارههای ضمنیای به HAProxy داشتهایم. در این رابطه باید گفت که HAProxy یک برنامه سمت سرور میباشد که کار آن لود بالانسینگ یا همان متعادل کردن بار روی سرور است و قرار است که درخواستهای وارده به سرور را مدیریت کند، که این درخواستها بهصورت منظم به سرور وارد شده و در واقع وبسروری که خلوتتر میباشد به این درخواستها پاسخ دهد.
در تعریف کتابی برای این سوال که HAProxy چیست باید گفت برنامهای رایگان و اوپنسورس است که از طریق مکانیزم کار تغییر URL میتواند امکان تغییر آدرسها را روی سرور انجام داده و وبسرورها بهصورت بهینه به این درخواستهای وارده سرویسدهی میکنند.
در واقع اگر بخواهیم بگوییم که روش بالانس کردن در HAProxy چیست باید گفت که از تکنیکی به نام URL Rewriting برای این کار استفاده میکند. وقتی که یک درخواست وارد سرور میشود، در واقع نیاز دارد که به یک URL متصل شده و از سایتی که نیاز دارد اطلاعات خود را بردارد. کاری که HAProxy برای متعادلسازی انجام میدهد این است که یک درخواستها را روی چند سرور بهصورت متعادل توزیع میکند.
این برنامه که با زبان برنامهنویسی C نوشته شده است و یک برنامه قدرتمند و حرفهای به شمار میرود توسط خیلی از سایتهای شلوغ مانند اینستاگرام، گیت هاب، استک اورفلو، ردیت و توییتر مورد استفاده قرار میگیرد. در واقع وقتی ساختار سایت بهصورتی باشد که تعداد ریکوئستها کوچک و زیاد باشد این برنامه میتواند به بهترین شکل ممکن آنها را سازماندهی کرده و کیفیت ایدهآلی را در اختیار کاربران قرار دهد.
تاریخچه HAProxy چیست؟
Willy Tarreau برنامهنویس فرانسوی کسی بود که اولینبار برنامه HAProxy را ارائه کرد. این برنامه بهصورت رایگان و منبعباز در سال 2000 ارائه شد و اولین ورژنی که از این برنامه ارائه شد برای هسته لینوکس بود. بعدها این ورژن با گسترشهایی برای سیستم عاملهای دیگری مانند FreeBSD و Solaris هم گسترش داده شد.
این برنامه به مدت 13 سال تحت لیسانس گنو بهصورت رایگان کار کرد و در سال 2013 با تاسیس یک شرکت تجاری به نام HAProxy Technologies نسخه رسمی و همراه با آپدیت آن به یک برنامه تجاری تبدیل شد. این برنامه ALOHA نام داشته و اگر بخواهیم بگوییم که برتری آن نسبت به HAProxy چیست میتوان به رابط کاربری گرافیکی ای که این برنامه دارد به عنوان برتری اصلی آن شناخت.
در واقع نسخه جدیدی که ارائه شده بود از نظر کاربرد همان کاری را میکرد که HAProxy انجام میداد و صرفا موارد مدیریتی و رابط کاربری آن متفاوت شده بود. البته باید گفت که HAProxy در تمامی این سالها بدون آپدیت و یا تغییر نبوده است و اصلاحات زیادی روی آن انجام شده است. البته با ارائه این برنامه توسعه HAProxy بههیچ عنوان متوقف نشد و ورژنهای مختلفی از آن ارائه شدند. در ادامه این ورژنها را بررسی خواهیم کرد.
ورژنهای مختلف HAProxy چیست؟
این برنامه در سالهای ابتدای فعالیت خود بهخوبی توسعه پیدا کرده و سه ورژن 1.0، 1.1 و 1.2 تا سال 2003 از این برنامه ارائه شدند. بعد از آن این برنامه به یک نسخه با ثبات رسیده و تا 13 سال آینده خبری از آپدیت نبود. سه سال بعد از ارائه Aloha در سال 2016 ورژن جدیدی از این برنامه ارائه شد که از زیرمجموعههای ورژن اول آن بود.
در مدت یک سال بعد از این تغییرات سه آپدیت جدید برای برنامه HAProxy ارائه شد و این روند پرآپدیت بودن تا سال 2019 که ورژن 2.0 ارائه شد ادامه داشت. در زمان نگارش این مقاله یعنی در ماه نوامبر سال 2021 ورژن 2.4 که در ماه می 2021 برای این برنامه بیرون آمد بهعنوان ورژن پایدار معرفی شد. و این برنامه همچنان در حال گسترش است. این برنامه بازدهی خوبی را روی سیستمهای مختلف دارد که در ادامه این مورد که وضعیت بازدهی HAProxy چیست و چگونه عمل میکند صحبت خواهیم کرد.
وضعیت بازدهی در HAProxy
این برنامه روی سرورهای معمولی که نیروی پردازشی عادیای را با 6 تا 8 هسته پردازشی ایجاد میکنند و بین 200 هزار تا 500 هزار درخواست در ثانیه دارند بهخوبی کار خود را انجام میدهد. البته باید در نظر داشت که این سرورها باید با پهنای باند 25 گیگابیت بر ثانیه ورودی داشته باشند و سیستم عامل آنها هم تحت لینوکس باشد. میزان بازدهی میتواند روی سایر سیستم عاملها کمی پایینتر از حد انتظار باشد.
برای سرورهای قدرتمندی که با 64 هسته پردازشی کار میکنند و از پهنای باندهای 100 گیگابیت بر ثانیه پشتیبانی میکنند، این برنامه میتواند تقریبا در حدود 2 میلیون درخواست را در ثانیه مدیریت کرده و از این نظر بهخوبی عمل میکند. بهطورکلی این برنامه به لطف زبان برنامهنویسی قوی و طراحیای که دارد محدودیتی روی قدرتهای سختافزاری سرور ایجاد نمیکند و مانند خیلی از برنامههای دیگر که روی پردازشهایی در اندازههای بالا تداخل ایجاد میکنند، عمل نمیکند.
در مورد این موضوع باید گفت که وبسرور هم یکی از اصلیترین مواردی است که روی بازدهی HAProxy تاثیر میگذارد، بهترین کیفیت ارائه شده توسط HAProxy آن است که این کیفیت را از وبسرور NginX بگیریم. پیشتر در مقاله NginX چیست در مورد این وبسرور قدرتمند که با استفاده از زبان php کار میکند صحبت کرده بودیم و درکل HAProxy بهخوبی با این وبسرور هماهنگ میشود و با توجه به اینکه این وبسرور از لود بالانسینگ در لایه اپلیکیشن هم پشتیبانی میکند، درخواستها را برای این وبسرور تنظیم مینماید.
انواع لود بالانسینگ در HAProxy چیست؟
یکی از موارد مهمی که در مورد کارکرد برنامه HAProxy باید عنوان شود، روشهایی است که این برنامه با استفاده از آنها درخواستهای ورودی را بین سیستمهای مختلف تنظیم میکند. در واقع کاری که در اینجا انجام میشود این است که وقتی درخواستی به سرور وارد میشود، اولین کسی که آن را بررسی میکند HAProxy خواهد بود. نتیجه این بررسی مشخص میکند که درخواست وارد شده باید برای کدام وبسرور فرستاده شود و بهنوعی مسیریابیهای درون سرور توسط HAProxy انجام میگیرد.
در مورد اینکه HAProxy چگونه این درخواستها را بررسی میکند دو رویکرد کلی وجود دارد که این برنامه از آنها استفاده میکند. در واقع این رویکردها به دو لایه اصلی از مدل 7 لایهای OSI که برای ساختار اینترنتی ارائه شده است بستگی دارد. مدل OSI مدلی است که در آن 7 لایه اصلی برای اینترنت ارائه میشود که از بالا به پایین به این صورت هستند:
همانطور که در تصویر میبینید، این لایهها از پایینترین یعنی سختافزار و بالاترین که لایه اپلیکیشن نام دارد بهصورت مرحلهای قرار گرفتهاند. وقتی دادهای بخواهد در بستر اینترنت منتقل شود لازم است که هر 7 مرحله را طی کرده و به لایه سخت افزار برسد، بعد از این که بستر اینترنت عبور کرد همین 7 مرحله در سمت دیگر بهصورت معکوس مجددا انجام خواهد گرفت که داده از حالت سختافزاری خود به شکل قابل درک برای برنامه و اپلیکیشن برسد. در دو تا از این لایهها، HAProxy میتواند کار کند و حوزههای کاریای که بار سرور در آنها متعادل میشود، در این موارد قرار خواهد گرفت.
لود بالانسینگ لایه 4
یکی از مهمترین مواردی که HAProxy کار لود بالاسینگ را انجام میدهد در لایه 4 یا همان Transport است. کار این لایه در واقع این است که بستههایی که از لایه شبکه گرفته است را آماده تحویل به مکانیزمی کند که میخواهد آنها را برای استفاده به هم پیوند دهد. در واقع این لایه تشخیص میدهد بستهای که از کابل وارد سیستم شده است باید روی چه پورتی تنظیم شده و محتوایی که دارد از چه نوعی است و باید به المانهای نرمافزاری موردنیاز تحویل شود.
اما در مورد اینکه روش کار HAProxy چیست باید گفت که در اینجا این برنامه وارد ماجرا کرده و بستهها را بهصورتی هدایت و تحویل عاملهای مختلف میدهد که تعادل بار برقرار باشد. در صورتی که یکی از سرورها تحت فشار باشد، درخواست وارده به وبسرور دیگری تحویل داده خواهد شد و در نهایت این سرور دیگری خواهد بود که با پایگاه داده ارتباط میگیرد و درخواست را پاسخ داده و برای کاربر بر میگرداند.
در تصویر زیر میتوانید این مورد را بهصورت کامل ببینید که چه اتفاقی برای بستهها میافتد و نقش HAProxy در آن چیست:
در این تصویر یک لود بالانسر روی سرور مجازی پیادهسازی شده است، این لود بالانسر با وبسرورهای بکاند وردپرس در ارتباط است و وقتی یک درخواست برای سایتهای سرور اصلی میآید، آنها را به یکی از سرورهایی که خلوتتر باشد هدایت میکند. ویژگی اصلی این مورد این است که همه سرورهای بکاند از نظر HAProxy یکسان هستند، اما در نوع بعدی که آن را در ادامه بررسی میکنیم روال کار بهصورت کامل متفاوت خواهد بود.
لود بالانسینگ لایه 7
لایه 7 یا اپلیکیشن بخشی از مدل OSI است که در آن فایل ارسالی در حالتی قرار دارد که توسط برنامهای که قرار است از آن استفاده کند قابل درک باشد، بهطور مثال اگر فایل ارسالی یک فیلم باشد ادیت با فرمتی که دارد تکمیل شده و آماده پلی کردن باشد. در این حالت که بهصورت بهتر و هوشمندتری میتوان کار لود بالانسینگ را انجام داد، HAProxy تشخیص میدهد که کدام یک از سرورهای زیرمجموعهای که دارد میتوانند بهتر با این درخواست کار کنند. بهعنوانمثال شکل زیر را در نظر داشته باشید.
همانطور که میبینید در این سرور، دو سرور بکاند وجود دارد که یکی از آنها بهینهسازیهای وردپرس را داشته و برای درخواستهایی که برای این سیستم مدیریت محتوا فرستاده میشود بهتر است. در این حالت کار HAProxy آن است که این برنامه تمامی درخواستهایی که مربوط به وردپرس شده را شناسایی کرده و آنها را برای سرور وردپرس ارسال میکند. این در حالی بود که در لایه 4 صرفا تعداد درخواستهای هر سرور و اینکه این سرور چقدر خلوت است مورد بررسی قرار میگرفت و اطلاعی از ماهیت بستهها در آن وجود نداشت.
هر دوی این لود بالانسها میتوانند بهینهسازیهای بسیار خوب و کاملی برای سایت باشند ولی در کل باید گفت که روش کار HAProxy در لایه 7 بهصورت هوشمندانهتر است و در حالت اول بهتر میتواند بستههایی با تعداد بالا را مدیریت کند. اگر بخواهیم بگوییم که هدف هر کدام از این بهینهسازیها و لود بالانسینگهای HAProxy چیست باید گفت که از لایه 4 معمولا در سرورهای میانی اینترنت و از لایه 7 در سرورهای لبه استفاده میشود.
نتیجهگیری
در این مقاله به ارائه پاسخ کاملی برای این پرسش که HAProxy چیست و این مفهوم مورد استفاده در شبکه به چه صورتی میتواند به ما در داشتن یک سرور سبکتر و سریعتر کمک کند پرداختیم. در مورد نحوه کارکرد HAProxy گفتیم که با یک برنامه سمت سرور که برای ما کار لود بالانسینگ را انجام میدهد طرف هستیم که در نوع خود یک برنامه بینظیر بهحساب میآید. کاری که این برنامه رایگان و اوپنسورس برای ما انجام میدهد این است که بار وارد شده به سرور را بین سرورهای آمادهای که در اختیار داریم تقسیم کرده و بهجای اینکه یک سرور تحت فشار قرار بگیرد و درخواستها زیاد شوند، همه آنها بهنوبت انجام خواهد گرفت.