gradienTv:基于梯度覆盖网络的市场驱动型P2P实时媒体流技术解析
1. 引言
在当今的网络环境中,使用覆盖网络进行实时流媒体传输是一项具有挑战性的任务。它需要分布式算法,在异构网络环境下,通过最大化节点的上传带宽利用率来提高系统性能,同时通过最小化播放延迟和最大化节点上的播放连续性来提升用户的观看体验。
为了满足这些需求,我们提出了gradienTv系统。它通过构建多个媒体流覆盖树,每个树负责传输一部分媒体流,对现有的NewCoolstreaming系统进行了改进。这些树是通过分布式算法构建的,使得节点在每个树中的深度与其相对可用上传带宽成反比。也就是说,相对上传带宽较高的节点会更靠近媒体源,位于每个树的根节点附近。这样做可以减轻源节点的负载,最大化节点可用上传带宽的利用率,并构建高度更低的树(减少从节点到源的跳数)。
2. 相关工作
构建数据传输(媒体流)覆盖网络存在两个基本问题:
-
覆盖拓扑结构
:早期的数据传输覆盖网络采用树结构,如Climber、ZigZag和NICE等系统。这种结构的数据传输延迟短,但在靠近根节点的节点出现故障时,树结构较为脆弱,且所有流量仅由内部节点转发。SplitStream通过使用多棵树改进了这一模型,将流拆分为子流,每棵树传输一个子流。此外,还有Orchard、ChunkySpread和CoopNet等解决方案。另一种选择是网状结构,如SopCast、DONet/Coolstreaming、Chainsaw、BiToS和PULSE等系统。网状结构对节点故障具有高度弹性,但由于频繁的通知和请求交换,会导致不可预测的延迟。还有一类系统结合了树和网状结构,如CliqueStream、mTreebone、NewCoolStreaming、Prime等,gradienTv也属于这一类,其网状结构为梯度覆盖网络。
-
节点发现机制
:不同的系统采用不同的方法来发现提供流的其他节点。例如,CoopNet使用集中式协调器,GnuStream使用受控泛洪请求,SplitStream和其他一些系统使用DHT,而NewCoolstreaming、DONet/Coolstreaming和PULSE使用基于八卦协议生成的随机覆盖网络来搜索节点。
NewCoolstreaming与gradienTv最为相似,两者都采用节点向父节点订阅子流,父节点向子节点推送流的数据传播模型。但gradienTv使用梯度覆盖网络来发现提供流的节点,而NewCoolstreaming从随机覆盖网络中采样节点。此外,NewCoolstreaming仅在子流被识别为缓慢时被动地更换父节点,而gradienTv会主动更换父节点以提高系统性能。
3. 梯度覆盖网络
梯度覆盖网络是一类P2P覆盖网络,它使用每个节点的局部效用函数来排列节点,使得节点按照效用值从最高效用节点核心向外递减排列。在梯度覆盖网络中,最高效用节点位于核心,效用值递减的节点距离中心越来越远。
梯度覆盖网络通过八卦算法维护两组邻居节点:相似视图和随机视图。节点的相似视图是效用值接近但略高于该节点效用值的节点的部分视图。节点定期进行八卦通信,交换相似视图。收到相似视图后,节点会用效用值更接近(但更高)的节点替换自己相似视图中的条目。随机视图是系统中节点的随机样本,用于发现相似视图中的新节点,并防止相似视图的分区。
4. gradienTv系统
在gradienTv中,媒体源将媒体拆分为多个条带,并将每个条带划分为一系列块。gradienTv为每个条带构建一个媒体流覆盖树,块从父节点推送到子节点。新加入的节点使用梯度覆盖网络发现条带提供者,并相互竞争以与提供者建立父子关系。如果节点找到某个条带的更低深度父节点,并且该父节点有空闲上传插槽或更喜欢该节点而不是其现有子节点之一,则该节点会主动更换该条带的父节点。
我们使用以下术语来描述系统:
-
下载插槽
:节点用于下载条带的网络连接。
-
上传插槽
:节点用于转发条带的网络连接。如果节点p将其上传插槽分配给节点q的下载插槽,则称p是q的父节点,q是p的子节点。
我们的市场模型使用以下三个属性来匹配能够转发条带的节点和想要下载该条带的节点:
-
货币
:节点的总上传插槽数,即节点愿意并能够同时转发的条带数。节点在请求连接到另一个节点的上传插槽时使用其货币。
-
连接成本
:建立接收条带的连接所需的最小货币。对于有未使用上传插槽的节点,连接成本为零;否则,节点的连接成本等于其已连接子节点的最低货币。
-
深度
:节点到特定条带根节点的最短路径(跳数)。由于媒体流由多个条带组成,节点在不同树中的深度可能不同。节点的深度越低,对于该条带来说,它作为父节点就越理想。节点会不断与其他节点竞争,以连接到深度更低的节点,从而降低其在所有条带上的深度。
5. 梯度覆盖网络的构建
每个节点维护两组相邻节点:随机视图和相似视图。使用Cyclon算法创建和更新随机视图,使用改进的梯度协议构建和更新相似视图。每个视图中存储的节点引用包含节点的效用值。节点的效用值由节点的上传带宽和一组离散的效用值(我们称之为市场级别)计算得出。
市场级别定义为具有相同效用值的网络上传带宽范围。例如,移动宽带(64 - 127 Kbps)的效用值为1,慢速DSL(128 - 511 Kbps)的效用值为2,DSL(512 - 1023 Kbps)的效用值为3,光纤(> 1024 Kbps)的效用值为4,媒体源的效用值为5。节点测量其上传带宽(例如,使用服务器或可信邻居),并根据其上传带宽所属的市场级别计算其效用值。
节点更喜欢用同一市场级别或高一级别的节点填充其相似视图。这种偏好函数的一个特点是低带宽节点之间只有相互连接。然而,低带宽节点通常没有足够的上传带宽来同时传输流中的所有条带。因此,为了使低带宽节点能够利用高带宽节点的空闲插槽,节点维护一个手指列表,每个手指指向一个更高市场级别的节点(如果存在)。
节点使用引导服务器引导其相似视图,最初,节点的相似视图由具有相等或更高效用值的随机节点填充。以下是更新相似视图的算法:
Algorithm 1. Updating the similar-view
1: procedure UpdateSimilarView ⟨this⟩
2:
this.similarV iew.updateAge()
3:
q ←oldest node from this.similarV iew
4:
this.similarV iew.remove(q)
5:
pV iew ←this.similarV iew.subset()
▷a random subset from p’s similarV iew
6:
Send pV iew to q
7:
Recv qV iew from q
▷qV iew is a subset of q’s similarV iew
8:
for all nodei in qV iew do
9:
if Up(nodei) = U(p) OR Up(nodei) = U(p) + 1 then
10:
if this.similarV iew.contains(nodei) then
11:
this.similarV iew.updateAge(nodei)
12:
else if this.similarV iew has free entries then
13:
this.simialrV iew.add(nodei)
14:
else
15:
nodej ←pV iew.poll()
▷get and remove one entry from pV iew
16:
this.similarV iew.remove(nodej)
17:
this.simialrV iew.add(nodei)
18:
end if
19:
end if
20:
end for
21:
for all nodea in this.randomV iew do
22:
if Up(nodea) = U(p) OR Up(nodea) = U(p) + 1 then
23:
if this.similarV iew has free entries then
24:
this.simialrV iew.add(nodea)
25:
else
26:
nodeb ←(x ∈this.similarV iew such that Up(x) > U(p) + 1)
27:
if (nodeb ̸= null) then
28:
this.similarV iew.remove(nodeb)
29:
this.simialrV iew.add(nodea)
30:
end if
31:
end if
32:
end if
33:
end for
34: end procedure
节点还会定期更新指向更高市场级别的手指。节点遍历其随机视图,对于每个更高的市场级别,如果随机视图中存在该市场级别的节点,则选择一个节点;如果不存在,则保留旧的手指。
6. 流树覆盖网络的构建
节点定期调用以下算法来构建和维护每个条带的流覆盖树:
Algorithm 2. Parent assignment
1: procedure assignParent ⟨⟩
2:
for all stripei in stripes do
3:
candidates ←findParent(i)
4:
if candidates ̸= null then
5:
newP arent ←a random node from candidates
6:
send ⟨ASSIGNREQUEST | i⟩to newP arent
7:
end if
8:
end for
9: end procedure
对于每个条带i,节点p检查其相似视图或手指列表中是否有节点满足以下条件:(i)深度低于其当前父节点;(ii)连接成本小于p的货币。如果找到这样的节点,则将其添加到条带i的候选父节点列表中(算法3)。
Algorithm 3. Select candidate parent from the similar-view and the fingers
1: procedure findParent ⟨i⟩
2:
candidates ←Ø
3:
if this.stripei.parnet = null then
4:
this.stripei.parnet.depth ←∞
5:
end if
6:
for all nodej in (similarV iew fingers) do
7:
if nodej.stripei.depth < this.stripei.parent.depth
8:
AND nodej.connectionCost < this.currency then
9:
candidates.add(nodej)
10:
end if
11:
end for
12:
return candidates
13: end procedure
我们使用随机策略从候选父节点中选择一个节点,因为它能公平地平衡系统中节点的连接请求。如果选择深度最小的候选父节点,即使节点货币的方差很小,也会导致对高上传带宽节点的连接请求过多。
当接收节点q收到节点p的连接请求时,会调用以下算法:
Algorithm 4. Handling the assign request
1: upon event ⟨ASSIGNREQUEST | i⟩from p
2:
if has free uploadSlot then
3:
assign an uploadSlot to p
4:
send ⟨ASSIGNACCEPTED | i⟩to p
5:
else
6:
worstChild ←lowest currency child
7:
if worstChild.currency ≥p.currency then
8:
send ⟨ASSIGNNOTACCEPTED | i⟩to p
9:
else
10:
assign an uploadSlot to p
11:
send ⟨RELEASE | i⟩to worstChild
12:
send ⟨ASSIGNACCEPTED | i⟩to p
13:
end if
14:
end if
15: end event
如果q有空闲上传插槽,则接受请求;否则,如果p的货币大于q的连接成本,q会放弃其最低货币的子节点之一,并接受p作为新子节点。在这种情况下,被放弃的节点必须找到新的父节点。如果q的连接成本大于p的货币,q会拒绝请求。
通过以上的设计和算法,gradienTv系统能够在异构网络环境中高效地进行实时媒体流传输,提高带宽利用率,降低播放延迟,提升播放连续性。与NewCoolstreaming的模拟比较结果显示,gradienTv在这些方面都有显著的改进。
gradienTv:基于梯度覆盖网络的市场驱动型P2P实时媒体流技术解析
7. gradienTv系统优势分析
为了更清晰地展现gradienTv系统的优势,我们将其与NewCoolstreaming进行多方面的对比分析,以下是详细对比表格:
| 对比项目 | gradienTv | NewCoolstreaming |
| — | — | — |
| 带宽利用率 | 市场驱动方法确保系统上传带宽接近最大利用率 | 未充分利用带宽,存在一定浪费 |
| 播放连续性 | 显著改善,能提供更流畅的播放体验 | 相对较差,可能出现卡顿 |
| 流树高度 | 构建的媒体流树高度远低于NewCoolstreaming | 流树高度较高,增加了传输延迟 |
| 播放延迟 | 明显小于NewCoolstreaming | 延迟相对较高 |
| 节点发现机制 | 使用梯度覆盖网络,能快速找到合适的条带提供者 | 从随机覆盖网络采样节点,收敛速度慢 |
| 父节点更换策略 | 主动更换父节点以优化性能 | 仅在子流缓慢时被动更换父节点 |
从这个表格中可以直观地看到,gradienTv在多个关键指标上都优于NewCoolstreaming,这得益于其独特的设计和算法。
8. 市场模型的作用机制
gradienTv的市场模型通过三个核心属性来匹配节点,其作用机制如下:
-
货币
:节点的上传插槽数决定了其货币量,这代表了节点的转发能力。节点在请求连接时使用货币,就像在市场中进行交易一样。货币量多的节点有更多机会连接到优质的上传插槽,从而提高自身在网络中的地位。
-
连接成本
:连接成本反映了接收条带的门槛。对于有空闲上传插槽的节点,连接成本为零,这鼓励新节点积极寻找这些资源。而对于已被占用上传插槽的节点,连接成本取决于其最低货币的子节点,这促使节点优化自身的子节点选择,以降低连接成本。
-
深度
:深度是衡量节点与媒体源距离的指标。节点深度越低,作为父节点就越有吸引力。节点会不断竞争以降低自己的深度,这有助于构建更高效的流树,减少传输延迟。
下面是市场模型作用机制的mermaid流程图:
graph TD;
A[节点请求连接] --> B{判断连接成本};
B -- 连接成本为0 --> C[连接有空闲插槽节点];
B -- 连接成本不为0 --> D{判断货币与连接成本};
D -- 货币>连接成本 --> E[竞争成为子节点];
D -- 货币<连接成本 --> F[寻找其他节点];
E --> G{判断节点深度};
G -- 深度低 --> H[建立父子关系];
G -- 深度高 --> F;
9. 梯度覆盖网络的优势体现
梯度覆盖网络在gradienTv系统中发挥了关键作用,其优势主要体现在以下几个方面:
-
快速匹配节点
:梯度覆盖网络能够高效地将具有相似上传带宽的节点匹配在一起。节点的邻居在梯度中具有相似或略高的上传带宽,这使得市场机制能够快速构建稳定的流树。与随机覆盖网络相比,梯度覆盖网络减少了低带宽节点与高带宽节点不匹配的情况,从而减少了流树收敛前的父节点切换次数。
-
信息传播高效
:在市场机制中,信息和价格的快速传播至关重要。梯度覆盖网络通过八卦算法维护邻居节点信息,使得信息能够在节点间快速传播。这有助于节点及时了解市场动态,做出更优的决策。
-
减少通信开销
:在随机覆盖网络中,寻找最优父节点可能需要泛洪或随机游走,这会带来高昂的通信开销。而梯度覆盖网络通过局部信息的交换,避免了这种大规模的通信,提高了系统的效率。
10. 系统的可扩展性分析
gradienTv系统具有良好的可扩展性,主要体现在以下几个方面:
-
节点特征扩展
:虽然本文在构建梯度覆盖网络时仅考虑了上传带宽,但该模型可以很容易地扩展到包括其他重要的节点特征,如节点正常运行时间、负载和声誉等。通过增加这些特征,可以进一步优化节点的匹配和流树的构建。
-
条带数量扩展
:随着媒体流的复杂性增加,条带的数量可能会增多。gradienTv系统能够为每个条带独立构建流树,因此可以轻松应对条带数量的增加。新加入的节点可以通过梯度覆盖网络快速发现条带提供者,并参与到流树的构建中。
-
节点数量扩展
:在大规模网络中,节点数量的增加可能会对系统性能产生挑战。然而,梯度覆盖网络的局部信息交换机制和快速匹配能力使得gradienTv系统能够在节点数量增加时保持较好的性能。节点可以通过梯度覆盖网络快速找到合适的父节点,避免了大规模的搜索和通信开销。
11. 总结
gradienTv系统是一种创新的分布式、市场驱动型实时媒体流解决方案。通过构建多个媒体流覆盖树,利用梯度覆盖网络进行节点发现和匹配,以及采用独特的市场模型,gradienTv在带宽利用率、播放延迟、播放连续性等方面都取得了显著的改进。与传统的NewCoolstreaming系统相比,gradienTv具有更高的性能和更好的可扩展性。
在未来的网络环境中,随着实时媒体流需求的不断增长,gradienTv系统有望成为一种重要的技术选择。其可扩展性使得它能够适应不同规模和复杂度的网络,为用户提供更优质的观看体验。同时,gradienTv的设计思想也为其他分布式系统的开发提供了有益的借鉴。
超级会员免费看

被折叠的 条评论
为什么被折叠?



