用Goreplay分发HTTP请求

缘起

需求是因为有个项目是处理下游设备推送数据处理的,下游设备通过HTTP协议把数据推送给服务端。现在我们需要开发一个新版本的服务端,需要真实的设备推送数据做测试,但是原项目还在正常使用,不可中断,我们又拿不到可供测试的下游设备,按照文档构造测试数据又怕不够全面,可能测试覆盖不够。

为了解决这个问题,就需要一个工具能实现这样的功能:

  • 基本功能:安装在生产服务端,把收到的HTTP请求复制一份,转发到新的服务器上做测试。
  • 扩展功能:按可选条件过滤请求。

解决方案

还好早就有人提供了这样的解决方案:goreplay

这是一个GO写的工具,可以实现上面说的功能,而且能做得更多。

比如我们的需求就可以这样实现:

sudo ./gor --input-raw :8000 --output-http http://new_server:8080 --http-allow-url=/api/device_push

当然,实际上我是套了一个supervisor在跑的。

推送到[go4pro.org]