基于网络流量统计与反馈实现边缘机房间媒体流流量调度的一种思路

目前服务于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 采用本方法有可有效降低核心机房流量,因核心机房流量远贵于边缘机房流量,尽而降低了带宽成本,同时减少了中间传输环节,最多中间经过两级中转,从而减少了流媒体时延提高了实时性,加之用户可以就近接入流媒体服务器,由此带来流媒体用户端到流媒体服务器端网速相应提升。

时间: 2024-11-07 06:19:40

基于网络流量统计与反馈实现边缘机房间媒体流流量调度的一种思路的相关文章

WAP流量统计与传统WEB流量统计的区别与选择

时下,对于很多中小FreeWAP站长而言,可以选择的第三方流量统计站非常有限,尤其是专业面向WAP的站点就更少了.现在从网上搜索可以找到很多家能提供WAP流量统计的站并不多, 现在很多WAP流量统计站都是从PC(WEB)流量统计站简单修改过来的,结果很多统计功能根本实现不了,比如来源页统计,用户访问页记录,在线用户统计等等:也由于WAP1.2(1.1)并不支持Javascript,导致这些统计站不但统计数据不完整,而且统计效率低下,经常出现反应慢以及不稳定的问题.    那么怎么样的统计系统才算

openwrt linux 基于iptables的流量统计

简介 目前openwrt系统中流量统计做的最好的应该是"石像鬼"固件了,用以做流量统计的工具也有很多如:tomato,luci-app-statistics等. 本文想给大家介绍一种基于iptables规则的流量统计方法.该方法的基本原理是利用iptables自带的对规则链的流量统计功能,通过制定不同的规则并挂在不同的表和链上来实现对特定流量统计. 本方法的好处如下: 1.灵活统计多种流量. 2.流量统计准确. 3.便于扩张. iptables简介 iptables表说明 mangle

网络抓包,协议分析,流量统计程序

// YQPackageCaptureDlg.cpp : 实现文件 // #include "stdafx.h" #include "YQPackageCapture.h" #include "YQPackageCaptureDlg.h" #include "afxdialogex.h" #include <pcap.h> #include <vector> #include <afxwin.h&

PHP学习笔记:php网络流量统计系统

 说明:代码来源<PHP和MySQL Web应用开发>一书,还有就是代码有些是经过修改的,经过我的测验全部都可以用. 这里面ip地址显示的正常的,我电脑是支持 ipv6 的. 本示例的数据库脚本 ~~~ 先执行 set names gbk;   (因为脚本中包含中文)再执行语句: source d:\test\Vote.sql; CREATE DATABASE IF NOT EXISTS FluxStat COLLATE 'gb2312_chinese_ci'; USE FluxStat; C

手机卫士10_widget_流量统计_手机杀毒

1._widget入门: 查看帮助文档>>Developrs>>API Guides>>App Widgets 实际上是一个迷你的应用程序VIew视图,嵌入在另外一个应用程序视图. 标准的android和兼容widget的手机才能显示,被修改过的系统是无法显示的. 实现步骤: ①创建类继承APPWidgetProvider//一个方便的帮助类,用来实现一个appwidget 它继承了广播接收者,实现原理也是通过广播实现的,特殊的广播接收者. ②在清单文件里配置广播接收者

android app 流量统计

https://blog.csdn.net/yzy9508/article/details/48300265 | android 数据流量统计 - CSDN博客https://blog.csdn.net/forlong401/article/details/8440160 | android如何开发流量监控软件 - CSDN博客https://stackoverflow.com/questions/12613402/android-statistic-3g-traffic-for-each-ap

栅格重分类和条件函数均可以实现对流量统计数据进行定义划分

ArcGIS水分分析工具的流向分析是基于D8单流向算法,如果分析使用的DEM存在凹陷点,就会产生汇,导致径流断流从而影响了分析结果.在前面章节<ArcGIS水文分析实战教程(2)ArcGIS水文分析工具的基本原理>中又介绍过D8算法,而<ArcGIS水文分析实战教程(4)地形预处理>章节中笔者也较少过如何创建无凹陷点得DEM数据,在使用流向分析工具之前可以先行阅读. 首先流向分析要使用填洼过的数据,确保DEM数据没有凹陷点.如果数据准备妥当,直接使用水文分析工具箱中的[流向]工具进

Android应用流量统计——NetworkStatsManager使用

在没有Root的情况下,Android应用流量统计在6.0之前一直没有太好的办法,官方虽然提供了TrafficStats,但其主要功能是设备启动以来流量的统计信息,和时间信息无法很好的配合.最近再看TrafficStats类时,发现说明中提到,为获取更具鲁棒性的网络历史数据,建议使用NetworkStatsManager. 本文首先简单对比下TrafficStats和NetworkStatsManager各自的限制和优缺点,然后详细说明NetworkStatsManager的用法,并给出主要代码

Android中进行流量统计

// ---------------------流量统计-------------------------------- try { PackageManager pm = getPackageManager(); ApplicationInfo ai = pm.getApplicationInfo("com.test.app", PackageManager.GET_ACTIVITIES);// com.test.app为自己应用的包名 Log.d("!!", &