聲網(wǎng)自研傳輸層協(xié)議 AUT 的落地實(shí)踐丨Dev for Dev 專欄

針對(duì)實(shí)時(shí)互動(dòng)應(yīng)用對(duì)網(wǎng)絡(luò)傳輸帶來(lái)的新需求和新挑戰(zhàn),聲網(wǎng)通過(guò)將實(shí)時(shí)互動(dòng)中的應(yīng)用層業(yè)務(wù)需求與傳輸策略的分層和解耦,于 2019 年自研內(nèi)部私有的傳輸層協(xié)議 Agora Universal Transport(AUT),將異構(gòu)網(wǎng)絡(luò)下的各種傳輸控制能力匯聚起來(lái),并于 2021 ~ 2022 年開始逐步大規(guī)模落地在各項(xiàng)業(yè)務(wù)中,用一套傳輸協(xié)議/框架解決各項(xiàng)業(yè)務(wù)不同的傳輸需求。
相關(guān)內(nèi)容分為上下兩篇,本文將詳細(xì)介紹 AUT 傳輸協(xié)議的設(shè)計(jì)和演進(jìn)過(guò)程。

作為一家提供實(shí)時(shí)互動(dòng)平臺(tái)的公司,傳輸毫無(wú)疑問(wèn)是所有互動(dòng)的基石,隨著網(wǎng)絡(luò)的發(fā)展,互動(dòng)的場(chǎng)景也越來(lái)越多樣,傳輸?shù)膬?nèi)容也越來(lái)越復(fù)雜,實(shí)時(shí)互動(dòng)下的傳輸主要面臨以下需求和挑戰(zhàn):
媒體數(shù)據(jù)傳輸
RTC 聲網(wǎng)最主要的實(shí)時(shí)互動(dòng)場(chǎng)景,實(shí)時(shí)音視頻的傳輸也是和上層業(yè)務(wù)邏輯耦合最為緊密的傳輸場(chǎng)景,傳輸邏輯需要與媒體層面的信源編碼緊密配合完成低延遲的互動(dòng)。
●?需要有一個(gè)可靠的網(wǎng)絡(luò)通道,來(lái)實(shí)現(xiàn)控制消息的收發(fā)。
●?需要有多個(gè)可靠的實(shí)時(shí)通道,來(lái)滿足多路數(shù)據(jù)流(音視頻等)的收發(fā)。
●?在帶寬受限時(shí),需要解決上述流的優(yōu)先級(jí)管理問(wèn)題(控制通道>音頻>視頻)。
●?To B 場(chǎng)景下,要能讓客戶自主靈活地決定流的優(yōu)先級(jí)和傳輸降級(jí)策略。
●?媒體中的相關(guān)策略,需要與當(dāng)前的網(wǎng)絡(luò)狀況緊密配合。
●?在網(wǎng)內(nèi)傳輸時(shí),不同地區(qū)間和運(yùn)營(yíng)商間互通的網(wǎng)絡(luò)質(zhì)量迥異,各種網(wǎng)絡(luò) buffer、延遲及丟包相差巨大。
通用數(shù)據(jù)傳輸
聲網(wǎng)推出的?FPA 全鏈路加速產(chǎn)品在全球范圍為各類應(yīng)用(包括 Web/游戲/音視頻等)提供端到端的鏈路加速服務(wù)。
●?同時(shí)支持端到端的可靠傳輸通道和不可靠傳輸通道。
●?作為通用數(shù)據(jù)加速通道,數(shù)據(jù)流量變化范圍較大。
●?低延遲。
低延遲可靠消息傳輸
RTM 是聲網(wǎng)對(duì)外提供的穩(wěn)定可靠、超低延時(shí)、高并發(fā)的全球信令與消息云服務(wù)。
●?消息體積小,消息頻率較高,整體流量相對(duì)較低。
●?低延遲。
低優(yōu)先級(jí)可靠數(shù)據(jù)傳輸
Report 是聲網(wǎng)內(nèi)部的埋點(diǎn)和事件數(shù)據(jù)上報(bào),對(duì)內(nèi)和對(duì)外提供問(wèn)題排查的信息。
●?傳輸優(yōu)先級(jí)和實(shí)時(shí)性要求低,要避免對(duì)其他業(yè)務(wù)數(shù)據(jù)產(chǎn)生影響。
●?與后端保持長(zhǎng)連接,連接數(shù)量巨大,但絕大部分時(shí)間空閑。
各項(xiàng)業(yè)務(wù)網(wǎng)內(nèi)傳輸
SD-RTNTM是聲網(wǎng)內(nèi)部的全球覆蓋網(wǎng)絡(luò),覆蓋200多個(gè)國(guó)家和地區(qū),承載著不同業(yè)務(wù)的流量。
●?跨區(qū)傳輸中長(zhǎng)肥鏈路(亦即長(zhǎng)肥網(wǎng)絡(luò),帶寬延遲積大、丟包率高)的傳輸,大鏈路延遲下的帶寬爬升/丟包要迅速恢復(fù)。
●?不同國(guó)家/運(yùn)營(yíng)商之間的網(wǎng)絡(luò)質(zhì)量難以保證,丟包/抖動(dòng)十分常見(jiàn)。
●?不同業(yè)務(wù)/客戶/場(chǎng)景的不同程度 QoS 保證。

