ابتدا، اجازه دهید ایده ای در مورد سرورهای پروکسی داشته باشیم، و پس از آن، می توانید به راحتی سرورهای Reverse Proxy و Load Balancer را درک کنید.

اما، قبل از اینکه به بحث فنی مربوط به Proxy و Reverse Proxy بپردازیم، می‌خواهم تجربه‌ای از دوران کودکی را که همه ما داشتیم، یادآوری کنم.

proxy

proxy

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

امیدواریم ایده آن سناریوی ساده را دریافت کرده باشید، حالا اجازه دهید ببینیم چگونه می توانیم این سناریو را به یک سرور Proxy مرتبط کنیم.

آنچه خواهیم دید

Proxy Server

proxy server

شکل 02 – proxy server

خوب، در اینجا شکل 02 یک برنامه کاربردی سرویس گیرنده-سرور ساده را نشان می دهد. تمامی کلاینت ها درخواست های خود را به پروکسی ارسال می کنند و سپس پروکسی درخواست های کلاینت را به سرور ارسال می کند. بنابراین، کاری که این سرور پروکسی اساسا انجام می دهد این است که به عنوان یک فایروال یا یک سپر در سمت کلاینت عمل می کند و تمام درخواست های مشتری را مدیریت می کند و بر اساس آن به سرور ارسال می کند. هدف اصلی این نوع پروکسی ایمن سازی برنامه های مشتری از سرورهای خارجی و سایر آسیب پذیری های امنیتی است. چرا؟ زیرا می‌توانید ببینید که این کلاینت‌ها و آدرس‌های IP آن‌ها در معرض دنیای خارج نیست، اما سرور پروکسی خود را از طرف برنامه‌های کلاینت نشان می‌دهد. امیدواریم سناریوی کودک-والد بالا را به خاطر داشته باشید. 😃

خوب، اکنون امیدوارم درک روشنی در مورد سرور پروکسی و نقش آن داشته باشید. با آن بیایید به سمت سرورهای پروکسی معکوس برویم.

Reverse Proxy Server

Reverse Proxy Server

Reverse Proxy Server – شکل 03

مفهوم Reverse Proxy Server بسیار شبیه به Proxy Server است. بیایید فرض کنیم چندین نمونه سرور داریم که در backend اجرا می شوند. اما به یاد داشته باشید، لازم نیست چندین نمونه سرور داشته باشید، در برخی موارد، تنها یک نمونه سرور وجود خواهد داشت. 😉 در شکل 03 می توانید ببینید که سرور Reverse Proxy در سمت سرور قرار دارد. به جای محافظت از برنامه های مشتری، پروکسی معکوس از نمونه های سرور در باطن در مقابل طرف های خارجی یا مشتریان محافظت می کند. بنابراین، کلاینت‌ها هرگز نمی‌دانند کدام سرور قرار است پرس و جوها یا درخواست‌های آنها را حل کند. هر درخواست مشتری در Reverse Proxy فیلتر می شود و سپس سرورReverse Proxy آن درخواست ها را برای پردازش بیشتر به نمونه های سرور مربوطه هدایت می کند.

سرورهای Reverse Proxy مزایای بسیار دیگری نیز دارند. این پراکسی ها می توانند محتوای استاتیک و پویا را در حافظه پنهان نگه دارند. اگر مشتریان بارها و بارها همان منبع را درخواست کنند، می‌توانیم آن محتوا را در لایه پروکسی کش کنیم. بنابراین، نیازی نیست که مجبور باشیم بارها و بارها همان درخواست را برای سرورها ارسال کنیم. مزیت بعدی این سرورهای پروکسی این است که می توانند داده هایی را که از طریق شبکه عبور می کنند با استفاده از الگوریتم هایی مانند gZip و Brotli فشرده کنند. یکی دیگر از مزایای مهم این سرورهای Reverse Proxy این است که می توانند به عنوان Load Balaner عمل کنند. بنابراین، بیایید به آن نگاه کنیم.

Load Balancer

همانطور که قبلاً گفتم Reverse Proxy Server می تواند به عنوان Load Balancer عمل کند. به یاد داشته باشید، هر Reverse Proxy به عنوان یک Load Balancer عمل نمی کند، اما هر Load Balancer باید یک سرور Reverse Proxy باشد. بنابراین، نقش Load Balancer توزیع بار درخواست های مشتری در بین نمونه های سرور است. به عنوان مثال، فرض کنید یک فروشگاه اینترنتی داریم که روزانه بیش از 5 میلیون درخواست دریافت می کند. بنابراین، در سمت سرور، اگر ما فقط یک نمونه سرور داشته باشیم، نمی تواند در برابر چنین ترافیک عظیمی دوام بیاورد. بنابراین، برای مدیریت چنین ترافیکی باید چندین نمونه سرور داشته باشیم. ممکن است تعجب کنید که اگر چندین نمونه داریم، چگونه می توانیم ترافیک را بین آن سرورها توزیع کنیم؟ دقیقاً، اینجاست که Load Balancer وارد عمل می شود. 😉

round robin Load Balaner

round robin Load Balaner – شکل 04

Load Balaner تمام درخواست های مشتری را جمع آوری کرده و طبق یک الگوریتم بین نمونه های سرور توزیع می کند. در این مورد خاص (شکل 04) از الگوریتم Round Robin برای توزیع بار بین نمونه های سرور استفاده می کند. در الگوریتم Round-Robin، هر درخواست مشتری جدید به صورت متوالی چرخشی به نمونه سرور همسایه بعدی ارسال می شود. بنابراین، به جای اینکه یک سرور تمام درخواست ها را حل کند، همه سرورها به حل درخواست های مشتری در یک الگوریتم مناسب و موثر کمک می کنند. نه تنها Round Robin، بلکه برخی از الگوریتم های دیگر مانند Hash، IP Hash، حداقل اتصالات و غیره نیز وجود دارد.

بنابراین، با این پراکسی‌ها، می‌توانیم سربار را در هر دو طرف کاهش دهیم و تأخیر شبکه را نیز کاهش دهیم. در نهایت عملکرد کلی و امنیت اپلیکیشن افزایش خواهد یافت. بیایید ببینیم چگونه می‌توانیم این مفاهیم را با استفاده از Nginx در چند مقاله بعدی پیاده‌سازی کنیم. Nginx یک ابزار منبع باز با کارایی بالا برای Reverse Proxy ، Load Balancer، کش کردن و موارد دیگر است. 😃

ممنون که تا آخر خواندید امیدوارم چیز ارزشمندی یاد گرفته باشید به یادگیری ادامه دهید، به رشد خود ادامه دهید.