STN Benchmark
STN Benchmark
STN 是 Mars 的核心部分,提供了小数据的网络解决方案。在这里分别选取了 AFNetworking 和 OkHttp ,进行 iOS 、 Android 两个平台上的 Benchmark 测试。
注意:
- 以下测试记录的时间单位均为秒;
- 由于测试使用 Mars Sample 的服务器只有1个 IP,为了使 STN 的复合连接策略生效,在 onNewDns 中返回 4 个相同的 IP;
- 由于测试 IP、Port 资源有限,禁用了源码中的 Ban IP 策略;
- 目前暂时只做了短连的对比。
- Benchmark 测试代码为 benchmark_afnetworking_mars.mm, BenchMarkTest.java
Mars VS AFNetworking Benchmark
Mars VS OkHttp Benchmark
一、Mars VS AFNetworking
1. Mars VS AFNetworking In Different Network
测试 Mars VS AFNetworking 在不同网络下的表现性能。测试方法:
- 使用 iOS 自带的 Network Link Conditioner 进行多种网络模拟;
- 连接 Mars Sample上提供的腾讯云服务器,访问 /mars/hello2 的 CGI ;
- 直接使用 IP 访问,避免 DNS 波动;
- 连续访问 CGI,直到成功完成 500 次 CGI 请求;
- STN 的 Task 设置 Retry Count 为 0,即不重试 。
Config 为模拟网络参数(3G、2G 为 iOS 自带配置,30% Loss 的配置为上行、下行的丢包率都设置为30,以此类推)。结果如下:
图表中可以看到,Mars 总体表现优于 AFNetworking:
- 常规网络下,Mars 与 AFNetworking 的表现相近;
- 丢包率较高的情况下,Mars 的总耗时优于 AFNetworking,丢包率越高效果越明显;
- 丢包率较高的情况下,Mars 的尝试次数会多一些,但在可接受范围内。
在单纯的、固定丢包率的实验环境中,Mars 有较好的表现。实际的弱网络环境并不是单一不变的网络,变化的环境要求组件对网络有较好的敏感性。
2. Mars VS AFNetworking 敏感性测试:
- 测试方法:初始设置 100% Loss 网络参数,分别在不同的时间后,恢复为正常网络,观察 Mars 和 AFNetworking 的表现;
- 每种时间段进行 3 次测试,记录完成时间的差值,正数表明 Mars 先完成 CGI,负数表明 AFNetworking 先完成,差值为间隔的秒数;
- 结果说明:这个测试方法只能体现到连接上的敏感性差异,对于连接成功后的网络变动敏感性并不能反映,目前还没有找到合适的网络模拟工具。
结果表明,Mars 的网络敏感性优于 AFNetworking:
Config | Mars VS AFNetworking R1 | Mars VS AFNetworking R2 | Mars VS AFNetworking R3 |
---|---|---|---|
5s 100% Loss | 1.0 | 0.98 | 1.13 |
10s 100% Loss | 0 | 0 | 0 |
15s 100% Loss | 3.07 | 3.06 | 3.07 |
20s 100% Loss | 13.9 | 14.1 | 14.1 |
25s 100% Loss | 7.99 | 8.09 | 8.3 |
30s 100% Loss | 3.9 | 3.96 | 3.99 |
35s 100% Loss | 37.2 suc VS 61.0 fail | 37.4 suc VS 60.3 fail | 37.2 suc VS 60.3 fail |
3. Mars VS AFNetworking In Different Request Size
测试方法:设置不同的请求大小,在不同网络下进行连续 50 次 CGI。结果如下,成功率均为100%,各自表现差异性小。
3.1 64KB Request
Mars | AFNetworking | |
---|---|---|
3G | 平均耗时:2.4秒 总耗时:120秒 | 平均耗时:2.44 总耗时:122 |
2G | 平均耗时:6.36 总耗时:318秒 | 平均耗时:6.74 总耗时:337秒 |
3.2 128KB Request
Mars | AFNetworking | |
---|---|---|
3G | 平均耗时:4.04 总耗时:202 | 平均耗时:4.06 总耗时:203 |
2G | 平均耗时:9.22 总耗时:461 | 平均耗时:9.4 总耗时:470 |
4. Mars VS AFNetworking In Different Response Size
测试方法:设置不同的回包大小,在不同网络下进行连续 50 次 CGI。结果如下,成功率均为100%。各自表现差异性小。
4.1 64KB Response
Mars | AFNetworking | |
---|---|---|
3G | 平均耗时:1.29 总耗时:64.5 | 平均耗时:1.3 总耗时:65 |
2G | 平均耗时:4.56 总耗时:228 | 平均耗时:4.56 总耗时:228 |
4.2 128KB
Mars | AFNetworking | |
---|---|---|
3G | 平均耗时:2.66 总耗时: 133 | 平均耗时:2.58 总耗时: 129 |
2G | 平均耗时:6.84 总耗时: 342 | 平均耗时:6.82 总耗时: 341 |
二、Mars VS OkHttp
1. Mars VS OkHttp in Different Network
测试 Mars VS OkHttp 在不同网络下的表现性能。测试方法:
- 使用微信自研的网络模拟路由(类似FaceBook ATC),进行多种网络模拟,模拟参数与 iOS 的 Network Link Conditioner 一致;
- 连接 Mars Sample 上提供的腾讯云服务器,访问 /mars/hello2 的 CGI ;
- 直接使用 IP 访问,避免 DNS 波动;
- 连续访问CGI,直到成功完成 500 次 CGI 请求;
- STN 的 Task 设置 Retry Count 为 0,即不重试 。
Config 为模拟网络参数(3G、2G 为 iOS 自带配置,30% Loss 的配置为上行、下行的丢包率都设置为30,以此类推)。结果如下:
图表中可以看到,Mars 总体表现优于 OkHttp:
- 常规网络下,Mars 与 AFNetworking 的表现相近;
- 丢包率较高的情况下,Mars 的尝试次数、总耗时均优于 OkHttp,丢包率越高效果越明显。
在单纯的、固定丢包率的实验环境中,Mars 有较好的表现。实际的弱网络环境并不是单一不变的网络,变化的环境要求组件对网络有较好的敏感性。
2. Mars VS OkHttp 敏感性测试:
- 测试方法:初始设置 100% Loss 网络参数,分别在不同的时间后,恢复为正常网络,观察 Mars 和 OkHttp 的表现;
- 结果说明:每种时间段进行 3 次测试,记录完成时间的差值,正数表明 Mars 先完成 CGI,负数表明 OkHttp 先完成,差值为间隔的秒数;
- 为测试更长的时间范围,OkHttp 的连接超时由默认的 10s 修改为 60s;
- 结果说明:这个测试方法只能体现到连接上的敏感性差异,对于连接成功后的网络变动敏感性并不能反映,目前还没有找到合适的网络模拟工具。
结果如下,Mars 的网络敏感性优于 OkHttp:
Config | Mars VS OkHttp R1 | Mars VS OkHttp R2 | Mars VS OkHttp R3 |
---|---|---|---|
5s 100% Loss | -0.036 | -0.027 | -0.022 |
10s 100% Loss | 2.9 | 2.86 | 2.86 |
15s 100% Loss | 13.9 | 13.85 | 14 |
20s 100% Loss | 7.95 | 7.97 | 7.93 |
25s 100% Loss | 3.1 | 3.11 | 3.1 |
30s 100% Loss | 31.98 suc vs OkHttp 60.0 fail | 31.91 suc vs OkHttp 60.0 fail | 31.9 suc vs OkHttp 60.0 fail |
3. Mars VS OkHttp In Different Request Size
测试方法:设置不同的请求大小,在不同网络下进行连续 50 次 CGI。结果如下,成功率均为100%,各自表现差异性小。
3.1 64KB Request
Mars | OkHttp | |
---|---|---|
3G | 平均耗时:2.28 总耗时:114 | 平均耗时:2.26 总耗时:113 |
2G | 平均耗时:5.3 总耗时:265 | 平均耗时:5. 64 总耗时:282 |
3. 2 128KB Request
Mars | OkHttp | |
---|---|---|
3G | 平均耗时:3.94 总耗时:197 | 平均耗时:3.9 总耗时:195 |
2G | 平均耗时:7.78 总耗时:389 | 平均耗时:7.78 总耗时:389 |
4. Mars VS OkHttp In Different Response Size
测试方法:设置不同的回包大小,在不同网络下进行连续 50 次 CGI。结果如下,成功率均为100%,各自表现差异性小。
4.1 64KB Response
Mars | OkHttp | |
---|---|---|
3G | 平均耗时:2.34 总耗时:117 | 平均耗时:2.2 总耗时:110 |
2G | 平均耗时:5.36 总耗时:268 | 平均耗时:5.68 总耗时:284 |
4.2 128KB Response
Mars | OkHttp | |
---|---|---|
3G | 平均耗时:3.16 总耗时:158 | 平均耗时:3.0 总耗时:150 |
2G | 平均耗时:7.14 总耗时:357 | 平均耗时:7.24 总耗时:362 |