Skip to content

STN Benchmark

garryyan edited this page Mar 21, 2017 · 7 revisions

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

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

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
Clone this wiki locally