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,以此类推)。结果如下:

STN Benchmark - 图1

图表中可以看到,Mars 总体表现优于 AFNetworking:

  • 常规网络下,Mars 与 AFNetworking 的表现相近;
  • 丢包率较高的情况下,Mars 的总耗时优于 AFNetworking,丢包率越高效果越明显;
  • 丢包率较高的情况下,Mars 的尝试次数会多一些,但在可接受范围内。在单纯的、固定丢包率的实验环境中,Mars 有较好的表现。实际的弱网络环境并不是单一不变的网络,变化的环境要求组件对网络有较好的敏感性。

2. Mars VS AFNetworking 敏感性测试:

  • 测试方法:初始设置 100% Loss 网络参数,分别在不同的时间后,恢复为正常网络,观察 Mars 和 AFNetworking 的表现;
  • 每种时间段进行 3 次测试,记录完成时间的差值,正数表明 Mars 先完成 CGI,负数表明 AFNetworking 先完成,差值为间隔的秒数;
  • 结果说明:这个测试方法只能体现到连接上的敏感性差异,对于连接成功后的网络变动敏感性并不能反映,目前还没有找到合适的网络模拟工具。结果表明,Mars 的网络敏感性优于 AFNetworking:
ConfigMars VS AFNetworking R1Mars VS AFNetworking R2Mars VS AFNetworking R3
5s 100% Loss1.00.981.13
10s 100% Loss000
15s 100% Loss3.073.063.07
20s 100% Loss13.914.114.1
25s 100% Loss7.998.098.3
30s 100% Loss3.93.963.99
35s 100% Loss37.2 suc VS 61.0 fail37.4 suc VS 60.3 fail37.2 suc VS 60.3 fail

3. Mars VS AFNetworking In Different Request Size

测试方法:设置不同的请求大小,在不同网络下进行连续 50 次 CGI。结果如下,成功率均为100%,各自表现差异性小。

3.1 64KB Request

MarsAFNetworking
3G平均耗时:2.4秒 总耗时:120秒平均耗时:2.44 总耗时:122
2G平均耗时:6.36 总耗时:318秒平均耗时:6.74 总耗时:337秒

3.2 128KB Request

MarsAFNetworking
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

MarsAFNetworking
3G平均耗时:1.29 总耗时:64.5平均耗时:1.3 总耗时:65
2G平均耗时:4.56 总耗时:228平均耗时:4.56 总耗时:228

4.2 128KB

MarsAFNetworking
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,以此类推)。结果如下:

STN Benchmark - 图2

图表中可以看到,Mars 总体表现优于 OkHttp:

  • 常规网络下,Mars 与 AFNetworking 的表现相近;
  • 丢包率较高的情况下,Mars 的尝试次数、总耗时均优于 OkHttp,丢包率越高效果越明显。在单纯的、固定丢包率的实验环境中,Mars 有较好的表现。实际的弱网络环境并不是单一不变的网络,变化的环境要求组件对网络有较好的敏感性。

2. Mars VS OkHttp 敏感性测试:

  • 测试方法:初始设置 100% Loss 网络参数,分别在不同的时间后,恢复为正常网络,观察 Mars 和 OkHttp 的表现;
  • 结果说明:每种时间段进行 3 次测试,记录完成时间的差值,正数表明 Mars 先完成 CGI,负数表明 OkHttp 先完成,差值为间隔的秒数;
  • 为测试更长的时间范围,OkHttp 的连接超时由默认的 10s 修改为 60s;
  • 结果说明:这个测试方法只能体现到连接上的敏感性差异,对于连接成功后的网络变动敏感性并不能反映,目前还没有找到合适的网络模拟工具。结果如下,Mars 的网络敏感性优于 OkHttp:
ConfigMars VS OkHttp R1Mars VS OkHttp R2Mars VS OkHttp R3
5s 100% Loss-0.036-0.027-0.022
10s 100% Loss2.92.862.86
15s 100% Loss13.913.8514
20s 100% Loss7.957.977.93
25s 100% Loss3.13.113.1
30s 100% Loss31.98 suc vs OkHttp 60.0 fail31.91 suc vs OkHttp 60.0 fail31.9 suc vs OkHttp 60.0 fail

3. Mars VS OkHttp In Different Request Size

测试方法:设置不同的请求大小,在不同网络下进行连续 50 次 CGI。结果如下,成功率均为100%,各自表现差异性小。

3.1 64KB Request

MarsOkHttp
3G平均耗时:2.28 总耗时:114平均耗时:2.26 总耗时:113
2G平均耗时:5.3 总耗时:265平均耗时:5. 64 总耗时:282

3. 2 128KB Request

MarsOkHttp
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

MarsOkHttp
3G平均耗时:2.34 总耗时:117平均耗时:2.2 总耗时:110
2G平均耗时:5.36 总耗时:268平均耗时:5.68 总耗时:284

4.2 128KB Response

MarsOkHttp
3G平均耗时:3.16 总耗时:158平均耗时:3.0 总耗时:150
2G平均耗时:7.14 总耗时:357平均耗时:7.24 总耗时:362