我们正在开发一个新服务器来替换旧服务器,并且希望将其并排进行前后测试 - 以便我们可以比较最终结果并发现差异。
两个服务(新旧)的输入都是 HTTP 请求(大部分都是 GET,也可能是 POST),我们需要复制并发送至旧服务器的流量也到新服务器(而不是)。当然,我们需要对请求中的主机名和端口做一些轻微的重写,以避免无限循环。
旧服务器在 Apache(PHP)上运行,新服务器在 Jetty(Java、Dropwizard)上运行
一定有办法做到这一点,我只是找不到 Google 搜索的关键词......
答案1
我们最终选择使用 Gor(现在是 GorReplay)https://github.com/buger/goreplay
该解决方案允许在原始主机上安装一个监听器,它的作用是记录任何传入的 HTTP 请求,而无需修改它或阻止生产服务器处理它。
然后,它将这些请求推送到 Gor 重放服务器,该服务器可以根据传入的请求处理各种有用的拆分/增加负载逻辑 - 您可以将一定比例的请求发送到开发服务器,或者将请求相乘以在您的暂存环境中创建模拟(但来自真实流量)负载,或两者兼而有之......
遗憾的是,这是在服务器级别,因此您必须在每个生产服务器上安装才能获取所有流量,但您不必这样做,它为我的问题中列出的问题提供了一个很好的解决方案。
答案2
虽然这不是您所要求的,但我还是建议使用另一种方法来测试新服务器。
如果您在两台服务器前面放置一个负载平衡器并使用负载平衡算法,您可以同时测试新服务器并逐步替换旧服务器。您可以将 99% 的请求发送到旧服务器,其余 1% 的请求将发送到新服务器,您可以在其中仔细检查服务是否按预期运行。
如果一切正常,您可以逐渐增加负载;90%-10%,80%-20%,等等。
提示:检查 haproxy 和weight
和static-rr
选项。
答案3
还有另一个用 NodeJS 编写的工具,它是免费的https://www.npmjs.com/package/duplicator或者在 githubhttps://github.com/agnoster/duplicator
由于这个问题已经过去太久了,即使对最初的请求者来说这不是什么好事,至少希望这可以帮助其他读者。