Мы разрабатываем новый сервер, чтобы заменить старый, и хотим поставить бок о бок для тестов до и после - чтобы мы могли сравнить конечный результат и найти расхождения.
Входными данными для обеих служб (старой и новой) являются 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. Я использовал его на стороне клиента, но, насколько я понимаю, его можно использовать на стороне сервера, настроив обратный прокси для вашего старого сервера.