現(xiàn)有方案的不足
傳輸需求各有不同,我們首先 review 業(yè)界的各項(xiàng)產(chǎn)品,以求獲得成熟的解決方案,但盡管調(diào)研發(fā)現(xiàn)均存在各種不滿足的地方:

我們從業(yè)務(wù)需求整理發(fā)現(xiàn),各業(yè)務(wù)之間的傳輸存在共性的同時(shí)也存在差異性,單獨(dú)為一個(gè)業(yè)務(wù)的傳輸尋求已有的解決方案尚可滿足,但是使用一種傳輸框架兼顧所有的業(yè)務(wù)場(chǎng)景絕非易事,這需求對(duì)各業(yè)務(wù)需求的深入理解和抽象提煉,業(yè)界的各項(xiàng)產(chǎn)品難也實(shí)現(xiàn)。
最終,自研傳輸層協(xié)議/框架成為了最輕便、適配性最強(qiáng),但也是最具有挑戰(zhàn)的解決方案。
AUT 的設(shè)計(jì)目標(biāo)
我們根據(jù)已有業(yè)務(wù)的傳輸需求和特性,梳理并總結(jié)了自研傳輸協(xié)議需要實(shí)現(xiàn)的幾個(gè)目標(biāo),如下:
1、提供多路復(fù)用的傳輸通道以同時(shí)承載不同的數(shù)據(jù)類型,并對(duì)不同類型數(shù)據(jù)提供有效的描述方案。
2、提供足夠的可擴(kuò)展性,能夠適配各種應(yīng)用層的傳輸相關(guān)的邏輯和輸入,例如整塊數(shù)據(jù)/分塊數(shù)據(jù)/零散數(shù)據(jù)等,實(shí)時(shí)傳輸往往和應(yīng)用結(jié)合揭秘,對(duì)于底層傳輸控制的粒度也會(huì)要求更細(xì)。
3、對(duì)不同數(shù)據(jù)提供不同級(jí)別的傳輸質(zhì)量保證,例如不同的優(yōu)先級(jí)/可靠性/冗余力度。
4、靈活的傳輸控制模塊接口,可擴(kuò)展實(shí)現(xiàn)不同擁塞控制、丟包檢測(cè)、網(wǎng)絡(luò)檢測(cè)等策略。
5、底層網(wǎng)絡(luò)接口化,能夠支持任何虛擬網(wǎng)絡(luò)。
6、對(duì)上層提供有效的網(wǎng)絡(luò)質(zhì)量分析,方便上層針對(duì)不同網(wǎng)絡(luò)質(zhì)量應(yīng)用不同業(yè)務(wù)邏輯。
7、適配不同的網(wǎng)絡(luò)場(chǎng)景,適應(yīng)異構(gòu)網(wǎng)絡(luò)下的亂序/抖動(dòng)/長(zhǎng)肥/限流等網(wǎng)絡(luò)狀況。

架構(gòu)演進(jìn)過(guò)程
●?最開始的原型驗(yàn)證階段,我們使用最簡(jiǎn)模型完成傳輸層的抽象,并僅針對(duì)音視頻媒體中的不可靠傳輸場(chǎng)景下應(yīng)用。

●?在完成原型驗(yàn)證后,AUT 演進(jìn)成為 Session 和 Connection 的分層設(shè)計(jì):Session 主要負(fù)責(zé) Stream 的管理,不同的 Stream 完成不同的業(yè)務(wù)需求,Connection 負(fù)責(zé)業(yè)務(wù)無(wú)關(guān)的純粹傳輸控制,以此完成傳輸控制和業(yè)務(wù)需求的解耦;獨(dú)立抽象出網(wǎng)絡(luò)收發(fā)相關(guān)的接口,使得 AUT 可以 Overlay 在各種網(wǎng)絡(luò)上;引入加密/認(rèn)證等安全特性;引入 MTU 探測(cè)、Padding 等網(wǎng)絡(luò)狀態(tài)探測(cè)能力。

