第三章、 相關研究
3.1 網路拓撲
3.1.3 混合型網路
在樹狀網路中,由於其節省不必要的控制訊號傳遞,影音 Piece 可以被有效率的沿 著樹狀拓撲散佈到所有節點。然而,在劇烈變動的節點行為下(如加入、離開),樹狀網 路的拓撲結構會被嚴重破壞,尤其是越接近樹根的節點離開網路時。一旦樹狀網路被破 壞,網路中的節點就必須被重整,屆時將花費不少用來修復樹狀網路拓撲的時間成本。
如先前提到的,不少研究在探討如何以建構多棵樹的方式來解決單一棵樹的問題,如 SplitStream 所提出的 Internal-Node-Disjoint-Trees 概念。但事實上,這樣的概念不但難以 設計也不易實現。在網狀網路中,節點間主要採用 Pull 的方式來交換影音 Piece,因此 相較於樹狀網路能夠提供較佳的網路拓撲容錯性,因為單一節點離開該網路並不會對串 流服務造成太大的影響。然而,Pull 的方式需要傳遞大量的控制訊號與資料排程,且不 易估計節點的播放延遲時間。
諸多研究如 mTreebone[27],整合了樹狀網路與網狀網路的優點,提出了針對上述 問題的解決方案。如圖 9 所示,mTreebone 提出了樹骨(Treebone)的概念,影音 Piece 在 正常的情況下是透過樹骨 Push 給網路上的所有節點。樹骨是由停留在網路中較久的節 點所組成,原因是樹骨中的成員必須為系統提供穩定的服務。除了樹骨之外,所有節點 另外被一個網狀網路相互連接起來。每當樹骨中的成員離開了網路,會造成部分的節點 暫時無法接收到影音 Piece,這時候受影響的節點就會利用 Pull 的方式從網狀網路中的 鄰居取得影音 Piece。藉此,mTreebone 融合了樹狀網路和網狀網路的優點,如樹狀網路 能有效率的傳的影音 Piece、網狀網路的拓撲容錯性及妥善利用節點上載頻寬,且相較 於多棵樹的解決方案容易許多。
20
圖 9 mTreebone 串流網路示意圖
在接下來的文章中,我們將專注於透過樹狀網路來提供 P2P LS 服務。因為除了有 效率、易於設計與實作外,也易於套用階層式的統計與管理機制。更重要的是,樹狀網 路有助於計算節點的播放延遲時間,這對於著重在降低播放延遲時間的研究是良好的研 究平台。
3.2 降低樹狀網路的平均播放延遲時間
在樹狀網路中,要計算節點的播放延遲時間,只需要將影音 Piece 從樹根傳遞到節 點期間所花費的所有延遲時間加總起來即可。因此,藉由降低影音 Piece 從樹根到節點 的傳遞路徑中被轉送的次數,可以達到降低系統平均播放延遲時間的目的。根據諸多研 究如[28]、[29]發現,將具有較大上載頻寬的節點放置在距離樹根較近的位置,能夠有 效降低系統平均播放延遲時間。在[28]中,作者以數學證明的方式證明論述的正確性,
而在[29]中,作者則以模擬的方式來驗證。作者假設網路中有 1000 個節點,且依據上載 頻寬被分為三類,其中 100 個節點有 1Mbps 的上載頻寬、300 個節點有 400Kbps 的上載 頻寬,剩餘 600 個節點有 200Kbps 的上載頻寬。串流伺服器具有 1Mbps 的上載頻寬且 提供資料率為 100Kbps 的影音串流。作者期望透過窮舉的方式找出具有最低系統平均播
21
放延遲時間的樹狀網路拓撲,其結果如圖 10 所示,在具有最低系統平均播放延遲時間 的樹狀網路拓撲中,具 1Mbps 上載頻寬的節點都被放置在樹狀網路中的第一層及第二層,
具 400Kbps 上載頻寬的節點大多被放置在樹狀網路中的第三層,而具 200Kbps 上載頻寬 的節點則大多被放置在樹狀網路的底部。
圖 10 最佳的節點放置方式
因此,將具有較大上載頻寬的節點放置在距離樹根較近的位置,確實能夠有效降低 系統平均播放延遲時間。然而,這些研究不是假設網路中的節點具有相同的上載頻寬就 是具有相同的點對點延遲時間,這樣的假設與真實網際網路的情況並不相符。
若欲在樹狀網路中提供 LS 服務,又想要保證使用者的播放延遲時間都能低於一個 給定的延遲上限值,勢必會限制系統的容量。在接下來的章節中我們將介紹我們的研究 工作。首先,我們提出了兩個演算法,在樹狀網路中,考慮不同的節點可能有不同的上 載頻寬與點對點延遲時間,期望藉由降低系統平均播放延遲時間的方式來提升系統容量,
並透過模擬實驗來驗證所提演算法的可行性。此外,我們實作了一個基於樹狀網路的 P2P LS 系統雛型,該系統雛型提供後續的研究一個真實的網路實測平台。
22
第四章、演算法設計
我們考慮 P2P LS 系統中有一個以串流伺服器為樹根的樹狀網路。串流伺服器和所 有節點須定期的將其播放延遲時間及剩餘上載頻寬回報給一台追蹤伺服器(Tracking server)。Tracking server 就像是 BitTorrent 中的 Tracker 一般,扮演著輔助節點交換 Piece 的角色。他會提供新加入網路的節點一個父節點候選清單(Parent candidate list, PCL),讓 新加入的節點取得清單後能夠自行以 Ping 的方式探測自己與父節點候選人間的點對點 延遲時間。新加入的節點須加總父節點候選人的播放延遲時間及彼此的播放延遲時間,
並從所有父節點候選人中選擇一個父節點,使得自己有最小的播放延遲時間。此外,為 了反映播放延遲時間的大小對於 LS 服務的重要性,我們設定一個延遲時間上限值 (Maximum delay constraint),並要求播放延遲時間小於延遲時間上限值的節點才能加入 網路。如圖 11 所示,不同的節點擁有不同的上載頻寬和點對點延遲時間,且延遲時間 上限值被設定為 300 毫秒。黑色的節點為播放延遲時間小於延遲時間上限值的節點,而 紅色的節點則是播放延遲時間大於延遲時間上限值的節點,系統並不提供紅色的節點即 時影音串流的服務。
23
將具有不同上載頻寬的節點用一個 Degree-constraint spanning tree 連接起來是一 個 NP-complete 的問題[30]。因此,要將樹狀網路最佳化使其擁有最小平均播放延遲 時間是不容易的。此外,在 P2P 應用中,節點可能在任何時間點加入或離開網路,所 以試圖讓樹狀網路永遠保持最佳化是不可能的。更何況,實際要將樹狀網路最佳化必 須先擁有任意兩個節點間的點對點延遲時間,這在規模較小的服務上尚有實現的可能,
但在大規模的應用上是不可能實現的。
24
4.2 父節點候選清單生成演算法
透過節點的資訊回報機制,Tracking server 可以取得部分的樹狀網路資訊,包括所 有節點的播放延遲時間及剩餘上載頻寬。根據這些有限的資訊,我們提出了一個 PCL 生成演算法,讓新加入網路的節點能夠被分配到適當的樹狀位置。
為了產生一個長度為 L 的 PCL,Tracking server 先取得新加入節點 P 的上載頻寬,
並與目前網路中的其他節點相比較,令網路中有 K 個節點的上載頻寬大於節點 P。接著,
Tracking server 將尚有剩餘頻寬的節點以播放延遲時間由小至大排序,令排序結果為 BwEnough。PCL 是 BwEnough 的子清單,包含了 BwEnough 中的第 Max(K-L/2, 1)至第 Min(K+L/2, |BwEnough|)個元素。演算法 1 中完整詳述了父節點候選清單生成演算法的 內容。
Sort BwEnough in increasing order by playback delay
PCL ← SubList(BwEnough, Max(K-L/2, 1), Min(K+L/2, |BwEnough|))
25
這個演算法的主要構想除了期望降低系統平均播放延遲時間外,也期望提供一個注 重公平性的 LS 服務:能貢獻較多上載頻寬的節點應該有較低的播放延遲時間。因此,
能貢獻較多上載頻寬的節點在加入網路時,從 Tracking server 取得的 PCL 中將包含許多 播放延遲時間較小的父節點候選人。這個演算法鼓勵使用者踴躍貢獻可用的上載頻寬,
而不是使用一些軟體來限制上載的網路流量。
4.3 區域最佳化演算法
除了透過 Tracking server 提供 PCL 來達到適當配置節點位置的目的外,我們也期望 透過分散式的區域最佳化演算法進一步降低系統的平均播放延遲時間。我們令加入網路 後的節點,每隔一段時間須執行一次區域最佳化。如圖 12 所示,對於正在執行區域最 佳化的節點 P,找到一個以 P 之父節點 G 為樹根的 Degree-constraint spanning tree 來連 接 P 及 P 的子節點 C = {C1, C2, …, Ck},使得該區域具有最小的平均播放延遲時間。
圖 12 區域最佳化
我們共提出了四種可能的演算法以供比較,並從中選擇較合適者成為區域最佳化演 算法。在演算法 2 中,我們提供一個基於隨機排程的 Random 演算法。在演算法 3 中,
我們提供一個考慮最大上載頻寬的 Largest upload bandwidth 演算法。在演算法 4 中,我 們提供一個考慮最小播放延遲時間的 Lowest playback delay 演算法。在演算法 5 中,我 們以列舉的方式求得區域最佳化的最佳解(Optimal)。
26
演算法 2 Random 演算法 AvailableParent ← {G}
Children ← {P}∪C
while AvailableParent ≠ Ø and Children ≠ Ø do
PCandidate ← Randomly pick a peer from AvailableParent CCandidate ← Randomly pick a peer from Children
Set PCandidate to be the new parent of CCandidate dCCandidate← dPCandidate + dPCandidate,CCandidate
rPCandidate ← rPCandidate – R
if rPCandidate < R then AvailableParent ← AvailableParent – {PCandidate}
Children ← Children – {CCandidate}
if rCCandidate ≧ R then AvailableParent ← AvailableParent ∪ {CCandidate}
end while
if Children = Ø and new local avg playback delay is lower than the origin then
Commit this optimization end if
27
演算法 3 Largest upload bandwidth 演算法 AvailableParent ← {G}
Children ← {P}∪C
while AvailableParent ≠ Ø and Children ≠ Ø do
CCandidate ← Peer∈Children where bPeer is maximum
PCandidate ← Peer∈AvailableParent where dPeer + dPeer,CCandidate is minimum Set PCandidate to be the new parent of CCandidate
dCCandidate← dPCandidate + dPCandidate,CCandidate
rPCandidate ← rPCandidate – R
if rPCandidate < R then AvailableParent ← AvailableParent – {PCandidate}
Children ← Children – {CCandidate}
if rCCandidate ≧ R then AvailableParent ← AvailableParent ∪ {CCandidate}
end while
if Children = Ø and new local avg playback delay is lower than the origin then
Commit this optimization end if
28
演算法 4 Lowest playback delay 演算法 AvailableParent ← {G}
Children ← {P}∪C
while AvailableParent ≠ Ø and Children ≠ Ø do
PCand∈AvailableParent, CCand∈Children
Find the best (PCand, CCand) pair such that dPCand + dPCand,CCand is minimum Set PCand to be the new parent of CCand
dCCand← dPCand + dPCand,CCand
rPCand ← rPCand – R
if rPCand < R then AvailableParent ← AvailableParent – {PCand}
Children ← Children – {CCand}
if rCCand ≧ R then AvailableParent ← AvailableParent ∪ {CCand}
end while
if Children = Ø and new local avg playback delay is lower than the origin then
Commit this optimization end if
29
演算法 5 Optimal 演算法 AvailableParent ← {G}
Children ← {P}∪C
Use brute force method to find the optimal spanning tree Commit the optimization
我們以模擬實驗的方式來比較上述四種區域最佳化演算法。在模擬環境中,我們假 設每次最佳化中,包含 G、P 和 P 的所有子節點,且 P 平均有 1 到 4 個子節點,他們之
我們以模擬實驗的方式來比較上述四種區域最佳化演算法。在模擬環境中,我們假 設每次最佳化中,包含 G、P 和 P 的所有子節點,且 P 平均有 1 到 4 個子節點,他們之