در سیستمای پیچیده، همش این کلمهها رو میشنویم: لود بالانسر،ریورس پروکسی و API گت وی. خیلی وقتا هم قاطیشون میکنیم، ولی مهمه که بدونیم با هم فرق دارن. اگه بفهمیم اینا چی هستن، راحتتر میتونیم انتخاب کنیم کدوم به درد کارمون میخوره!
بریم سراغ مثالای ساده و واقعی:
- رستوران شلوغ: فکر کن وارد یه رستوران پر از مشتری شدی. یه نفر اونجا واستاده که بهت خوشامد بگه و یه میز خوب برات پیدا کنه، جوری که همه گارسونا به وظایفشون برسن و به همه مشتریا خوش بگذره. خب، این آدم همون لود بالانسره.
- اتاق نامهی ادارات: تو اتاقای نامهی ادارهجات، یه نفرو میذارن که بستهها و نامهها رو تحویل بگیره. این آدم کارای زیادی میکنه، مثلا نامهها رو جدا میکنه، میرسونه به دست کارمندا یا بخشهای مختلف، حواسش به محمولههای پستی هست، نامههای اشتباه رو پس میفرسته و نامههای مهم رو امضا میکنه و اینجور چیزا. اون دیگه فقط نامهها رو مرتب نمیکنه و به دست آدما نمیرسونه (که میشه همون لود بالانسر)، بلکه کارای دیگهای هم میکنه. میشه گفت این آدم یه ریورس پروکسیه.
- کتابخونه: تو کتابخونه با کتابدارا روبرو میشیم که کلی کار میکنن، مثلا به آدما کمک میکنن کتاب پیدا کنن، کارت عضویت رو چک میکنن، کارکنان رو مدیریت میکنن، به سوالا جواب میدن، حواسشون هست که کسی کتابای زیادی قرض نکنه و غیره. اونا فراتر از کاری که یه ریورس پروکسی انجام میده عمل میکنن. تو این مثال، کتابدار همون API گتوی میشه.
امیدوارم این مثالها به شما کمک کرده باشه تا فرق این سه تا رو بهتر متوجه بشین. خلاصهش اینه که هم ریورس پروکسی و هم API گت وی علاوه بر چیزای دیگه، میتونن کار لود بالانسر رو هم انجام بدن. تازه، API گت وی یه جور ریورس پروکسی خاصه که واسه مدیریت APIها ساخته شده.
در ادامه دربارهی هر کدوم بیشتر حرف میزنیم.
لود بالانسر
تو این بخش قراره ببینیم لود بالانسر چیه، چه مدلهای مختلفی داره و از چه الگوریتمهایی استفاده میکنه.
وبسایتهای امروزی که ترافیک بالایی دارن، با چالش مدیریت درخواستهای همزمان از طرف کاربرای زیاد روبرو هستن. حالا چه بخواد متن، عکس، ویدیو یا اطلاعات یه برنامه رو نشون بده، برای اینکه از پس این حجم از کار بربیاد لازمه که قدرت پردازش رو خیلی بالا ببره، که این کار معمولا با اضافه کردن سرورهای بیشتر انجام میشه. برای اینکه بازدهی همه سرورها رو به حداکثر برسونیم، باید درخواستهای ورودی رو بینشون تقسیم کنیم. به این فرآیند توزیع ترافیک شبکه بین یه گروه سرور پشتیبان، توزیع بار (Load Balancing) گفته میشه.
شکل زیر یه محیط معمولی با لود بالانسر رو نشون میده. لود بالانسر، یه جزء نرمافزاریه که مخصوص توزیع باره و جلوی سرورها قرار میگیره. چون به جای سرورها عمل میکنه و درخواستها رو دریافت و مسیریابی میکنه، بهش ریورس پروکسی هم میگن.
لود بالانسر، درخواستها رو به طور مؤثر مدیریت میکنه و سرعت بالا رو تضمین میکنه. اگه یه سرور از کار بیفته، لود بالانسر، ترافیک رو به سمت سرورهای فعال دیگه هدایت میکنه. وقتی هم یه سرور جدید به گروه اضافه میشه، لود بالانسر به طور خودکار شروع میکنه به فرستادن درخواستها به اون سرور جدید.
علاوه بر این، لود بالانسر رو میشه طوری تنظیم کرد که روی سرورهای پشتیبان ثبتشده، بررسی سلامت (health check) انجام بده. این بررسیهای سلامت، در واقع تستهایی هستن که برای اطمینان از در دسترس بودن سرورهای پشتیبان انجام میشن.
انواع لودبالانسرها
چند مدل مختلف لود بالانسر وجود داره، ولی تو این بخش به مهمترینهاشون نگاه میکنیم:
- لود بالانسر شبکه / لود بالانسر لایه ۴ (L4): این نوع لود بالانسر تو لایه ۴ کار میکنه و به طور خاص، ترافیک TCP رو مدیریت میکنه. توزیع ترافیک رو تو سطح حمل و نقل انجام میده و تصمیمگیری برای مسیریابی رو بر اساس متغیرهای شبکهای مثل آدرسهای IP و پورتهای مقصد میگیره. این لود بالانسر موقع هدایت ترافیک، فقط روی اطلاعات لایه شبکه تمرکز میکنه.
- لود بالانسر برنامهای / لود بالانسر لایه ۷ (L7): این لود بالانسر تو لایه ۷ از مدل OSI کار میکنه و توزیع بار رو بر اساس پارامترهای سطح برنامه انجام میده. این نوع لود بالانسر با اطمینان از اینکه همیشه از آخرین رمزنگاری و پروتکلهای SSL/TLS استفاده میشه، امنیت رو بالا میبره و برنامه رو سادهتر میکنه.
الگوریتمهای لود بالانسر
دو دسته الگوریتم لود بالانسر وجود داره: استاتیک و پویا.
الگوریتمهای استاتیک (Static Algorithms)
- رند رابین (Round Robin): در این روش، درخواستهای کاربر به ترتیب و به صورت دورهای به نمونههای مختلف سرویس فرستاده میشه. معمولا لازمه که سرویسها بدون حالت (stateless) باشن.
- رند رابین استیکی (Sticky Round-Robin): یه نسخه پیشرفته از الگوریتم رند رابین که تو اون، درخواستهای بعدی از یه کاربر خاص، به همون نمونهی سرویسی میره که درخواست اولیه رو مدیریت کرده.
- رند رابین ویتد (Weighted Round-Robin): مدیر میتونه به هر سرویس وزن اختصاص بده که مشخص میکنه هر سرویس چه نسبتی از درخواستها رو مدیریت میکنه.
- هش (Hash): تو این الگوریتم، یه تابع درهمساز (hash function) روی IP یا URL درخواستهای ورودی اعمال میشه. نمونههایی که درخواستها بهشون مسیریابی میشن، به نتیجهی تابع درهمساز بستگی داره.
الگوریتمهای دینامیک (Dynamic Algorithms)
- کمترین اتصال (Least Connections): درخواستهای جدید به نمونهی سرویسی فرستاده میشه که کمترین تعداد اتصال همزمان رو داره.
- کمترین زمان پاسخ (Least Response Time): درخواستهای جدید به نمونهی سرویسی فرستاده میشه که سریعترین زمان پاسخ رو داره.
مزایای لود بالانسر
- توزیع کارآمد درخواستهای کاربر یا بار شبکه بین چند سرور
- بهبود زمان پاسخ با کاهش بار روی سرورهای خاص
- تضمین در دسترس بودن و قابلیت اطمینان بالا با هدایت درخواستها فقط به سرورهای آنلاین
- تسهیل مقیاسپذیری با اضافه یا حذف پویای سرورها بر اساس نیازهای شبکه
- امکان تشخیص زودهنگام خرابیها و مدیریت مؤثر بدون تأثیرگذاری روی منابع دیگه
- امکان خاتمه دادن به SSL، با مدیریت رمزگشایی ترافیک SSL، بار محاسباتی روی سرورهای وب رو کم میکنه.
- افزایش امنیت با یه لایه اضافی از محافظت، که از سیستمها در برابر حملات توزیعشدهی منع سرویس (DDoS) و سایر انواع حملات محافظت میکنه.
مشکلات لود بالانسر
- اگه به درستی تنظیم نشه، میتونه به یه نقطهی واحد برای خرابی تبدیل بشه.
- نیاز به پیکربندی و نظارت دقیق داره.
ریورس پروکسی
ریورس پروکسی، یه واسطه بین کاربرها و سرورها عمل میکنه. کاربرها فقط با ریورس پروکسی در ارتباط هستن تا به سرورهای پشتیبان دسترسی پیدا کنن، چون پروکسی، درخواستها رو به سرور مناسب میفرسته. این مکانیزم، جزئیات پیادهسازی سرورهای مجزا رو تو شبکه داخلی پنهان میکنه. همونطور که تو شکل پایین میبینین، ریورس پروکسی جلوی سرور اصلی (origin server) قرار میگیره و تضمین میکنه که هیچ کاربری هیچوقت مستقیما با اون سرور اصلی ارتباط برقرار نکنه.
از ریورس پروکسی معمولا برای موارد زیر استفاده میشه:
- توزیع بار با استفاده از لود بالانسر: همونطور که قبلا گفتیم ریورس پروکسی میتونه مثل یه لود بالانسر عمل کنه و درخواستهای کاربران رو بین سرورهای مختلف پخش کنه.
- کش (Caching): ریورس بالانسر میتونه برای درخواستهای تکراری، به طور مستقل و به صورت کامل یا بخشی، پاسخ بده. محتوای پرکاربرد در حافظه کش پروکسی ذخیره میشه و باعث میشه لازم نباشه هر بار اطلاعات از سرور اصلی گرفته بشه و در نتیجه کاربرها پاسخ سریعتری دریافت میکنن.
- اقدامات امنیتی: ریورس پروکسی این امکان رو میده که سیستمهای کنترلی مثل آنتیویروس یا فیلتر بسته رو اجرا کنیم. این سیستمها که بین اینترنت و شبکه داخلی قرار میگیرن، امنیت بیشتری رو برای سرورهای پشتیبان فراهم میکنن.
- خاتمه دادن به SSL: ریورس پروکسی میتونه طوری تنظیم بشه که درخواستهای ورودی رو رمزگشایی کنه و پاسخهای خروجی رو رمزگذاری کنه و به این ترتیب منابع باارزش سرورهای پشتیبان رو آزاد کنه.
ریورس پروکسیها در لایه ۷ (لایه کاربرد) از مدل OSI کار میکنن، جایی که درخواستها و پاسخها رو تو سطح HTTP مدیریت میکنن. این قابلیت بهشون اجازه میده که ویژگیها و عملکردهای پیشرفتهای رو ارائه بدن. یکی از این قابلیتها، بازنویسی URL هست که باعث سادهسازی URLهای پیچیده و بهبود سئو میشه.
مزایای ریورس پروکسی
با راهاندازی ریورس پروکسی، یه وبسایت یا سرویس میتونه آدرسهای IP سرورهای اصلی خودش رو مخفی نگه داره. این کار یه لایه دیگه از محافظت در برابر حملات هدفمند، مثل حملات DDoS، اضافه میکنه چون مهاجما فقط میتونن روی ریورس پروکسی تمرکز کنن. ریورس پروکسی، چون امنتره و منابع بیشتری داره، میتونه دفاع بهتری در برابر حملات سایبری داشته باشه. مزایای دیگه شامل کش کردن (Caching) و SSL Termination میشه.
API گتوی
API گتوی را میشه یه جور ریورس پروکسی پیشرفته در نظر گرفت. API گتوی نه تنها درخواستها رو به جلو هدایت میکنه، بلکه پارتیشنبندی (تقسیمبندی) بکاند رو هم تو معماری از کاربر پنهان میکنه. کارش فراتر از یه ارسال سادهی درخواستهاست و میتونه شامل سازماندهی یا تجمیع (orchestration or aggregation) هم بشه. این کار باعث سادهسازی کد سمت کاربر و کم شدن تعداد درخواستها و رفتوآمدهای API میشه. به علاوه، به جای اینکه کاربر با چند بکاند مختلف تعامل داشته باشه، فقط با درگاه API ارتباط برقرار میکنه.
یه نکتهی قابلتوجه دیگه، ترجمه پروتکل (Protocol Translation) هست. APIگتوی میتونه پروتکلها رو (مثلا XML به JSON، gRPC به JSON) برای راحتتر شدن یکپارچهسازی بین کاربر و سرور تبدیل کنه. API گتوی یه ابزار کلیدی برای رسیدگی به قابلیتهای ضروری مختلفی مثل امنیت، قابلیت اطمینان، مقیاسپذیری، قابلیت مشاهده و ردیابی عمل میکنه.
ویژگیهای کلیدی API گتوی
- مسیریابی درخواست (Request Routing): درخواستهای ورودی رو به سمت سرویس مناسب هدایت میکنه.
- ترکیبAPI (API Composition): چند سرویس مختلف رو تو یه API واحد ترکیب میکنه.
- محدود کردن نرخ درخواست (Rate Limiting): حجم درخواستهایی که یه کاربر میتونه تو یه بازهی زمانی مشخص به یه API بده رو مدیریت میکنه.
- امنیت (Security): شامل ویژگیهایی مثل احراز هویت و مجوز میشه.
- مدیریت متمرکز (Centralized Management): یه پلتفرم واحد برای مدیریت همه جوانب تو اکوسیستم ما ارائه میده.
- تحلیل و مانیتورینگ (Analytics and Monitoring): امکان تحلیل جامع و رهگیری رو فراهم میکنه.
مسیریابی داخلی API گتوی
تو شکل زیر، بلوکهای آبی رنگ، مراحلی هستن که یه درخواست HTTP طی میکنه. بلوکهای زرد رنگ، قابلیتهای دیگه API گتوی هستن که موقع پردازش درخواستهای HTTP ارائه میشن.
- اعتبارسنجی پارامتر (Parameter Validation): API گتوی ویژگیهای داخل درخواست HTTP رو بررسی و اعتبارسنجی میکنه.
- لیست مجاز/مسدود (Allow/Deny List): API گتوی لیستهای مجاز و مسدود رو برای اعتبارسنجی درخواست چک میکنه.
- احراز هویت و مجوز (Authentication & Authorization): API گتوی از طریق یه ارائهدهندهی احراز هویت، اعتبارسنجی میکنه و مجوز میده.
- محدود کردن نرخ درخواست (Rate Limit): قوانین محدود کردن نرخ درخواست اعمال میشه و درخواستهایی که از حد مجاز تجاوز کنن، رد میشن.
- مسیریابی پویا و کشف سرویس (Dynamic Routing and Service Discovery): API گتوی با استفاده از تطبیق مسیر (path matching)، درخواست رو به سرویس بکاند مناسب هدایت میکنه.
- تبدیل پروتکل (Protocol Conversion): API گتوی، درخواست رو به پروتکل مناسب تبدیل میکنه و اون رو به میکروسرویسهای بکاند منتقل میکنه.
- مدیریت خطا (Error Handling): API گتوی هر خطایی که در حین پردازش درخواست باهاش روبرو میشه رو مدیریت میکنه تا از پایین اومدن کیفیت سرویس (service degradation) به شکل مطلوب جلوگیری کنه.
- شکست مدار (Circuit Breaker): API گتوی الگوهای پایداری (resiliency patterns) مثل شکست مدار رو به کار میگیره تا خرابیها رو شناسایی کنه و از اضافه بار روی سرویسهای بههمپیوسته جلوگیری کنه و از خرابیهای آبشاری (cascading failures) کم کنه.
- لاگینگ و مانیتورینگ (Logging and Monitoring): API گتوی با استفاده از ابزارهای قابلیت مشاهده (observability tools) مثل ELK stack (Elasticsearch-Logstash-Kibana)، لاگینگ، مانیتورینگ، ردیابی و اشکالزدایی رو تسهیل میکنه.
- کش (Cache): API گتوی ممکنه انتخاب کنه که پاسخها رو برای درخواستهای مکرر کش کنه تا در کل، پاسخدهی رو بهبود ببخشه.
تفاوتهای اصلی این سه:
- API گتوی مثل مدیر برنامههای API میمونن، لود بالانسرها کارشون پخش کردن ترافیک شبکه است و ریورس پروکسیها هم واسطه مطمئنی برای ارسال درخواست ها هستند.
- هر دوی API گتوی و ریورس پروکسی میتونن مسیر درخواستها رو مدیریت کنن، ولی خب هدف اصلیشون فرق داره.
- لود بالانسر بیشتر تو لایه حمل و نقل کار میکنه، در حالی که API گتوی و ریورس پروکسی تو لایه کاربردی فعالیت دارن.
کدومش برای شما مناسبتره؟
- لود بالانسر: استاد ترافیکه! این تکنولوژی با پخش کردن هوشمندانه درخواستها بین چند سرور، باعث میشه وبسایت یا سرویس شما در دسترستر، قابل ارتقا و با توزیع بار بهتری باشه. این تکنولوژی بیشتر برای وبسایتها و سرویسهای تحت وب کاربرد داره.
- API گتوی: نگهبان و مدیر APIها! این ابزار تو معماریهای میکروسرویس، روی مدیریت، امنیت و بهینهسازی APIها تمرکز داره. API گتوی درواقع در معرض دید قرار دادنِ امنِ APIها و کنترل دسترسی به اونها رو برعهده داره.
- ریورس پروکسی: یه تیر و سه نشان! ریورس پروکسی با یه بار تیر انداختن، سه تا نشون رو میزنه: امنیت، بهبود عملکرد و توزیع بار. این تکنولوژی تو وبسرورها، راهحلهای کش و شبکههای تحویل محتوا (CDN) خیلی پرکاربرده.
انتخاب بین این سه تا شاید اولش کمی گیجکننده باشه. اما حالا که اطلاعات لازم رو دارید، میتونید با خیال راحت، قطعههای مناسب رو برای وبسایتتون انتخاب کنید. یادتون باشه:
- لود بالانسر: ترافیک رو بین سرورهای بکاند(backend) پخش میکنه.
- ریورس پروکسی: قابلیتهای بیشتری در سطح برنامه ارائه میده.
- API گتوی: مدیریت و امنیت متمرکزی رو برای برنامههای مبتنی بر میکروسرویس فراهم میکنه.
حتی میتونید برای اینکه به بهترین نتیجه برسید، از ترکیب این سه تا تکنولوژی با هم استفاده کنید. با کنار هم چیدن لود بالانسر، ریورس پروکسی و API گتوی میتونید یه وبسایت کارآمد، امن و قابل ارتقا بسازید. پس از قدرت این ابزارها استفاده کنید تا وبسایت شما به حداکثر توان خودش برسه.
امیدوارم این مطلب برای شما مفید بوده باشه. از بخش نظرات میتونید سوالات یا پیشنهادات خودتون رو ارسال کنید :)