●?完成分層設(shè)計(jì)后,AUT 的分層進(jìn)一步細(xì)化:在 Stream 中逐步演進(jìn)出更細(xì)粒度的通用模塊和專用模塊,通過(guò)抽象實(shí)現(xiàn) Writer/Reader 、組合流控制器和緩存等完成不同的信道編解碼、流控和重傳控制等操作,使得每條流的弱網(wǎng)對(duì)抗能力具備差異化以適配不同的業(yè)務(wù)數(shù)據(jù);Connection 統(tǒng)籌管理多個(gè) Path,每個(gè) Path 作為獨(dú)立的傳輸控制單元互不影響,從能夠同時(shí)支持多調(diào) Path 同時(shí)傳輸;在傳輸算法上,引入了流量模型檢測(cè)、丟包類型檢測(cè)等更深入的網(wǎng)絡(luò)狀態(tài)檢測(cè)模塊。

弱網(wǎng)對(duì)抗能力
伴隨 AUT 的演進(jìn),我們對(duì)網(wǎng)絡(luò)的分析評(píng)估的維度也逐步豐富,這些網(wǎng)絡(luò)分析能力是 AUT 弱網(wǎng)對(duì)抗能力的基礎(chǔ):
●?亂序檢測(cè)能力:檢測(cè)網(wǎng)絡(luò)中的亂序程度,并在亂序條件下對(duì)傳輸算法做對(duì)應(yīng)的調(diào)整,例如調(diào)整丟包檢測(cè)算法和擁塞控制算法以適配亂序場(chǎng)景;
●?帶寬探測(cè)能力:具備多種不同維度的帶寬探測(cè)算法,在不同的探測(cè)需求下進(jìn)行優(yōu)勢(shì)互補(bǔ):packet train 探測(cè)帶寬上限,以極小的流量模糊探測(cè)較高的傳輸帶寬;padding 探測(cè)實(shí)際帶寬,在應(yīng)用數(shù)據(jù)不足時(shí),將實(shí)際流量填充到網(wǎng)絡(luò)中,真實(shí)地驗(yàn)證網(wǎng)絡(luò)的實(shí)際容量;
●?流量模型檢測(cè)能力:對(duì)實(shí)際網(wǎng)絡(luò)流量的模型進(jìn)行檢測(cè),例如公網(wǎng)中典型的 traffic policing/shaping 等流量限制策略,并針對(duì)性的調(diào)整發(fā)送控制策略;
●?丟包類型檢測(cè)能力:對(duì)真實(shí)丟包的模式進(jìn)行分析,輸入當(dāng)前的丟包模型,例如隨機(jī)丟包和擁塞丟包等,并根據(jù)丟包類型在其他模塊中進(jìn)行動(dòng)態(tài)補(bǔ)償。
在明確網(wǎng)絡(luò)的當(dāng)前狀態(tài)后,AUT 內(nèi)部的各種弱網(wǎng)對(duì)抗能力才能“對(duì)癥下藥”:
●??Stream 級(jí)別的通用信道編碼能力:Stream 內(nèi)部實(shí)現(xiàn)了通用的分組編解碼框架,針對(duì) FEC 中的分組碼能夠非常容易集成,使得不同的 Stream 在重傳、流控等差別之外,還具備不同編碼力度的保護(hù),對(duì)外提供的傳輸伸縮性更廣泛;
●?動(dòng)態(tài)反饋控制能力:AUT 的反饋主要是 Ack 包,有效的 Ack 反饋為內(nèi)部算法邏輯的準(zhǔn)確性提供保證:動(dòng)態(tài)啟用 AckAck 對(duì)抗 Ack 丟包;不同 Ack Delay 適配性能/延遲;Ack 鏈路抖動(dòng)/突發(fā)檢測(cè),補(bǔ)償發(fā)送控制;
●?深度優(yōu)化的擁塞控制/丟包檢測(cè)算法:內(nèi)部對(duì)典型的擁塞控制/丟包檢測(cè)算法在各種場(chǎng)景下進(jìn)行深度優(yōu)化和探索,在保持算法本身特性的同時(shí),適配實(shí)時(shí)傳輸中各種傳輸控制的需求。
傳輸效果對(duì)比
作為傳輸層協(xié)議,我們同樣于其他傳輸層協(xié)議對(duì)于部分真實(shí)業(yè)務(wù)場(chǎng)景進(jìn)行了效果的對(duì)比,一些結(jié)果如下:

可以看到無(wú)論在高低帶寬限制(100Mbps 和 4Mbps)、0-50% 的單獨(dú)上行和同時(shí)上下行的隨機(jī)丟包、20ms 和 200ms 的 RTT 場(chǎng)景下,AUT 相比 lsquic 能夠做到更接近實(shí)際帶寬的吞吐量。
落地場(chǎng)景綜述
截至目前,AUT 逐步落地在了聲網(wǎng)以下的業(yè)務(wù)場(chǎng)景:
RTC
AUT 在聲網(wǎng) RTC 業(yè)務(wù)中的整體所在位置如下圖所示,可以看到,在用戶接入聲網(wǎng)邊緣節(jié)點(diǎn)的 Lastmile,和聲網(wǎng)邊緣節(jié)點(diǎn)之間基于?SD-RTNTM?的網(wǎng)內(nèi)傳輸,都使用 AUT 作為 4 層傳輸協(xié)議。

