殷雄
摘要摘要:为满足网络视频流量监控及数据统计分析需要,基于C/S模式,采用IOCP技术,设计并实现了网络视频测量分析系统。系统实现了用户网络视频相关数据的测量与统计,可为网络运行商及内容提供商的优化与改进提供参考依据。
关键词关键词:IOCP;网络视频测量;C/S模式
DOIDOI:10.11907/rjdk.1431070
中图分类号:TP319
文献标识码:A文章编号文章编号:16727800(2015)004012402
0引言
随着宽带网络的普及,基于Internet的网络视频服务迅猛发展,其中颇具代表的有基于P2P技术的PPLive 、电信运营商提供的IPTV服务等。相比传统电视,网络视频呈现出以下优势:
(1)播放电视节目更为灵活,可以提供多种频道,还可以通过点播方式选择喜爱的节目。
(2)更为丰富的节目资源、交互式和个性化的观看体验。网络视频系统可以提供丰富的节目,用户可根据分类导航和搜索功能发现特定节目,还可以根据个人喜好收藏节目,并可上传自己制作的视频内容。
网络视频在丰富人们业余生活之时,却忽略了其所造成的流量。CacheLogic公司[1]曾作过统计, P2P应用流量占ISP下行流量的50%~65%、上行流量的75%~90%。目前的流量分析软件基本都是基于路由器统计分析,统计结果仅仅只针对流量类型,不能进行内容分析,而内容分析数据又分布于各网络视频提供商,需要一套系统才能对两种数据直接采集。这些数据分析可以帮助ISP服务商针对结构设计、节点选择、资源分配进行改进,对内容提供商进行网络视频系统的优化与改进提供参考依据。基于此,本文采用IOCP技术构建测量分析系统,结合Android客户端数据采集,实现了一种快速的网络视频测量分析系统。
1IOCP技术介绍
IOCP是Input/Output Completion Port(I/O完成端口)的简称,是一种高性能的I/O模型,使用线程池处理异步重叠I/O(Over lapped I/O)。
IOCP[1]是一种高性能的I/O模型,其模型结构如图1所示。其应用程序使用线程池处理异步I/O请求。过去,在处理多个并发的异步I/O请求时,有很多线程并行地运行在系统中。例如,有多个网络连接时,以往的模型会根据连接数量创建同等数量的线程来进行数据收发,Windows内核需要花费大量的时间进行线程的上下文切换,内核分配给线程的运行时间片就相对减少,而创建线程和注销线程都需要大量的时间片来完成,造成了效率低下。
IOCP采用了重叠I/O(Overlapped I/O)机制。在处理异步I/O请求时,可以创建一个工作线程来统一管理请求,在重叠请求发出后就可以做别的事情,避免了反复创建线程的开销。与此同时,IOCP充分考虑了多核处理器的硬件环境,可以根据CPU的数量来灵活地决定线程的个数,从而减少了线程的调度次数,大幅提高了性能。
2测量方法
网络视频系统测量方法分为主动测量和被动测量。主动测量是使用爬虫进行全网搜索得到用户数据。从理论上来说这种方法不需要用户安装客户端,整个统计过程由服务端自主完成;被动测量方式是根据隐私保护协议为用户安装相应的客户端,由客户端采集用户数据后上传至服务端。被动测量有两种方式[2]:①设置观测点,用以记录和分析网络视频软件数据;②建立日志服务器,用以搜集用户行为记录等相关信息。
2.1观测点测量法
观测点测量法是根据网络的异构性设置多个不同的观测点,配置特定规则的监测工具,用于记录观看节目时产生的流媒体流量数据,通过对流量数据的分析,评估系统性能、分析服务器及网络负载特征以及数据位置信息和稳定性,进而选择系统的节点算法。此种方法基于报文长度的启发式规则:①在一个TCP会话里,累计大于1 200个字节的长报文数目超过10个(对长报文的认定可以调整),即可认定此会话为网络视频会话;②针对确定的网络视频会话,进一步筛选掉控制报文,即剩余视频报文。实践证明,该规则可以有效分离视频与控制流量。
2.2日志测量法
日志测量法是在系统中设置日志服务器,用于采集用户观看行为,根据实际需要记录用户观看的视频标题、观看时间、观看位置等信息。通过对这些记录的分析,可以基本准确地掌握用户到达模式、系统逗留时间等行为。同时可以使用流畅度模型,测量用户实际观看一个节目的时间在节目总时间里的占比。
与主动测量方法不同,被动测量较少对系统造成不良影响,而且被动测量模型可以用于多种系统,通用性较高。基于观测点的被动测量方法受到观察角度的制约,测量结果具有片面性,但是基于系统日志的被动测量方法对测量系统有整体全面的认识。观测点测量法消耗资源较多,为了不影响用户,本文采用日志测量方法。
3系统总体架构
系统采用C/S模式,服务端为操作系统Windows2012,采用IOCP技术搭建服务程序,客户端主要针对Android电视和手机,采用QT框架搭建客户端程序。客户端主要采集如下信息:用户ID、网络视频软件名称、观看视频名称、开始时间、结束时间、流量消耗情况。系统总体架构如图2所示
IOCP服务端流程如图3所示:①服务端首先建立Socket连接;②建立IOCP对象并建立工作池线程;③启动监听线程并等待用户连接;④当客户端连接后,将连接Socket和完成端口关联,工作线程将自动接收该Socket号的数据包;⑤将接收到的数据进行处理。
Android客户端流程如图4所示:①当用户首次启动网络视频软件,如PPLive等,客户端将启动监测;②启动监测后将自动根据用户情况生成客户日志信息;③当用户结束视频观看时,客户端将连接服务端,传回日志信息。
此种处理可以避免客户端长时间占用网络连接造成的网络资源浪费。同时由于日志信息容量较大,故将日志信息保存在SQLite数据库,当网络连接成功后,再逐条将日志信息传送。即使发生用户关机等异常情况,同样可以在下次进行传送;④传送完成后,客户端将处于休眠状态,等待下一次记录开始。
4系统测试
将IOCP网络视频测量服务程序与传统的基于线程池测量服务程序进行性能对比实验,实验环境为2.6 G 8核 8G服务器,测试结果如表1所示。
在连接数为10、100、1 000三种情况下,对CPU 使用率和内存使用量两大主要指标进行对比,可以发现传统线程池模型服务器当连接数成数量级增长时,性能大幅度下降,而IOCP模式的情况要远远优于传统线程池方式。
参考文献参考文献:
[1]刘珍阳.基于IOCP的高性能服务器软件设计[J].计算机与数字工程,2013(7):11541156.
[2]杨阳,马皓, 张晓军, 等. 网络电视的测量与分析研究综述[J].小型微型计算机系统,2011 (7):13021309.
[3]金牧.IOCP机制在P2P 模式网络通信中的应用[J].微计算机信息, 2007,23(8):100102.
[4]马金鑫.基于IOCP 的高并发通信服务器的设计与实现[J].通信技术,2009,42(7):248251.
责任编辑(责任编辑:杜能钢)