生产环境模拟:使用Gor复制生产环境流量

一、引言

这两周在开发广告服务平台时,部署新版程序出现了在本地测试与服务器生产环境测试差异很大,导致新版上线延迟的问题。主要表现在线上500台左右设备请求并发时,新版程序无法稳定运行的问题。

由于是新开发的平台,测试环境并未配置齐全,并且生产环境服务器并未使用Jenkins等持续集成工具,无法进行良好的版本控制,新版本与上一版本改动较大,无法精准定位问题所在。

因此决定复制生产环境的流量,模拟出同等条件的测试环境,进行问题排查。

我们选择使用go语言实现的简单的http流量复制工具——Gor,将80端口的流量进行等量复制到测试环境端口中,模拟条件相同的压力测试环境,采用与生产环境相同的测试数据库,找到并且解决问题。

二、Gor简介

Gor 是一款go语言实现的简单的http流量复制工具,它的主要目的是使你的生产环境HTTP真实流量在开发环境和语言预演环境(staging  server)重现。

Gor下载地址https://github.com/buger/goreplay/releases

工具使用非常简单,并同时支持linux、mac、windows版本。下面是它的工作的流程,监听服务器捕捉http流量,把捕捉到的流量发送到重现服务器上或者保存到文件中,重现服务器再继续把流量发送到一个指定的ip地址。

三、用法简介

使用Gor,将下载的文件复制到目标盘中,windows下为exe文件,在盘符中shift+右键进行命令行操作。按照下列操作可以使用gor各种功能。

简单的 HTTP 流量复制:

gor –input-raw :80 –output-http “http://staging.com”

HTTP 流量复制频率控制:

gor –input-tcp :28020 –output-http “http://staging.com|10″

HTTP 流量复制缩小:

gor –input-raw :80 –output-tcp “replay.local:28020|10%”

HTTP 流量记录到本地文件:

gor –input-raw :80 –output-file requests.gor

HTTP 流量回放和压测:

gor –input-file “requests.gor|200%” –output-http “staging.com”

HTTP 流量过滤复制:

gor –input-raw :8080 –output-http staging.com –output-http-url-regexp ^www.

注入改变请求流量header:

gor –input-raw :80 –output-http “http://staging.server”  –output-http-header “User-Agent: Replayed by Gor”   –output-http-header “Enable-Feature-X: true”

可以通过 gor –help 查看更多用法。

四、总结

在测试环境不成熟的开发中,可以通过Gor等流量复制工具,将生产环境的流量进行复制。通过压力测试进行正式上线的仿真测试。

经压力测试排查,发现问题根源并非存在于新版程序中,而在于tomcat的环境配置中时区设置出现问题。导致对于数据库的时间插入以及搜索操作出现时间偏差,导致程序中不断循环插入检索相同的字段,导致数据库的“死锁”问题。

这也警示我们设计程序的时候,需要考虑到大量并发可能出现的问题,并进行预防。并且需要有良好的测试设计。

猜你喜欢

转载自my.oschina.net/u/3487162/blog/1576706
今日推荐