Модуль репликации трафика в реальном времени для Nginx

Nginx

Инструмент репликации трафика

It can be used to increase confidence in code deployments, configuration changes and infrastrucure changes.

—Проект Горплей

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

Мы можем использовать что-то вродеab, wrk, httperf, locust, JMeterДругие инструменты имитируют запросы пользователей, но этих смоделированных запросов недостаточно для восстановления реальной сцены, а шаблоны их запросов слишком однообразны и идеализированы.

Чтобы приблизиться к реальной сцене, мы можем использовать что-то вродеhttperf, vanishreplay, tcpreplay, log-replayВ ожидании, пока инструмент «Автономное воспроизведение» сбросит журнал запросов производственной среды, вы также можете использоватьgoreplay,tcpcopyи другие инструменты «репликации трафика» для захвата трафика производственной среды в режиме реального времени и направления его в целевую тестовую систему. В то же время эти инструменты «репликации трафика» могут даже увеличивать или уменьшать масштаб реального трафика.

Инструменты репликации трафика обычно делятся на две категории: инструменты репликации трафика на уровне приложений и инструменты репликации трафика на основе сетевого стека. Первый вариант прост в реализации, но он будет вытеснять ресурсы онлайн-приложений (такие как ресурсы соединения, ресурсы памяти и т. д.), а также может повлиять на нормальный бизнес из-за высокой связанности. Инструмент репликации трафика, основанный на сетевом стеке, напрямую перехватывает пакеты данных с канального уровня, что мало влияет на приложение, но его реализация относительно сложна.

Модули, которые мы разберем в этой статьеngx_http_mirror_moduleПредставленный в Nginx 1.13.4, это инструмент репликации трафика на уровне приложения. модуль[1]В настоящее время реализованы только две инструкции по настройке, и их использование довольно простое:

location / {
    mirror /mirror;
    proxy_pass
}

location /mirror {
    internal;
    proxy_pass http://test_backend$request_uri;
}

каждыйmirrorЭлемент конфигурации соответствует копии пользовательского запроса, мы можем настроить его несколько разmirrorкоманда для достижения эффекта «усиления потока». Конечно, вы также можете пересылать несколько копий на разные серверные целевые системы.

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