目前服务于Web与移动直播的流媒体系统,一般由于骨干网核心机房网络质量有保证,同时媒体流发布客户端如果到服务器的网络出现卡顿现像,会影响所有流媒体播放端用户,因此为保护媒体流发布客户端至服务器的网络质量,多数是在骨干网核心机房部署源流媒体服务器,媒体流发布客户端将媒体流发布于源流媒体(也就是说只提供发布流服务),源流媒体服务器之间通过媒体流状态管理服务器共享媒体流状态信息,进而实现源流媒体服务器间互相按一定规则传输媒体流,每台源流媒体下面再依树形结构挂载多级中转流媒体服务器(提供从上到下的中继中转服务),中转流媒体服务器下面再挂接边缘流媒体服务器(只提供播放流服务),这样的流媒体服务器部署结构带来如下问题:1 由于骨干网核心机房流量单价昂贵,导致源流媒体服务器流量支出费用较高;2 中间多级中转流流媒体服务器加大了端对端的时延,降低了用户体验;3 骨干网核心机房虽稳定,但分布全国的媒体流发布端与之网络质量不一定是最快的。为克服上这些问题,本文提出一种基于网络流量统计与反馈实现边缘机房间媒体流流量调度的方法,描述如下:
1 将整个用于流媒体服务器的网络划分骨干网核心机房与边缘机房, 主与备用两个核心机房部署中转流媒体服务器(提供跨网络运营商的少量的中转服务)与核心级媒体流管理服务器,多个边缘机房部署边缘流媒体服务器(同时提供发布流与播放流服务)与边缘级媒体流管理服务器。
2 每个边缘机房的边缘级媒体流管理服务器与主备两个核心机房的核心级媒体流管理服务器同时建立网络常连接,连接建立后立即上报其所在机房ID,同时该连接还用于上报或查询涉及跨机房的媒体流信息及机房间网络质量统计信息。
3 每个边缘机房部署修改过的LVS,其分析媒体流名称后将所有请求发布或播放某一同名媒体流的流媒体客户端都尽可能的引导到同一台边缘流媒体服务器,并由其提供流媒体服务。
4 每个核心机房的中转流媒体服务器启动后主动连接至该机房的核心级媒体流管理服务器,连接上后立即上报流媒体服务器ID,并维持常连接、不断上报自身负载信息。
5 每个边缘机房的边缘流媒体服务器启动后主动连接至该机房的边缘级媒体流管理服务器,连接上后立即上报流媒体服务器ID,并维持常连接、不断上报自身负载信息,边缘级媒体流管理服务器在重新或新启动时若设定了‘下发至其它机房的网速测试选项’(该选项在边缘级媒体流管理服务器与该机房的边缘流媒体服务器同时重新启动时设定该选项,若仅仅由于边缘级媒体流管理服务器升级改造而瞬时重启不需要设定该选项,因为该机房的边缘流媒体服务依然在运行,并且在不断尝试与边缘级媒体流管理服务器建立连接,若成功会立即上报发布于其本身的媒体流信息与到其它机房的流量统计信息)或在一定时间内(比如5秒内),没有收到来自边缘流媒体服务器关于本机房A至另一机房B的网络统量统计信息(可能另一机房集体挂掉或本机房至另一机房先前网络质量差导致两机房间无直接推播放流,但后一种情况依然需要不断测速,因为网络时好时坏,非一成不变的),边缘机房的边缘媒体流管理服务器跟据一定规则(比如当前负载最轻)从所有连接至其的边缘流媒体服务器中挑选一台流媒体服务器向机房B的任一台边缘流媒体服务器S1发布流,该流流名称通过加前缀特殊化以与正常媒体流做区分,该流为来自磁盘多媒体文件的文件流(其码率高于该流媒体系统预计的最大单路媒体流码率1倍,不可太大,浪费流量,太小,不足以提供参考数据),专用于测速,为后序流量调度积累参数指标,被挑选的流媒体服务器不断循环读取前述磁盘文件,然后周期性(比如2秒)上报网络质量统计报告给边缘级媒体流管理服务器(边缘级媒体流管理服务器经过计算汇总后将A机房至B机房的网络质量统计结果上报主备核心机房核心级媒体流管理服务器,该统计结果包括A机房至B机房流畅发布流数据、卡顿发布流数量、当前总流量等信息),直到有从A机房至B机房2路以上媒体流的统计数据结束本轮由A机房至B机房方向的网络测速(因为测速流量属于不服务于用户的无效流量,所以在有了真实媒体流的网络质量统计数据后,及时停止,以免浪费流量,结合运营商一般按峰值结算流量费用,所以如果两机房都没有媒体流传输时,可进行测速的,正常不会超过峰值流量的),B机房或其它边缘机房至A机房方向的测速要单独进行,因为两个方向的网络质量可不同(上行下行不同)。
5_1 当流媒体发布客户端推送媒体流MS5至某边缘流媒体服务器S5时,S5上报其所在机房的媒体流管理服务器M5,M5记录MS5与S5的对应关系后,上报主备核心机房核心级媒体流管理服务器,它们也分别记录MS5与S5的对应关系。
6 当流媒体播放客户端C1向某边缘机房A1的边缘流媒体服务器S6请求播放某媒体流MS6时,若S6已经存在MS6,直接转发;否则执行下面第6_1步。
6_1 S6向其所在机房的边缘级媒体流流服务器M6查询最优承载MS6的流媒体服务器网络地扯,M6查询自身,若本机房某流媒体服务器已经承载MS6,向S6返回该流媒体服务器地扯(通过第三步,同一个边缘机房尽可能的将某一媒体流的流量中转服务集中于某一流媒体流服务器,所以同机房两流服务器发生流量交换的机率很低,但是若对于某一媒体流有大量观众时,可能会超出单台流媒体服务器的负载,为完备性考虑,特设计这一环节);否则,M6若与主核心机房核心级媒体流管理服务器保持正常链接,则向其转发查询;否则向备核心机房核心级媒体流管理服务器转发查询。核心级媒体流管理服务器TM6收到查询后,跟据请求参数,先从先前边缘媒体流管理服务器上报的媒体流信息中收集所有承载MS6的流媒体服务器列表,若列表为空(说明MS6不存在),回复M6该流不存,M6收到回复后再回复给S6,S6收到后向C1发送未开播提示后关闭同其的网络连接;否则跟据列表中的流媒体服务器它们所在的机房至A1方向的网络质量统计结果按一定算法选出最优承载MS6的流媒体服务器网络地扯,该算法主要考虑指标为网速、中转层级(原则上不超过二级,比如媒体流发布端发布MS6至长春联通机房的某流服务器S6_1算是一级,汕尾机房的某流媒体服务器S6_2从S6_1播放流算是第二级,在这个算法中只考虑到第二级以保证总转发层数不超过3级)、是否同运营商、地域是否靠近,若选出将其地扯做为参数同时附加直接播放流标志为1回复给M6,M6再回复给S6,S6查看直接播放流标志为1,直接向前述地扯播放流;否则查看核心机房某流媒体服务器是否已承载MS6,若是以其地扯做为参数同时附加直接播放流标志为1回复给M6,M6再回复给S6,S6查看直接播放流标志为1,直接向前述地扯播放流;否则从核心机房挑选一台负载最轻的流媒体服务器S6_3地扯作为参数同时附加MS6直接发布其上的流媒体服务器S6_4的地扯、直接播放流标志为0回复M6,M6回复S6,S6查看到直接播放流标志为0,向S6_3请求播放媒体流MS6,同时在播放请求参数附带S6_4的网络地扯,S6_3收到播放请求后,取出S6_4的地扯,向其播放流,S6_4收到请求后,向S6_3转发媒体流MS6,S6_3收到媒体流后向S6转发该流。
7 每个核心机房的中转流媒体服务器在拉到新媒体流时,向其所在顶级机房媒体流管理服务器上报该流媒体服务器开始承载该流通知,在媒体流断开时上报不在承载该媒体流通知,中转流媒体不上报网络质量信息。
8 当某边缘机房A8的流媒体服务器S8_1收到另一机房B8的流媒体服务器S8_2的播放媒体流MS8的请求后,若这时候流不存在了,先发流已停播通知给S8_2,然后关闭连接;否则S8_1向S8_2转发媒体流,同时周期性(比如2秒)向A8机房的媒体流管理服务器M8上报S8_1至S8_2方向的网络报告。该质量报靠除了网速、否是卡顿,还包括A8、B8的机房ID,S8_1、S8_2的服务器ID与服务器IP等信息,以便M8将该报靠同其它报告一起归纳汇总后形成统计报告周期性上报给主备核心机房的媒体流管理服务器。当S8_1检测到关于媒体MS8出现卡顿时(由出流方检测,因为入流方不好检测,举例来说吧,码率有大有小,不固定,不能说小的码率就一定卡,也不能用帧率来衡量,因为在一个流媒体系统中跟据业务不同帧率也是不同的,有的业务的视频流原本帧率是25,在20帧时就算卡了,但是有的业务的视频流本身才15帧的帧率),向S8_2发送媒体流卡顿通知但是并不关闭媒体流。S8_2收到关于MS8的媒体流卡顿通知或自身检测到MS8的接受网速特别低时(比如低于10K更差,这时靠等S8_1的通知,也许要等待特久因为网速低了通信就慢了等待时间自然要长一些),这时候S8_2先不关闭来自S8_1转发的媒体流,而是以媒体流MS8的名称为参数同时附带S8_1执行第6_1步,在第6_1步中TM8计算最优承载服务器时需要排除S8_1所在机房的所有流媒体体服务器。在通过第6_1步收到新的播放流地扯S8_3后,S8_2依然先不关闭来自于S8_1的媒体流,而是尝试从S8_3播放流,在一段时间内(比如2秒内)从S8_3拉到的媒体流并不立即转发给S8_2关于MS8所关联的媒体流播放客户端,而是比较来自S8_3与S8_1关于媒体流MS8的网速,若来自S8_3关于媒体流MS8的网速优先来自S8_1的网速,就将来执行切换操作,转发来自S8_3的关于MS8的媒体流给所有相应的媒体流播放客户端,并关闭来自S8_1的媒体流MS8,否则不执行切换操作,而是关闭自S8_3的媒体流MS8。
9 主备核心机房的核心级媒体流管理服务器,周期性互要同步其本身所有媒体流信息与机房间网络质量信息,主要为补充本身不存在的信息,若存在直接忽略不进行更新。
10 采用本方法有可有效降低核心机房流量,因核心机房流量远贵于边缘机房流量,尽而降低了带宽成本,同时减少了中间传输环节,最多中间经过两级中转,从而减少了流媒体时延提高了实时性,加之用户可以就近接入流媒体服务器,由此带来流媒体用户端到流媒体服务器端网速相应提升。