一种ISP友好的分布式服务节点选择和更新方法
技术领域
本发明涉及P2P流媒体技术领域,尤其涉及一种分布式服务节点的选择和更新方法。
背景技术
P2P(对等网络)流媒体技术是将P2P技术与流媒体应用相结合,是当前学术界和工业界研究的热点。基于mesh网络的数据分发拓扑由于具有良好的可扩展性、对节点动态性的自适应性以及鲁棒性,已成为当前P2P流媒体流分发的主流模式。在该mesh网络的流分发模式中,当一个新节点加入系统时,通过集中式或分布式的资源搜索机制,新节点可以获取一组具有该节点所需资源的其他节点信息,系统将根据预设的决定策略选择部分活动节点作为新节点的资源服务节点,通过直接和这些资源服务节点建立连接,并获取数据。
目前,P2P流媒体已应用于网络音乐、视频会议、网络电视(IPTV)、体育赛事广播、视频点播等,成为人们工作、生活中不可或缺的重要组成部分,但同时也给互联网带来了巨大的流量压力,特别是跨运营商之间的流量压力。P2P流媒体的流分发过程与P2P的一致,首先在底层物理网络上构建逻辑应用层覆盖网络,由于覆盖网络对物理网络的不可知,导致物理网络和覆盖网络之间的流数据分发路径不一致。当前大多数P2P的应用未考虑到运营商(ISP)的流量成本,跨运营商之间的流量大大增加了运营商的经营成本。Karagiannis等人针对BT流量,对20,000个校园网用户进行调查,结果发现50-90%的数据块是从外部源下载的。Hei等人在北美部署节点对pplive进行测量研究,发现70-90%的初始下载流量来自于亚洲。
为了解决运营商之间的流量问题,学术界展开了大量的研究。Xie[1]等人提出P4P体系架构,通过在ISP与P2P应用之间进行有效的协作控制,在节点加入系统时,从ISP控制的跟踪服务器上查询并获得更加丰富的网络相关信息,指导资源服务节点的选择,实现流量的本地优化。Aggarwal等人[2]提出一种ISP和P2P应用协同的Oracle服务,P2P应用通过使用ISP提供的Oracle服务,获得离请求节点最近的节点列表,请求节点根据预设的距离尺度对备选的资源服务节点进行排序,实现流量的本地化。上述方法均是通过ISP的协作来实现拓扑上最近资源服务节点的选择,在ISP能够对P2P流量进行引导和控制的同时,减少跨ISP流量和P2P应用对底层网络的探测。但是,上述方法所采用的集中式资源服务节点查询方式,会受到单点失效的影响,同时,大量的集中查询降低了P2P应用的可扩展性,给跟踪服务器或Oracle服务器带来巨大的通信压力。同时,该资源服务节点选择的方法,未考虑P2P流分发的服务质量(QoS),在流媒体流分发这类实时性要求高的应用中,拓扑上邻近的节点之间可能造成局部拥塞而导致服务质量的下降。
学术界对分布式资源服务节点选择方式也有一定的研究[4],但提出的方法单纯以节点地理位置等静态信息作为权值计算依据,未考虑到节点带宽动态变化等情况对流分发质量的不利影响。
文献 1:H. Xie, Y. R. Yang, A. Krishnamurthy, Y. Liu, and A.Silberschatz. P4P: Provider Portal for Applications. In Proc.of SIGCOMM, 2008.
文献2: V. Aggarwal, A. Feldmann, and C. Scheideler. Can ISPs and P2P systems cooperate for improved performance- ACM CCR,July 2007.
文献3: Márk Jelasity, Alberto Montresor, and Ozalp Babaoglu. T-Man: Gossip-based fast overlay topology construction. Computer Networks, 53(13):2321–2339, 2009.
文献4:Zhijie Shen,Roger Zimmermann,"ISP-Friendly Peer Selection in P2P Networks",Proceedings of the seventeen ACM international conference on Multimedia ,Beijing, China ,2009, 869-872。
发明内容
针对上述存在的技术问题,以有效减少P2P网络中跨运营商之间的流量、避免集中式更新方式单点失效产生的不利影响、减轻入口服务器的通信压力以提高系统的可扩展性为目的,提供一种ISP友好的分布式服务节点选择和更新方法。
为达到上述目的,本发明采用如下技术方案:
一种ISP友好的分布式服务节点选择和更新方法,包括以下步骤:
S1、选择伙伴节点,该步骤进一步包括以下子步骤:
S1-1、请求节点向入口服务器发送加入会话请求,入口服务器随机返回N个备选资源服务节点和请求节点的拓扑信息并保存在请求节点的本地邻居节点列表中;
S1-2、请求节点选取M个备选资源服务节点作为初始伙伴节点;
S1-3、请求节点向初始伙伴节点发送连接探测请求;
S1-4、初始伙伴节点若在设定的连接超时时间内返回连接响应报文,则连接成功,请求节点将该初始伙伴节点记为伙伴节点,并获取数据;
初始伙伴节点若在设定的连接超时时间内未返回连接响应报文,则超时次数加1,如果超时次数大于设定次数,则将该初始伙伴节点的节点当前状态表项设置为unactive,并执行步骤S1-5;
S1-5、请求节点删除本地邻居节点列表中所有节点状态为unactive的L个节点信息, 并从剩余的(N-M)个备选资源服务节点中,取L个作为初始伙伴节点,然后按步骤S1-3、S1-4对L个初始伙伴节点进行连接探测;当伙伴节点个数为M个时,完成伙伴节点的选择,并结束本步骤;
S2、周期性更新本地邻居列表,该步骤进一步包括以下子步骤:
S2-1、请求节点周期性地从本地邻居节点列表中取出概率值大于一定阈值的伙伴节点作为闲谈对象,并发送更新消息;
S2-2、闲谈对象收到更新消息,比较闲谈对象本地邻居节点列表内是否存在与请求节点IP地址和端口号相同的节点,若不存在,则执行步骤S2-3,否则,执行步骤S2-4;
S2-3、请求节点插入闲谈对象本地邻居节点列表内没有的表项,并修改该记录相应表项;
S2-4、比较闲谈对象本地邻居节点列表中对应节点与请求节点的最后更新时间,若闲谈对象本地邻居节点列表中对应节点的最后更新时间小于请求节点的最后更新时间,修改闲谈对象本地邻居节点列表中该记录相应表项;若闲谈对象本地邻居节点列表中最后更新时间大于请求节点的最后更新时间,保持闲谈对象邻居节点列表该记录相应表项;
S3、周期性更新伙伴节点,该步骤进一步包括以下子步骤:
S3-1、请求节点周期性地选出已发送数据量小于一定阈值的P个伙伴节点,若存在上述伙伴节点,则执行步骤S3-2;否则,结束本过程,等待下一个周期;
S3-2、中断与步骤S3-1中所述P个伙伴节点的连接,重新执行步骤S1,选择P个伙伴节点,并获取数据,完成伙伴节点的更新。
上述步骤S1的子步骤S1-2和S1-5中所述请求节点选取初始伙伴节点的具体方法为:请求节点根据自身拓扑信息,按公式
计算出N个备选资源服务节点的权值
,将备选资源服务节点的权值从大到小排序,选取前M个作为初始伙伴节点,其中,
是非负常数,且
;
为备选资源服务节点
的可用上行带宽/系统单元带宽;当请求节点与备选资源服务节点
的自治域号相同,则
= 2;当请求节点与备选资源服务节点
的自治域号不同,但属于同一个ISP时,
= 1;当请求节点与备选资源服务节点
的自治域号不同,也不属于同一个ISP时,
= 0。
上述步骤S1的子步骤S1-4中所述请求节点从伙伴节点处获取的数据包括:请求节点修改本地邻居节点列表中伙伴节点对应表项的节点已发送数据量值。
上述步骤S2的子步骤S2-1中伙伴节点概率值
按公式
计算,其中
是预设的参数,
是节点在列表中的编号。
上述步骤S2的子步骤S2-3中请求节点修改记录相应表项具体包括:节点超时次数为0;节点最后更新时间为当前系统时间;节点已发送数据量为0;是否为伙伴节点标识为0;节点间延迟
用公式
计算,其中,
是原有表项中节点间延迟,
为所述对等节点发送闲谈消息的时刻,
为所述闲谈对象收到闲谈消息的时刻。
上述步骤S2的子步骤S2-4中:
当闲谈对象本地邻居节点列表中对应节点的最后更新时间小于请求节点的最后更新时间时,修改闲谈对象本地邻居节点列表该记录相应表项包括:节点最后更新时间为闲谈消息中该节点记录相应表项对应节点的最后更新时间;节点已发送数据量为0;节点间延迟用公式
计算,其中,
是原有表项中节点间延迟,
为所述对等节点发送闲谈消息的时刻,
为所述闲谈对象收到闲谈消息的时刻;
当闲谈对象本地邻居节点列表中最后更新时间大于闲谈消息中对应节点最后更新时间,保持闲谈对象邻居节点列表该记录相应表项,节点最后更新时间为当前系统时间,节点间延迟用公式
计算,其中,
是原有表项中节点间延迟,
为所述对等节点发送闲谈消息的时刻,
为所述闲谈对象收到闲谈消息的时刻。
上述步骤S3中伙伴节点的更新周期为步骤S2中本地邻居列表更新周期的1/3。
本发明具有以下优点和积极效果:
1)本发明方法充分利用节点的拓扑信息及预设的节点选择优先级,保证了流分发服务质量的资源服务节点的选择,有效减少了跨运营商之间的流量,降低了运营商的经营成本。
2)采用分布式方式周期性更新本地邻居节点列表和资源服务节点,避免了集中更新方式单点失效的不利影响,并减轻了对入口服务器查询带来的通信压力,使系统具有更高的可扩展性。
附图说明
图1是资源服务节点选择流程示意图;
图2是邻居节点列表更新流程示意图;
图3是伙伴节点调整流程示意图;
图4是本发明实施例的资源服务节点选择与更新方法的示意图。
具体实施方式
本发明方法是从众多的备选资源服务节点中选出具有拓扑感知且兼顾服务质量的资源服务节点,在选出可用的资源服务节点后,周期性的更新以剔除服务质量差的资源服务节点。由于对等网络中节点具有很强的动态性,因此需要周期性探测节点的状态,更新节点的邻居列表。概括的说,本发明的过程就是:选择伙伴节点、周期性更新本地邻居列表、周期性更新伙伴节点。
下面通过实施例结合附图对本发明的技术方案优势作进一步说明。
本发明所提出的一种ISP友好的分布式服务节点选择和更新方法,包括以下步骤:
S1、选择伙伴节点,该步骤进一步包括以下子步骤:
S1-1、请求节点P1向入口服务器发送加入会话请求,请求消息包括:请求节点的IP地址、参与会话的端口号、请求节点当前可用上行带宽、请求加入信息标识(join);
入口服务器在接受请求节点P1的请求信息后,根据P1的IP地址,查询本地内建的IP-AS(自治域号)映射表,获得P1所属的自治域号和ISP信息;
将请求节点P1信息插入入口服务器的本地活动节点列表,所述本地活动节点列表包括以下表项:节点编号、节点IP地址、节点参与会话的端口号、节点所属自治域号、节点所属ISP、节点可用的上行带宽、节点当前状态(active,unactive);
入口服务器从本地活动节点列表中随机取出节点状态为active的M个备选资源服务节点,并将M个备选资源服务节点信息保存到P1的本地邻居节点列表中,同时将请求节点P1所属的的自治域号和ISP信息返回给P1;
本地邻居节点列表包括如下表项:节点IP地址,节点参与会话的端口号,节点所属自治域号,节点所属ISP,节点可用的上行带宽,节点间延迟,节点当前状态(active,unactive),节点超时次数,节点最后更新时间,节点已发送数据量,是否为伙伴节点标识位(0,1,-1),其中,是否为伙伴节点标识位中,0表示该节点与请求节点之间是非伙伴节点关系,1表示该节点与请求节点之间是伙伴节点关系,-1表示该节点与请求节点之间有过伙伴节点的关系,但是现在这种关系已失效;
在初始状态时,本地邻居节点列表中节点的节点间延迟为0,节点超时次数为0,节点最后更新时间为该节点加入本地邻居节点列表时的系统当前时间,节点已发送的数据量为0,是否为伙伴节点标识初始为0,其他表项内容均从入口服务器发回的备选资源服务节点信息中获得;
S1-2、请求节点P1根据公式
计算备选资源服务节点的权值
大小,将备资源服务节点按权值从大到小排序,选取前N个节点作为初始伙伴节点;
S1-3、请求节点P1启动超时计数时钟,分别向初始伙伴节点发送连接探测请求;S1-4、设定连接超时时间为500ms;
请求节点P1若在500ms内收到初始伙伴节点返回的连接响应报文,则连接成功,同时根据发送连接探测请求与收到连接应答报文的时间差,估计P1与该初始伙伴节点之间的链路延迟,并修改在本地邻居节点列表中修改该初始伙伴节点的节点间延迟表项为估算的链路延迟,是否为伙伴节点标识位设置为1;
请求节点P1若在500ms内未收到初始伙伴节点返回的连接响应报文,采用超时计数方式,P1将本地邻居节点列表中超时计数超过3次的初始伙伴节点所对应表项的是否为伙伴节点标识位设置为0,节点当前状态设置为unactive,并执行步骤S1-5;
S1-5、请求节点P1删除本地邻居节点列表中所有节点状态为unactive的L个节点信息,然后按步骤S1-3、S1-4,从本地邻居节点列表中剩余的非伙伴节点中选出L个新的初始伙伴节点,对新选出的初始伙伴节点发送连接探测请求进而建立连接,并获取数据。流程示意图如图1所示。
假设请求节点P1与伙伴节点P4、P7、P9成功连接,P1按公式
修改本地邻居节点列表中节点P4、P7、P9对应记录相应表项的节点已发送的数据量值,其中,
D j (
i)是P1前次收到的从第i个所述伙伴节点发送的数据长度,
D curr (
i)是所述P1当前从第i个节点接收到的数据长度。
S2、周期性更新本地邻居列表,该步骤进一步包括以下子步骤:
S2-1、与伙伴节点建立成功连接后,请求节点开始周期性的交换信息进行伙伴节点关系的维护。请求节点P1在接收伙伴节点P4、P7、P9的数据的同时,在每个闲谈周期内,按公式
计算P1的本地邻居节点列表中节点状态为active的每个节点的概率值,其中,
是预设的参数,
是节点在列表中的编号。
设定闲谈周期为30s,
为4,
为0.2,阈值为0.6,请求节点P1取出概率值大于0.6的一个或多个节点作为闲谈对象,发送闲谈消息。同时,收到闲谈消息的伙伴节点将本地邻居节点列表信息以响应报文的方式,发送给P1,更新P1的本地邻居节点列表。此处的闲谈消息的报文以Reflesh为消息头,消息体格式为NList:ITEM1:ITEM2:…………..;响应闲谈消息的报文以Reflesh为消息头,消息体格式为NList:ITEM1:ITEM2:…………..;其中,Reflesh,Res_Reflesh表示响应报文的标识位,分别代表伙伴节点的本地邻居节点列表的更新消息和更新反馈消息,Nlist表示本地邻居节点列列表中记录的个数,ITEMn表示具体的邻居节点列表记录的内容。
S2-2、请求节点P1比较闲谈对象的本地邻居节点列表内是否存在与P1的IP地址和端口号相同的节点,若不存与对等节点IP地址和端口号相同的节点,则执行步骤S2-3,否则执行步骤S2-4;
S2-3、插入闲谈对象的本地邻居节点列表内没有的表项,并修改该记录相应表项,:节点间延迟用公式
计算,其中,
是原有表项中节点间延迟,
为所述对等节点发送闲谈消息的时刻,
为所述闲谈对象收到闲谈消息的时刻,节点超时次数为0,节点最后更新时间为当前系统时间,节点已发送数据量为0,是否为伙伴节点标识为0。
S2-4、如果闲谈对象本地邻居节点列表中最后更新时间小于闲谈消息中对应节点最后更新时间,修改闲谈对象本地邻居节点列表该记录相应表项:节点间延迟
用公式
计算,节点最后更新时间为闲谈消息中该节点记录相应表项对应的节点最后更新时间,节点已发送数据量为0;
如果闲谈对象本地邻居节点列表中最后更新时间大于闲谈消息中对应节点最后更新时间,保持闲谈对象邻居节点列表该记录相应表项,节点间延迟
用公式
计算,节点最后更新时间为当前系统时间。
在完成上述步骤S2-1~S2-4后,闲谈对象删除本地邻居节点列表中状态标记为unactive的节点表项,并按照公式
对本地邻居节点列表剩余节点进行从大到小排序,保持本地邻居节点列表中记录个数不超过N。
S3、周期性更新伙伴节点,该步骤进一步包括以下子步骤:
S3-1、请求节点P1在周期性更新本地邻居节点列表的同时,并周期性的更新伙伴节点,伙伴节点的更新周期为1/3个闲谈周期,即更新周期为10s。在更新周期内,P1选出本地邻居节点列表中已发送的数据量小于一定阈值的伙伴节点记为过时伙伴节点,阈值设定为2r,其中r为当前流传输速率,若存在过时伙伴节点,则执行步骤S3-2,否则,结束本过程,等待下一个更新周期。
S3-2、设选出P个过时伙伴节点,将该过时伙伴节点表项中否为伙伴节点标识设置为-1,按照公式
本地邻居节点列表中剩余节点的权值,并按权值将剩余节点从大到小排序,选择前P个节点作为初始伙伴节点。请求节点向初始伙伴节点发送连接探测请求,重新执行步骤S1的子步骤S1-3,得到更新后的伙伴节点。
请求节点重置本地邻居节点列表中所有记录的已发送的数据量表项为0,与过时伙伴节点中断连接,转向从新伙伴节点处获得数据。
图4为应用本发明的资源服务节点选择和更新方法的应用环境部署图。如图4所示,当用户(一个客户端)观看网络电视的一个频道时,首先从已知的入口服务器获取初始资源服务节点和本地拓扑信息,然后存储返回的初始资源服务节点于本地邻居节点列表中,客户端进行排序并选择拓扑邻近的一定数目的节点构成初始伙伴节点,通过连接探测,确定用于获取数据的伙伴节点并接收数据,节点选择方式减少了跨ISP的流量。同时,通过采用有偏闲谈机制,周期性与邻居节点列表中部分节点交换邻居列表信息,动态调整数据贡献大的邻居节点作为伙伴节点,保证了流分发的服务质量。