編者按:近日,全球軟件案例研究峰會在北京召開。全球軟件案例研究峰會(簡稱“TOP100Summit”)是科技界一年一度的案例研究榜單,每年甄選年度最值得借鑒的100個好案例,旨在揭幕優秀研發團隊背后的做法、思考,為讀者提煉最佳學習路徑梳理、思考案例長尾價值。
在壹佰案例峰會的“架構演進/工程實踐/開源落地”專題上,聲網 Agora 首席架構師劉勇發表了《QOE 驅動下的分布式實時網絡構建:Agora SD-RTN 的演進》的演講。他重點分享了SD-RTN 和 Agora RTC 系統 如何在保持線上無停機無大故障的情況下保證系統逐步升級、擴容和實時交互體驗的質量持續改進,支撐了客戶每天數十億分鍾的通信時長。
劉勇2001 年浙江大學本科畢業;2013 年清華大學博士畢業;2014 年加入聲網Agora,從事整體系統的設計和開發。提出並設計、主導開發了 SD-RTN 系統,基於 SD-RTN 搭建了 Agora RTC 系統等。C++ 語言的忠實粉絲,互聯網領域永遠的新兵。
摘要
隨着網絡和視頻技術的發展,以實時音視頻為主的實時互動應用對長距離網絡傳輸的低延時和高可靠性帶來了新的挑戰和需求。與傳統網絡架構和 SDN 技術不同,聲網 SD-RTN 構建了以覆蓋網絡為主要思想的低延時高可靠性網絡,配合基於 UDP 的多路復用傳輸協議 AUT,為 RTC 等實時服務提供了底層網絡保障,保證了 Agora RTE 用戶在全球范圍內的端到端體驗。
• 通過將 RTC 服務和網絡傳輸分層、解耦,不同於傳統 RTC 協議如 RTP 協議等將音視頻媒體流和網絡傳輸協議重度耦合的方案,提供了可伸縮、靈活且專業的系統架構,保證了服務的質量
• 利用覆蓋網絡和 SDN 的思想,保證了一定規模的全球組網的實時網絡雲的網內傳輸質量
• 提出了 4 層多路復用實時傳輸協議 AUT,基於該協議增強了 Agora RTC/RTE 在 lastmile 端的體驗質量, 並為上層應用提供了抽象靈活的控制機制
SD-RTN 與 Agora RTC 服務架構
RTC 系統架構的演進
Real - Time Communication 顧名思義,既然是通信 ,通信的雙方或者多方必須要發起連接或者握手。在常見的2人場景中,通信雙方可以通過信令服務來發起P2P連接,直接實現數據通道的建立。
優點:服務器負載輕,只做信令的邏輯
缺點:
• 依賴雙方的網絡環境,實現互聯。穿透成功率低,可用性不能保證
• 雙方處於不同網絡環境下,通信質量依賴於雙方間的互聯網質量,在跨區域、網絡自治域時的質量存在着不穩定,不能提供穩定的 QoE 保證
• 多人會議場景下,需要兩兩建立 P2P 通道,可用性將顯著降低;同時存在着上行浪費和性能問題
• 系統架構可伸縮性差
結論:綜合以上因素,P2P 架構不適合全球范圍內的 RTC基礎服務提供商的底層架構,只能適用於小型受限特定領域,或者作為提升特定場景覆蓋質量的有益補充。
RTC 系統架構的演進(MCU 架構)
MCU(Multipoint Conferencing Unit)方案由一個服務器和多個終端組成一個星形結構。各終端將音視頻流發送給服務器,服務器端會將在同一個房間中的所有終端的音視頻流進行混合,最終生成一個混合后的音視頻流再發給各個終端。
缺點:
• 混流服務器資源消耗大
• 延時大
• 伸縮性差
• 靈活性差
RTC 系統架構的演進(SFU 架構)
SFU(Selective Forwarding Unit)方案由一個服務器和多個終端組成,SFU 不對音視頻進行混流,收到某個終端共享的音視頻流后,就直接將該音視頻流根據終端的訂閱結果,來轉發給房間內的其他終端。
利用這種發布-訂閱的模式,就可以實現靈活的多人互動場景。在上圖的簡化模型中還存在着兩個問題:1)多人場景下,用一台服務器去服務地理位置分布較遠的通信方,覆蓋質量就得不到保證,同時還存在着對單一會話的並發參與人數的限制,系統的伸縮性差。
於是業界自然想到了分布式多服務器協同方案,盡量采用就近接入的方式,它具備:
• 伸縮性好
• 覆蓋質量好
• 但對服務器間網絡質量構成了挑戰
將SFU架構做分布式擴展,其具備如下優點:
• 離接入者近,避免了遠距離接入帶來的對 lastmile 的影響
• 由於 RTC 通信具有區域性的特點,在本區域的通信會話匯聚到本區域的邊緣服務中心中,有利於降低通信的時延
缺點:
• 不同邊緣集群間存在着網間流量,帶來了成本的上升
• 不同邊緣集群間的數據交互對網絡質量帶來了挑戰:如跨地域、國別和運營商等。
利用分布式邊緣計算的架構,通過努力優化邊緣計算中心間的網絡質量,能夠將公共互聯網絡的不穩定對用戶體驗帶來的影響盡量減少。基於這種思想,聲網便提出SD-RTN的概念。
Agora SD-RTN 的提出
設計目標:
不同於 RTP/RTCP 等協議及webRTC 及其衍生的服務端架構,設計上,我們希望通過橫向分層的系統設計,降低系統耦合帶來的復雜度。通過一層獨立於音視頻媒體協議的網絡傳輸協議及服務架構,讓音視頻 RTC 服務專注於業務邏輯本身,讓網絡算法和協議設計及網絡硬件架構工程師發揮其各自專長的領域來滿足上層服務對 QOS 的要求:
• 協議解耦
• 服務解耦
• 充分靈活利用已有的網絡基礎設施,如公共互聯網、專線等的能力
• 安全
Agora SD-RTN 抽象了 RTC 分布式架構下對網絡傳輸的需求(低延時、高可靠),采用協議分層設計,將 RTC 服務和網絡傳輸解耦,實現了協議、模塊和服務的層次化和解耦:
• SD-RTN 對上層呈現的是一個 overlay network 的 3 層接口
• SD-RTN 是基於 UDP 的運行在異構網絡下不依賴特定硬件和軟件的分布式網絡系統,可以針對不同的 qos需求進行路由實時選擇和流量調度
SD-RTN 與 Agora 層次化服務架構
下圖是整個Agora的服務架構,我們可以看到SD-RTN 與 4 層傳輸協議 AUT 構成了 Agora 實時雲的網絡基礎:
Agora SD-RTN 架構
SD-RTN 系統又包括控制面和轉發面:
• 控制面
鏈路探測和容量評估系統
邊緣節點信息收集系統
路由調度系統
管理系統
• 轉發面
下面詳述一下鏈路探測和容量評估系統、路由調度系統兩部分。
1、鏈路探測和容量評估系統:根據調一定的調度策略,來定期的測試不同服務器集群間的網絡質量數據,分析網絡的模型,尤其是有損網絡下的質量,進行匯總和評估
2、路由調度系統:路由分析和調度系統類似於 SDN-Controller。SD-RTN調度系統是一組實時的智能化承擔路由規划和負載均衡的並行計算服務,根據全網匯總來的鏈路質量、節點間的實時傳輸帶寬、QOS 要求和轉發節點的負載等,來計算和下發網內的數據流的路由
Agora SD-RTN與 SDN
RTN系統在設計和持續演進上,從已有的網絡設計實踐中尤其是SDN的架構上借鑒了一些思想。
相同之處
SD-RTN 與 SDN 的設計思想總體相似,主要表現為:
• 將路由器的復雜控制面邏輯和轉發面邏輯分離
• 將控制面的路由策略的計算由集中式的控制中心(SDN-controller)來配置或計算
不同之處
• SDN 轉發面需要依賴流表來控制轉發邏輯,而隨着網絡規模的增大,對流表的查詢、維護和更新就變得復雜,尤其是多跳的情形;SD-RTN 利用 SR 等技術簡化了轉發的邏輯
• SD-RTN 在底層根據網絡鏈路評估狀況,根據所需的 qos 級別,采用 FEC 或多路冗余等技術,來實現包級別的實時可靠投遞
• SD-RTN 是一個覆蓋網絡的設計,不依賴特定硬件和軟件,能同時利用公共互聯網和專有線路,進行鏈路計算和流量分發
Agora SD-RTN 的演進
演進的過程分三個階段:
• 初始階段
SD-RTN 和 RTC 服務重度耦合,除鏈路評估和路由算法外,協議本身和服務都集成在RTC 接入和轉發器中
• 較成熟階段
RTC/RTN 協議分層和模塊化,大部分服務解耦,為 Agora RTC 提供專用服務
• 當前和未來方向:
RTN 服務化,對 Agora 雲內業務提供服務化接口(進行中)
Agora SD-RTN 帶來的收益
• 開發效率
SD-RTN 和 AUT(見后)的引入,使得上層業務不用再關心底層網絡傳輸的質量問題,可以專注於業務邏輯本身的開發,降低了系統的復雜度,簡化了業務的模型,縮短了 RTC 業務開發的迭代周期
• 傳輸質量
針對不同QOS 要求,SD-RTN 提供了相應的不同傳輸策略,配合 AUT 協議來完成相應的質量要求。
SD-RTN 關注和優化兩個網絡質量的技術指標:
• 時延
• 包投遞/送達成功率
Agora SD-RTN 質量指標(時延)
而在包投遞成功率這一指標則進行了進一步的細分,針對常見的 Agora RTC 需求,RTN 重點關注了以下幾個指標並進行持續優化:
1、2s 時延內的包投遞到達率在 99.9% 以上的達標服務時間。該指標針對一般直播類業務觀眾端的時延需求。該指標達標時,絕大部分直播觀眾端在無其他因素影響下,能夠流暢無卡頓。(已經基本優於基於 CDN 的直播技術方案)
2、800ms 時延內的包投遞到達率在 99.9% 以上的達標服務時間。該指標針對 Agora 極速直播業務場景下的觀眾端的質量要求
3、200ms 時延內的包投遞到達率在 99.9% 以上的達標服務時間。該指標關注普通 RTC的通信需求。該指標達標時,通信雙方可以流暢對話,而無延時感和搶話的情形
Agora SD-RTN 質量指標(jitter 200ms 到達率)
Agora SD-RTN 面臨的挑戰和問題
• 擴展性(通過和 RTC 系統配合,實現水平擴展)
• 有損發散網絡下的鏈路質量評估和容量評估
• 快速流量調度算法(NP 問題)
• 安全性 (Ipsec)
Agora RTC over RTN 架構
Agora RTC 系統,在傳輸層上有以下幾個主要服務:
• AP/LBS 服務
• RTC SFU 服務
1、Native
2、webRTC
3、RTMP
• 頻道同步服務和訂閱服務
• 能力協商和仲裁服務
Agora Universal UDP-based Transport Protocol (Aut)
RTC 場景中,需要:
• 一個可靠的網絡通道,來收發控制消息
• 需要多條盡量可靠的實時通道,來滿足多路數據流(音視頻等)的收發
• 在帶寬受限時,需要解決以上流的優先級管理問題
• To B 場景下,要能讓客戶自己自主靈活的決定流的優先級和傳輸降級策略
RTC 場景下對網絡傳輸帶來的挑戰
舉例來說,在帶寬受限時,往往需要保證控制指令的高優先級發送;場景化應用中,比如有保證音頻的發 送;保證老師優於學生等。考慮一種常規實現,控制指令走 TCP 通道;而每條音視頻流走一條 RTP/RTCP 的方案。這種情形下,多條流的競爭下:
• 如果 RTP/RTCP 通道采用的 TCP-friendly 控制策略,音視頻流和網絡上其他數據流一樣,就獲得不了高優先級保證
• 如果采用了激進的擁塞控制策略,那么可能會阻塞 RTC 控制指令通道
• 多個 RTP/RTCP 通道的擁塞控制策略,如何調整保證高優先級流
在這種場景下,我們需要一個多路復用的傳輸通道,在同一個擁塞控制模塊下,對流進行優先級管理,進行統籌安排:
• 利用 TCP 通道進行邏輯上的多路復用如 RTMP的最大問題在於TCP 的實現會導致排頭阻塞問題
• Quic 針對 web 的應用場景,從協議層面實現了傳輸通道的多路復用、優先級管理和防排頭阻塞,但它對實時非可靠數據流則沒有支持
• 實時流的使用者對於底層的控制要求要比可靠數據流要多,如何進行媒體和網絡傳輸分層設計和實現不是一個無關緊要的問題
• 靈活性與大客戶的定制化需求的矛盾: 如果不能很好的做好靈活性的設計,那么很多大客戶的需求就變成 了定制化的需求,不得不通過大量的 hard code 方式來解決
設計目標
• 通用性:使用一套協議設計來滿足不同場景的需求,不僅 RTC,也包括可靠數據通道
• 傳輸協議中原生的流支持:
1、多路復用,靈活的優先級管理
2、通過流中捎帶自定義的 Stream Meta 信息,給使用者進行流的管理決策
• 靈活的擁塞控制模塊接口,可擴展實現不同的擁塞控制算法
• 底層網絡接口化,能夠支持 SD-RTN,udp socket 和任何虛擬網絡等
Aut 協議設計參考了 QUIC 的協議設計,但進行了大量的重新設計。
• 刪除了一些版本管理和協商機制
• 增加了如為支持實時流場景應用中的Stream Option/Meta 信息機制等
• 設計了實時流的接口和實現
Aut 協議除了對實時流的支持外,還包括了:
• 加密
• 連接遷移
• FEC 支持
• MultiPath (實驗中)
Aut 在 RTC 中的應用
Aut 協議在 Agora RTC SDK Nasa2(當前 3.0.0.18) 版本中作為底層傳輸技術已經得到了技術驗證,為上層應用提供了高質量的傳輸保證和靈活的控制機制。靈敏的控制和反饋機制為上層引擎或應用優化提供了可能。
Aut 在 RTM 中的應用
Aut Over Aut: 點到點的網絡加速 (RTNS 服務)
總結
• 系統架構遵循逐步演進,灰度迭代的方式,要與客戶需求及生產規模相適應,不同階段采用最合理、合算的方案,同時保證技術方向演進的持續性和一致性
• 系統設計要充分關注、調研已有的系統和設計實現,跟蹤最新的技術演進(學術界和工業界)
• To B 行業里,一要盡量滿足客戶和產品的需求,也要避免技術產品項目化、外包化。和產品一起盡量尋求講將抽取客戶的公共痛點難點,考慮進系統的整體演化中
• 系統迭代過程中,需要考察系統的:
1、迭代線性性。控制線上系統的迭代復雜程度
2、可觀察性。基於數據驅動的方式來觀察和保證系統改進的有效性
ROI分析
• SD-RTN 和 Agora RTC 系統 6 年多保持線上無停機無大故障的情況下實現了系統的逐步升級、擴容和實時交互體驗的質量持續改進。支撐了客戶每天數十億分鍾的通信時長
• 隨着 SD-RTN 和 AUT 的逐步交付,為 Agora 雲內業務搭建系統提供了快捷一致的方案;並利用 AUT 協議能力通過 RTC SDK 為客戶的定制化需求提供靈活自助的解決方案
以上內容來自劉勇老師的分享。