Назад | Перейти на главную страницу

Необходимо ДУБЛИРОВАТЬ HTTP-запросы на два сервера

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

Входными данными для обеих служб (старой и новой) являются HTTP-запросы (в основном, если не все GET, но, возможно, также POST), нам нужно, чтобы трафик, поступающий на старый сервер, дублировался и отправлялся. также на новый сервер (не вместо этого). конечно, нам нужно будет немного изменить имя хоста и порт в запросе, чтобы избежать бесконечного цикла.

Старый сервер работает на Apache (PHP), новый - Jetty (Java, Dropwizard)

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

В конечном итоге мы выбрали Gor (теперь GorReplay). https://github.com/buger/goreplay

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

Затем он отправляет эти запросы на сервер воспроизведения Gor, который может обрабатывать всевозможные полезные логики разделения / увеличения нагрузки на основе входящих запросов - вы можете отправить процент запросов на сервер разработки или умножение запросов для создания смоделированных (но из реального трафика) нагрузки на вашу промежуточную среду, или и то, и другое ...

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

На NodeJS есть еще один бесплатный инструмент. https://www.npmjs.com/package/duplicator или в гитхабе https://github.com/agnoster/duplicator

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

Хотя это не то, о чем вы просите, я предлагаю другой подход для тестирования нового сервера.

Если вы поставите балансировщик нагрузки перед обоими серверами и поиграете с алгоритмами балансировки нагрузки, вы сможете одновременно протестировать новый сервер и постепенно заменить старый. Вы можете отправить 99% запросов на старый сервер, а оставшийся один процент запросов пойдет на новый, где вы сможете внимательно проверить, работает ли служба должным образом.

Если все работает нормально, можно постепенно увеличивать нагрузку; 90% -10%, 80% -20% и так далее.

Подсказка: проверьте haproxy и weight и static-rr параметры.

Это, наверное, поздно, но для тех, кому это понадобится позже;

Ты можешь использовать митмпрокси сделать это. Он позволяет дублировать и изменять (в вашем случае менять хост) захваченных запросов. На самом деле есть пример об этом в репозитории github. Я использовал его на стороне клиента, но, насколько я понимаю, его можно использовать на стороне сервера, настроив обратный прокси для вашего старого сервера.