УДК 004

Распределение нагрузки на веб-сервисы с помощью прокси-сервера Nginx

Прокопенко Николай Николаевич – студент Белгородского государственного технологического университета им. В.Г. Шухова

Аннотация: Описывается способ улучшения отказоустойчивости и повышения скорости обработки запросов на веб-сервисы с помощью прокси-сервера Nginx. В статье рассматривается сравнение работы одного и того же веб-сервиса с единственным отличием: первый вариант работает стандартным способом без использования прокси-сервера Nginx, а второй работает с использованием прокси-сервера Nginx.

Ключевые слова: веб-сервис, распределение нагрузки, прокси-сервер, Nginx, микросервисы, архитектура, оптимизация.

Веб-сервисы, основанные на архитектуре микросервисов, становятся все более популярными в современном мире. Они позволяют разрабатывать и масштабировать приложения гораздо проще и эффективнее, чем традиционные монолитные системы [1, с. 55]. Однако, увеличение числа микросервисов также увеличивает нагрузку на сеть и серверы. Для распределения этой нагрузки используются прокси-серверы, одним из которых является Nginx.

Nginx – это высокопроизводительный веб-сервер и прокси-сервер, который широко используется для распределения нагрузки, кеширования, аутентификации и авторизации. Он работает на большом числе операционных систем, включая Linux, Windows, MacOS и FreeBSD. Он также является одним из самых популярных веб-серверов в мире, используемым более чем на 33% всех сайтов в Интернете.

Одним из наиболее распространенных способов использования Nginx является распределение нагрузки на множество серверов, обрабатывающих запросы. Для этого используются конфигурационные файлы, которые определяют параметры прокси-сервера, включающие настройку, отвечающую за распределение нагрузки.

Конфигурационный файл Nginx состоит из блоков, которые могут быть использованы для определения настроек сервера, логирования, кеширования и других параметров. В блоке server можно определить виртуальный сервер, который будет обрабатывать запросы на определенный домен или IP-адрес.

Для распределения нагрузки на несколько серверов в блоке server используется блок upstream. В этом блоке можно указать список серверов и их параметры, такие как IP-адрес, порт и вес. Вес определяет, как часто будет выбран определенный сервер при балансировке нагрузки [2 , с. 101]. Например, если сервер имеет вес 2, то он будет выбираться в два раза чаще, чем сервер с весом 1.

Пример конфигурационного файла Nginx для балансировки нагрузки на два сервера:

http {

upstream myapp {

server 192.168.1.100:80 weight=2;

server 192.168.1.101:80;

}

server {

listen 80;

location / {

proxy_pass http://myapp;

}

}

}

В этом примере мы создали upstream блок с двумя серверами, где первый сервер имеет вес 2, а второй сервер имеет вес по умолчанию 1. Затем мы создали блок server, который прослушивает порт 80 и перенаправляет запросы на upstream блок с помощью директивы proxy_pass.

Nginx также поддерживает различные методы распределения нагрузки, такие как round-robin, least-connected, ip-hash и другие [3]. Метод round-robin выбирает серверы в порядке, определенном в блоке upstream, метод least-connected выбирает сервер с наименьшим количеством соединений, а метод ip-hash выбирает сервер на основе хеша IP-адреса клиента.

Ниже на графике представлено сравнение двух способов работы серверного приложения, которое обрабатывает лишь 1 HTTP-запрос, возвращая всегда статус 200. В первом случае запускается приложение без использования распределения нагрузки. Во втором случае запускается 5 копий одного и того же приложения с использованием прокси-сервера Nginx, который распределяет нагрузки на приложение методов round-robin без указания весов. Результатом сравнения является следующий результат: приложение с использованием прокси-сервера Nginx и распределением нагрузки обрабатывает запросы в среднем в 4 раза быстрее, чем приложение без использования прокси-сервера Nginx и распределения нагрузки.

image001

График. Сравнение работы серверного приложения в зависимости от наличия распределителя нагрузки.

Веб-сервисы на основе микросервисной архитектуры представляют собой большую нагрузку на серверы и сеть. Для балансировки этой нагрузки используются прокси-серверы, такие как Nginx, которые позволяют распределить нагрузку на несколько серверов, уменьшить нагрузку на один сервер и увеличить отказоустойчивость системы.

Nginx – это высокопроизводительный прокси-сервер, который поддерживает множество протоколов и методов распределения нагрузки. С помощью конфигурационных файлов мы можем определить параметры распределения нагрузки, такие как вес серверов и методы распределения нагрузки.

Использование Nginx для распределения нагрузки на множество серверов помогает улучшить производительность, отказоустойчивость и масштабируемость веб-сервисов на основе микросервисной архитектуры.

Список литературы

  1. Newman S. Building Microservices: Designing Fine-Grained Systems – O'Reilly Media, 2015.
  2. Aivaliotis, D. Mastering Nginx – Packt Publishing, 2016.
  3. Choosing an NGINX Plus Load‑Balancing Technique [Электронный ресурс]. – Режим доступа: https://www.nginx.com/blog/choosing-nginx-plus-load-balancing-techniques/ (дата обращения: 10.03.2023).

Интересная статья? Поделись ей с другими: