Балансировка нагрузки с помощью NginX¶
Для увеличения производительности и уменьшения времени обработки запросов в высоконагруженных системах с повышенными требованиями к оптимизации ресурсов рекомендуется настроить балансировку нагрузки с помощью nginx.
Если нагрузка балансируется, входящий поток запросов вместо того, чтобы направиться на обработку в единственный экземпляр компонента, проходит через прокси-сервер и распределяется между несколькими экземплярами этого компонента в режиме round-robin (циклически). Результатом является значительное уменьшение времени ожидания обработки запроса, а также улучшение общей производительности, масштабируемости и надежности системы.
Нагрузка может быть сбалансирована для следующих компонентов:
Компонент | Рекомендуемое количество экземпляров на одном физическом сервере |
---|---|
findface-facenapi |
Одного экземпляра на сервер обычно бывает достаточно. Применительно к компоненту findface-facenapi нагрузка обычно балансируется только в кластерной среде между несколькими физическими серверами findface-facenapi . |
findface-nnapi |
Количество ядер процессора минус 1. Дает значительный выигрыш в производительности. |
extraction-api |
1 (нагрузка балансируется автоматически). Балансировка нагрузки через nginx применяется только к экземплярам extraction-api , установленным на различных физических серверах. |
Приведенная ниже пошаговая инструкция демонстрирует настройку балансировки нагрузки через nginx для 2-х экземпляров findface-nnapi
на одном физическом сервере. Нагрузка остальных компонентов может быть сбалансирована по аналогии.
Выполните следующие действия:
При необходимости установите nginx на серверы с
findface-nnapi
(nginx устанавливается автоматически вместе с компонентомfindface-upload
).sudo apt-get install nginx
Скопируйте содержимое файла
/lib/systemd/system/findface-nnapi.service
в новый файл/etc/systemd/system/findface-nnapi@.service
.sudo cp /lib/systemd/system/findface-nnapi.service /etc/systemd/system/findface-nnapi@.service
Остановите все сервисы
findface-nnapi
и удалите их из автозагрузки. Отредактируйте новый файлfindface-nnapi@.service
, добавив в конец строкиExecStart
опцию--listen 127.0.0.1:%i
.sudo service findface-nnapi stop && sudo systemctl disable findface-nnapi sudo vi /etc/systemd/system/findface-nnapi@.service ExecStart=/usr/bin/findface-nnapi -c /etc/findface-nnapi.ini --listen 127.0.0.1:%i
Создайте новый файл конфигурации nginx.
sudo vi /etc/nginx/sites-available/nnapi
Вставьте следующий текст в файл конфигурации. В тексте замените номера портов, предложенные для экземпляров
findface-nnapi
(upstream nnapibackends
), и номер слушающего порта (listen
) на актуальные значения. Номера портов должны быть уникальны для каждого компонента на сервере.upstream nnapibackends { server 127.0.0.1:18090; server 127.0.0.1:18091; } server { listen 18088; server_name nnapi; client_max_body_size 64m; location / { proxy_pass http://nnapibackends; proxy_next_upstream error; } access_log /var/log/nginx/nnapi.access_log; error_log /var/log/nginx/nnapi.error_log; }
Включите балансировщик нагрузки в nginx.
sudo ln -s /etc/nginx/sites-available/nnapi /etc/nginx/sites-enabled/
Перезапустите nginx.
sudo service nginx restart
Добавьте каждый экземпляр
findface-nnapi
в автозагрузку.sudo systemctl enable findface-nnapi@18090 sudo systemctl enable findface-nnapi@18091
Запустите экземпляры
findface-nnapi
.sudo systemctl start findface-nnapi@18090 sudo systemctl start findface-nnapi@18091
Теперь запросы, отправленные в
findface-nnapi
, будут распределяться между двумя экземплярамиfindface-nnapi
в режиме round-robin. Распределение запросов наглядно отображается в логеfindface-nnapi
/var/log/syslog
(обратите внимание на различные значения id процессов).sudo tail -f /var/log/syslog | grep nnapi Jul 7 03:53:05 ubuntu findface-nnapi[49606]: (2017-07-07 10:53:05) [INFO ] Request: 127.0.0.1:34494 0x7fb100000960 HTTP/1.0 POST /facen Jul 7 03:53:06 ubuntu findface-nnapi[49606]: (2017-07-07 10:53:06) [INFO ] Response: 0x7fb100000960 /facen?x2=0&y1=0&x1=0&y2=0 200 0 Jul 7 03:53:06 ubuntu findface-nnapi[49624]: (2017-07-07 10:53:06) [INFO ] Request: 127.0.0.1:52960 0x7f9cf8000960 HTTP/1.0 POST /facen Jul 7 03:53:06 ubuntu findface-nnapi[49624]: (2017-07-07 10:53:06) [INFO ] Response: 0x7f9cf8000960 /facen?x2=0&y1=0&x1=0&y2=0 200 0 Jul 7 03:53:32 ubuntu findface-nnapi[49606]: (2017-07-07 10:53:32) [INFO ] Request: 127.0.0.1:34502 0x7fb100001ec0 HTTP/1.0 POST /facen Jul 7 03:53:32 ubuntu findface-nnapi[49606]: (2017-07-07 10:53:32) [INFO ] Response: 0x7fb100001ec0 /facen?x2=0&y1=0&x1=0&y2=0 200 0 Jul 7 03:53:32 ubuntu findface-nnapi[49624]: (2017-07-07 10:53:32) [INFO ] Request: 127.0.0.1:52968 0x7f9cf8001ec0 HTTP/1.0 POST /facen Jul 7 03:53:33 ubuntu findface-nnapi[49624]: (2017-07-07 10:53:33) [INFO ] Response: 0x7f9cf8001ec0 /facen?x2=0&y1=0&x1=0&y2=0 200 0
Совет
Вы можете использовать данный метод для балансировки нагрузки между экземплярами компонента на различных физических серверах.