Lastmile 使用 AUT 協(xié)議,讓我們整體重構(gòu)了媒體和傳輸?shù)膮f(xié)作關(guān)系,實(shí)現(xiàn)了更快的網(wǎng)絡(luò)狀態(tài)跟蹤(碼率爬升從 20+ 秒提升到 3 秒左右)、更好的音頻優(yōu)先體驗(yàn)(無(wú)卡頓),并有效降低了卡頓和時(shí)延、對(duì)硬件編碼的支持更好從而大幅提升了弱網(wǎng)的用戶體驗(yàn)。
在不同網(wǎng)絡(luò)條件下,使用 AUT 后視頻的部分指標(biāo)如下:

FPA
FPA 中 AUT 的所在位置和 RTC 類似,F(xiàn)PA 內(nèi)的傳輸數(shù)據(jù)不再局限于音視頻,但由于復(fù)用 AUT,各種場(chǎng)景下的傳輸能力也得到了大幅提升,我們?cè)诓煌貐^(qū)測(cè)試 FPA 與公網(wǎng)的傳輸速率,相關(guān)數(shù)據(jù)如下:

RTM
在接入 RTM 的邊緣節(jié)點(diǎn)中,RTM 使用 AUT 替換 TCP,使用 AUT 接入 RTM 在各種弱網(wǎng)下的到達(dá)率和時(shí)延大幅度領(lǐng)先于 TCP 接入。通過(guò)發(fā)送1000個(gè)消息數(shù)據(jù)并記錄其到達(dá)時(shí)間,對(duì)比測(cè)試 AUT 和由 TCP 代表的公共互聯(lián)網(wǎng)傳輸協(xié)議在三種情況下的測(cè)試效果顯示,使用 AUT 相比 TCP 在限速 100Kbps 條件下平均消息到達(dá)延遲下降 53%,丟包 20% 的條件下平均消息到達(dá)延遲下降 67%,限速+丟包條件下平均消息到達(dá)延遲下降 55%。



Report
我們?cè)谶B接 Report 和 RTC 邊緣同時(shí)使用 AUT,并在 Report 的 AUT 連接中使用 LEDBAT 算法,假如此時(shí)各連接存在共享的瓶頸帶寬時(shí),Report 連接能夠以極地競(jìng)爭(zhēng)性參與傳輸,保證對(duì)其他業(yè)務(wù)數(shù)據(jù)產(chǎn)生最小的影響。

SD-RTNTM
在聲網(wǎng)?SD-RTNTM?網(wǎng)內(nèi)使用 AUT 協(xié)議,使得網(wǎng)內(nèi)傳輸具備提供不同QOS的能力,進(jìn)一步提高了業(yè)務(wù)數(shù)據(jù)的傳輸效率,在長(zhǎng)肥網(wǎng)絡(luò)下使用 FEC 減少重傳次數(shù),進(jìn)一步降低弱網(wǎng)下的網(wǎng)內(nèi)延遲,對(duì)公網(wǎng)的中的 Traffic Policing/Traffic Shaping 能明確檢測(cè)并適配,避免超發(fā)導(dǎo)致的丟包,網(wǎng)絡(luò)質(zhì)量評(píng)估更明確、實(shí)現(xiàn)了更好的網(wǎng)內(nèi)路徑規(guī)劃,Metadata 機(jī)制極大簡(jiǎn)化了業(yè)務(wù)的控制面邏輯。
針對(duì) RTC 網(wǎng)內(nèi)傳輸結(jié)果,我們抽取了 40 個(gè)機(jī)房進(jìn)行對(duì)比,結(jié)果如下:
方案AUT使用前AUT使用后到達(dá)率不達(dá)標(biāo)時(shí)間00.00709%00.00489%抖動(dòng)率不達(dá)標(biāo)時(shí)間00.00577%00.00564%
由于之前的 RTC 網(wǎng)內(nèi)傳輸質(zhì)量已經(jīng)十分優(yōu)秀,在到達(dá)率和抖動(dòng)相關(guān)指標(biāo)都已經(jīng)做到 4 個(gè) 9 的達(dá)標(biāo)前提下,引入 AUT 后進(jìn)一步降低不達(dá)標(biāo)時(shí)間,使得?SD-RTNTM?的質(zhì)量向?qū)>€進(jìn)一步看齊。