目前,p2p网络技术已经比较成熟。由于具有节省带宽和加快速度两大优势,近些年已经被各大视频播放器和下载软件所采用。在这里,简单分享一下p2p下载技术和测试的方法。

  一、什么是p2p

  p2p即peer to peer,指的是对等网络。

  传统的文件下载服务都是基于客户端/服务器模型,文件存储在服务器上,用户通过客户端向服务器请求文件下载。在下载过程中,仅仅是服务器单向地对客户端传输。如图:

  p2p云服务器是什么_什么事云服务器_什么是云端服务器

  图 1 传统客户端/服务端模型

  这种网络的瓶颈在于服务器。当有大量用户同时从服务器下载的时候,无论是对服务器的压力还是带宽来讲,都是很大的考验。对于百度网盘,某些热门资源的突然出现会使得流量暴涨,尤其是在高峰时段。给云存储及后端服务器造成较大压力,并极大的增加了带宽成本,因此引入p2p传输方式,在节省带宽的同时,也能提高用户的下载速度,增强用户体验。

  p2p的核心就是实现peer间互联,让端与端之间互相传输数据,如图:

  p2p云服务器是什么_什么事云服务器_什么是云端服务器

  图 2 p2p网络模型

  这种网络的优点是,能够让每一个下载的客户端进行资源的共享。在下载的同时,也能够向其他的客户端做上传操作。将服务器的压力分散到各个客户端。

  二、p2p下载过程

  在网盘客户端上,p2p服务是以动态链接库或静态链接库的形式嵌入到各端内,p2p任务下载过程如下:

  1、资源上报

  p2p客户端会将已下载的热门资源上报到服务端,以便其他端下载同一资源的时候可以做种上传。上报资源的时机有两个,一是客户端调起p2psdk的时候,sdk会检查本地数据库,查看是否有已经下好的资源,如果有则上报;二是在下载过程中,资源分片下载完成的时候实时上报。

  2、peer筛选

  用户添加一个下载任务,客户端会向p2p服务端发送请求,查询该文件是否为热门资源。如果该任务为p2p任务,为了保证传输的高效性,服务端会返回优选过的peer列表信息,客户端就可以去连相应的peer传输数据。优选的规则如下:

  p2p云服务器是什么_什么事云服务器_什么是云端服务器

  图 3 peer优选规则

  3、peer间数据交互

  客户端拿到资源相应的peer信息后,就会尝试去连接这些peer。根据对端和自身的NAT类型,选择不同的打洞策略。下图是打洞及传输的流程:

  什么是云端服务器_什么事云服务器_p2p云服务器是什么

  图 4 打洞传输流程图

  Peer间连接的建立首先通过服务器进行穿透,收到对方的网络信息请求则表示穿透成功。同时Peer马上向对端的Peer发送数据请求,回复请求后则开始收发数据。

  三、p2p下载测试

  如上所述,当我们在下载一个资源的时候,能拿到的peer越多,peer的质量越好,下载速度就会越高。所以,p2p网络必须在大量的节点下部署才能够看出策略所带来的效果。然而在日常测试中,p2p主要是以sdk的形式集成到各端进行功能的验证。由于测试机数量有限,网络环境单一,给测试带来很大的困难。

  实际上,在测试p2p的时候,客户端与服务器的交互都可以通过实时的日志来跟踪定位。但我们不能只关注过程而忽略了结果,到底本次的速度优化有没有效果,崩溃率有没有降低,各种网络环境下的数据交互是否正常,这些都应该是可度量,可评估的。下面针对这三方面来介绍一下QA所做的相应的工作:

  1、下载速度详细信息的查看

  p2p最大的作用,一个是节省带宽,一个是提高速度。使用端来测试p2psdk的时候,端上展示的是下载的总速度。但是对于p2p来讲,由于是混合下载,数据源有多种,需要展示速度的详细分布信息。因此,开发了一个涵盖多个端的web测试监控平台。

  首先配置上报级别、后端服务器地址,然后再启动网盘下载任务,就可将实时的速度和peer信息上报。服务器对这些数据处理存库,再在万花瞳平台页面上展示出来,就可以得到比较直观的量化指标。

  如下表所示,可以清楚的看到速度的平均值、最大值和来源分布:

  什么是云端服务器_p2p云服务器是什么_什么事云服务器

  图 5 速度结果表格

  通过速度变化曲线可以使得下载过程一目了然,图中还可以通过不同peer的速度信息看到当前peer的网络情况:

  什么是云端服务器_什么事云服务器_p2p云服务器是什么

  图 6 速度变化曲线

  2、崩溃收集与崩溃率的统计

  由于p2p策略的复杂性,除了少数的必现的崩溃能够在线下发现,更多的还要靠小流量期间用户的真实网络环境触发。

  p2p的崩溃收集环境实现了崩溃文件的收集、解析和分类统计等功能,可以对线上的崩溃率进行有效的评估。

  统计的时候,利用p2p各版本对应的符号表解析出堆栈信息,对每个版本小时级别的崩溃数求和。由于p2p是在用户下载和视频播放的过程中用到的,流量越多,表明sdk的使用越频繁,发生崩溃的可能性越大,所以,计算出的版本崩溃数要分别与init数和p2p流量做百分比。

  p2p云服务器是什么_什么事云服务器_什么是云端服务器

  图 7 崩溃率变化曲线(1)

  什么事云服务器_什么是云端服务器_p2p云服务器是什么

  图 8 崩溃率变化曲线(2)

  如图所示,可以将小流量版本与线上版本做对比分析。如果小流量的时候发现占比过高,可以直接停止放量,利用堆栈的详细信息定位问题。

  3、sdk自动化测试探索

  p2psdk的测试,目前主要集中在三端,即PC、Android和iOS。当前的测试方法,一种是将sdk打包到端上,然后通过安装包安装;一种是在现有的端进行sdk的替换。但是两种方法归根结底都是通过端上的点击去进行case的构造。当然,这种方式有其优点,就是能够真正贴近用户操作。但是与此同时,也暴露出了很多的缺点,比如没有接口级别的测试,case覆盖不全;自动化测试难推进;测试的机型及网络环境较单一等等。

  因此,开发一个仿真环境,用于模拟网络异常,测试p2psdk接口的稳定性,构造自动化case并收集相关数据统计。架构如下图:

  p2p云服务器是什么_什么是云端服务器_什么事云服务器

  图 9 仿真模拟架构图

  线下仿真环境的优势是能够脱离端上交互来直接访问接口,便于构造自动化测试来节省人力。难点在于模拟网络干扰,p2p下载过程中,客户端与服务器之间,客户端与客户端之间都有请求和数据交互,需要模拟出真实环境下会发生的各种网络情况,比如延时、丢包等。解决方案是通过Chaosproxy层构造可叠加的链式异常动态,无需修改模块配置,实现可注入式异常配置。下载任务结束时上报相应统计,服务端可根据统计信息分析出线下分享率连通率等概况。

  作者介绍

  什么事云服务器_什么是云端服务器_p2p云服务器是什么

  钟万新

  百度个人云部测试开发工程师,目前负责百度网盘边缘计算方向的测试工作。

  p2p云服务器是什么_什么事云服务器_什么是云端服务器

最后修改:2024 年 07 月 25 日
如果觉得我的文章对你有用,请随意赞赏