## 两种测试场景
* chameleongb请求模式: 独立使用chameleongb作为http web服务器直接对外提供提供http服务
* nginx请求模式: 使用nginx做代理,chameleong作为后端server通过nginx对外提供http服务
## 基于上面两种测试场景具体说明
* chameleongb为基于golang iris框架实现web服务
* 两种模式均在同一容器下测试
* 两种测试场景下除了部署模式不同,网络和服务器配置,容器环境均保持相同和一致
## ab和wrk不同场景数据测试结果汇总
| 压测工具 | 命令 | 是否长连接 | nginx请求模式 | chameleongb请求模式 |
|------|----------------------------------------------|-------|-----------|-----------------|
| ab | ab -n 1000 -c 2 <请求> | 否 | 2966 | 3283 |
| ab | ab -n 1000 -c 8 <请求> | 否 | 7884 | 9117 |
| ab | ab -n 1000 -c 20 <请求> | 否 | 5435 | 12157 |
| ab | ab -n 1000 -c 50 <请求> | 否 | 12751 | 13060 |
| ab | ab -n 1000 -c 100 <请求> | 否 | 11759 | 12437 |
| ab | ab -n 1000 -c 300 <请求> | 否 | 11924 | 11793 |
| ab | ab -n 1000 -c 100 <请求> | 否 | 12950 | 10262 |
| ab | ab -n 3000 -c 100 <请求> | 否 | 9999 | 8012 |
| ab | ab -n 5000 -c 100 <请求> | 否 | 8579 | 7373 |
| ab | ab -n 10000 -c 100 <请求> | 否 | 8379 | 7078 |
| ab | ab -n 20000 -c 100 <请求> | 否 | 8146 | 6854 |
| ab | ab -n 50000 -c 100 <请求> | 否 | 8339 | 6891 |
| ab | ab -n 100000 -c 100 <请求> | 否 | 8331 | 6917 |
| ab | ab -n 500000 -c 100 <请求> | 否 | 7756 | 6960 |
| ab | ab -n 1000 -c 20 -k <请求> | 是 | 16200 | 41365 |
| ab | ab -n 1000 -c 100 -k <请求> | 是 | 27612 | 38782 |
| ab | ab -n 10000 -c 100 -k <请求> | 是 | 10827 | 13620 |
| ab | ab -n 10000 -c 300 -k <请求> | 是 | 10231 | 13837 |
| ab | ab -n 200000 -c 200 -k <请求> | 是 | 10269 | 13568 |
| wrk | wrk -d 3 -c 100 <请求> | 是 | 11261 | 12714 |
| wrk | wrk -d 15 -c 100 <请求> | 是 | 10527 | 12253 |
| wrk | wrk -d 30 -c 200 <请求> | 是 | 10357 | 13189 |
| wrk | wrk -d 60 -c 500 <请求> | 是 | 11006 | 13737 |
| wrk | wrk -H "Connection: Close" -c 100 -d 30 <请求> | 否 | 5754 | 3752 |
| wrk | wrk -H "Connection: Close" -c 200 -d 30 <请求> | 否 | 4736 | 4332 |
| wrk | wrk -H "Connection: Close" -c 200 -d 90 <请求> | 否 | 4222 | 3020 |
## 通过nginx:ab -n 1000 -c 100 <请求> 测试浮动情况汇总
| 压测工具 | 是否长连接 | nginx请求模式 |
|------|-------|-----------|
| ab | 否 | 11847 |
| ab | 否 | 8374 |
| ab | 否 | 8317 |
| ab | 否 | 10493 |
| ab | 否 | 8827 |
## 通过nginx:ab -n 1000 -c 100 <请求> 每次结果为连续执行30次求平均值
| 压测工具 | 是否长连接 | nginx请求模式 |
|------|-------|-----------|
| ab | 否 | 9744 |
| ab | 否 | 6791 |
| ab | 否 | 11618 |
## 基于上述压测验证情况并对结果进行分析:
1. 在客户端使用长连接模式下,使用ab(使用请求总数+并发数)和wrk(使用请求时间+并发数)
进行压测,通过nginx代理请求+chameleongb每秒QPS均低于直接通过chameleongb进行请求20-25%左右
2. 在客户端非长连接模式下,通过nginx代理+chameleongb反而高于直接通过chameleongb进行请求10-15%左右
出现了倒挂的情况,现根据测试结果对该情况的原因结合两种情况模式进行分析推论:
* nginx代理/chameleongb模式: 客户端和nginx建立短链接 + nginx和chameleongb建立长连接和数据传输 +
chameleongb服务
* chameleongb模式:客户端和chameleongb建立短连接 + chameleongb服务
* 对比两种场景模式: nginx代理/chameleongb模式唯一可能具备的优势就在于通过nginx
处理和维护多客户端连接的能力>通过chameleongb服务和多客户端连接处理的能力
nginx模式下nginx和chameleongb建立的为长连接解决了直接通过chameleongb服务短链接的不足
* 在使用ab进行测试过程中客户度使用短链接通过监测客户端连接为独立新建立连接 没有连接复用的情况
* 如果使用ab和wrk直接切换为长连接模式,测试结果发生改变 直接通过chameleongb压测性能均高于通过nginx代理请求模式
* 在nginx代理/chameleongb模式下 如果修改nginx和chameleongb之间的连接为
短链接模式则测试结果发生改变,直接通过chameleongb压测性能均高于通过nginx代理请求模式
* 通过前面几条的验证结果分析 说明唯一当发生变化的就是客户端连接修改为长连接之后数据测试结果才发生改变
充分说明是客户端短链接的维护开销和性能影响了测试结果,通过nginx
处理和维护多客户端连接的能力>通过chameleongb服务和多客户端连接处理的能力使在客户端短链接模式下通过nginx
请求代理模式性能高于直接通过chameleongb访问模式
3. 在通过ab -n 1000进行验证的情况下测试浮动比较大 分析原因是数据量基数比较小 时间太短0.1秒左右 网络延迟 系统瞬时负载
微小的系统和波动事件(比如垃圾回收、磁盘I/O延迟、网络延迟等)都可能对测试结果产生显著影响
* 测试数据差距浮动比较明显 求平均值数据之间差距也比较大 说明每次测试结果随机性比较大
0条评论