腾讯视频P2P带宽节省率持续提升之路
Photo by Brett Sayles from Pexels?
要想提升P2P帶寬節(jié)省率,最直接的方式當(dāng)然是壓縮CDN帶寬,但簡單粗暴的減少CDN下載勢(shì)必會(huì)帶來播放體驗(yàn)問題。騰訊視頻數(shù)據(jù)傳輸研發(fā)高級(jí)工程師嚴(yán)華梁在LiveVideoStackCon 2019深圳的演講中詳細(xì)介紹了騰訊視頻針對(duì)P2P帶寬節(jié)省的最新探索與實(shí)踐。
文 / 嚴(yán)華梁
整理 / LiveVideoStack
PART1/P2P技術(shù)項(xiàng)目背景
?
P2P實(shí)際上是利用用戶之間互相分享視頻的數(shù)據(jù),來減少從CDN下載數(shù)據(jù)的量,從而達(dá)到帶寬節(jié)省的效果。
?
一般情況下,在使用P2P進(jìn)行帶寬節(jié)省的基礎(chǔ)上,服務(wù)所需帶寬的計(jì)算公式如上圖所示:帶寬 = 播放量平均碼率 *平均播放時(shí)長(1-P2P帶寬節(jié)省率)。觀看視頻的用戶除了從平臺(tái)服務(wù)器上調(diào)用數(shù)據(jù),還會(huì)從其他用戶那里來調(diào)用數(shù)據(jù)。
?
騰訊視頻業(yè)務(wù)在過去幾年迎來了高速的發(fā)展,用戶規(guī)模不斷提高,無論是播放量還是視頻平均碼率都有明顯的提升。此時(shí)擺在我們面前的一大挑戰(zhàn)就是:如何持續(xù)提升P2P帶寬節(jié)省率,并做到CDN帶寬成本保持較少增長?
?
?
上圖展現(xiàn)了我們提升P2P帶寬節(jié)省率的思路。結(jié)合之前的帶寬計(jì)算公式我們可知,如果需要降低CDN的帶寬成本,最簡單粗暴的方式就是減少CDN的下載,但這樣會(huì)帶來諸如卡頓的音視頻體驗(yàn)問題。我們的思路是首先系統(tǒng)性地優(yōu)化P2P網(wǎng)絡(luò)的傳輸效率。由于P2P網(wǎng)絡(luò)是一個(gè)對(duì)端網(wǎng)絡(luò),因此需要從下載端與上傳端兩個(gè)方面綜合看待該項(xiàng)命題。那么在完成對(duì)P2P的系統(tǒng)優(yōu)化之后,在此基礎(chǔ)上我們還需要考慮更少的CDN下載,接下來我們就分階段思考如何實(shí)現(xiàn)這一目標(biāo)。
PART2/如何提升P2P帶寬節(jié)省率?
?
若想實(shí)現(xiàn)更快的P2P下載,需要做的第一件事情便是傳輸協(xié)議的優(yōu)化。眾所周知,在TCP中存在一個(gè)慢啟動(dòng)閾值,為了優(yōu)化擁塞控制算法我們需要對(duì)慢啟動(dòng)閾值進(jìn)行動(dòng)態(tài)設(shè)定,算法策略其實(shí)就是經(jīng)典的ssthresh=max(BDP, cwndα/10)。在此基礎(chǔ)之上我們又引入兩個(gè)策略:丟包避免與丟包過濾。丟包避免從降低丟包率入手,也就是最近RTT大于rttMin+(rttMax-rttMin) β/100,cwnd不增加;丟包過濾從提高吞吐率入手,也就是最近RTT小于rttMin+(rttMax-rttMin)* γ/100, cwnd不退避。上圖展示了我們自研的P2P擁塞控制算法與TCP Cubic的對(duì)比結(jié)果,紅線代表TCP Cubic而藍(lán)色則代表我們自研的P2P CC。從數(shù)據(jù)中可以看到當(dāng)出現(xiàn)網(wǎng)絡(luò)抖動(dòng)時(shí),TCP Cubic對(duì)丟包和時(shí)延比較敏感,滑動(dòng)窗口抖動(dòng)非常劇烈,而P2P CC則相對(duì)平穩(wěn)許多。
?
TCP的擁塞控制盡管已經(jīng)演化多年,但仍舊存在較多問題。這告訴我們一個(gè)道理:沒有一種擁塞控制算法能夠適應(yīng)所有的業(yè)務(wù)場景或者說網(wǎng)絡(luò)場景。因此我們希望通過結(jié)合應(yīng)用場景來實(shí)現(xiàn)個(gè)性化的擁塞控制。
?
?
所謂的個(gè)性化擁塞控制其實(shí)就是依據(jù)播放時(shí)間線進(jìn)行差異化傳輸。如上圖所示,播放時(shí)間線從播放點(diǎn)開始梳理,播放點(diǎn)往后開始讀取數(shù)據(jù)。那么離播放點(diǎn)越近的數(shù)據(jù)則會(huì)被優(yōu)先讀取到,即優(yōu)先級(jí)較高。于是在這一區(qū)間段內(nèi)我們采用比較激進(jìn)的擁塞控制參數(shù),盡可能保證傳輸?shù)男识鴵p失一部分丟包重傳的優(yōu)化;在距離播放點(diǎn)較遠(yuǎn)的區(qū)段內(nèi),采用另外一種策略—— 優(yōu)先考慮丟包率和重傳率并降低吞吐率。上圖展示的是新舊算法P2P下載速度的對(duì)比,我們可以看到相對(duì)于固定閾值的舊算法,新算法尤其是在FAST與MEDIUM檔有明顯提升。在網(wǎng)絡(luò)下載效率方面,優(yōu)化后的整體重復(fù)下載率較之前有非常明顯的提升。
?
?
解決完擁塞控制的相關(guān)命題,接下來面對(duì)的是如何進(jìn)行有效選種并高效利用。最關(guān)鍵的一點(diǎn)便是如何評(píng)估種子的質(zhì)量。
?
這里我們引入一套完整的基于QoS的選種淘汰機(jī)制:第一項(xiàng)考察的指標(biāo)是數(shù)據(jù)完整度,例如在PC客戶端的磁盤內(nèi)存在一些緩存,PC客戶端上的數(shù)據(jù)相對(duì)更加完整,這樣便可在整個(gè)視頻播放的過程中提供更高質(zhì)量的上傳數(shù)據(jù);第二項(xiàng)考察的指標(biāo)為是否斷連;第三項(xiàng)是數(shù)據(jù)接收成功率,其中包括丟包率;最后一項(xiàng)指標(biāo)是被凍結(jié)次數(shù),也就是當(dāng)連接上一個(gè)比較好的種子之后,對(duì)上傳效率的影響是積極的。但如果進(jìn)行一次數(shù)據(jù)交互之后對(duì)端提供的反饋信令結(jié)果是忙碌,那么可能是因?yàn)榉N子質(zhì)量出色而連接的對(duì)象有些多。在這種情況下,該時(shí)間段內(nèi)負(fù)載已經(jīng)達(dá)到較為滿負(fù)荷的狀態(tài),有可能超過了硬件可承載的水平。當(dāng)有新的請(qǐng)求過來時(shí),會(huì)反饋忙碌的狀態(tài),從而控制下載請(qǐng)求。但由于該種子質(zhì)量出色,因此服務(wù)器會(huì)選擇對(duì)該鏈路進(jìn)行凍結(jié)處理,暫時(shí)不向該端請(qǐng)求數(shù)據(jù)傳輸,并保留對(duì)接的端口,待該端不再忙碌之后繼續(xù)請(qǐng)求下載數(shù)據(jù)。
?
隨著智能路由器的普及,NAT類型被限制得越來越嚴(yán)格,P2P想找到一個(gè)質(zhì)量出色的種子并成功連接的概率越來越低、難度越來越大,因此設(shè)計(jì)這樣的保護(hù)機(jī)制可以確保種子物盡其用。
?
選種之后面臨的問題是選片。在P2P傳輸中,一個(gè)流媒體文件會(huì)被做切片處理,從而更充分地利用UDP進(jìn)行傳輸。UDP本身發(fā)送一個(gè)數(shù)據(jù)包會(huì)受MTU的影響,例如以64K為一片,切片一段文件,并以不同顏色表示若干個(gè)文件片段的下載狀態(tài)。每一片應(yīng)當(dāng)分配給哪一個(gè)種子來實(shí)現(xiàn)P2P下載?這是我們?cè)谶x片算法當(dāng)中需要考慮的問題。
?
結(jié)合時(shí)間線,我們提出了一個(gè)被稱為集中式協(xié)同選片算法的策略。按照時(shí)間軸進(jìn)行梳理,離播放點(diǎn)近的數(shù)據(jù)是即將被播放的,下載優(yōu)先級(jí)最高。這里的“集中式”就是指集中下載優(yōu)先級(jí)高的數(shù)據(jù),從而保證整體播放的流暢。“協(xié)同”則是指多個(gè)種子對(duì)優(yōu)先級(jí)高的某一區(qū)域數(shù)據(jù)進(jìn)行協(xié)同下載,例如前面幾片分配給一個(gè)種子,后面幾片分配給另外一個(gè)種子。如果簡單粗暴地讓64K數(shù)據(jù)直接向某一個(gè)種子提出下載請(qǐng)求,那么一旦該種子下線或?qū)?yīng)的網(wǎng)絡(luò)中斷,那么64K的數(shù)據(jù)相當(dāng)于被整體丟包,假如丟包的數(shù)據(jù)處于距離播放點(diǎn)較近的位置,短時(shí)間內(nèi)又無法高效地下載,就會(huì)出現(xiàn)播放的中斷。
?
為了做到集中式協(xié)同下載,我們引入了兩個(gè)隊(duì)列:可下載塊隊(duì)列與正在下載塊隊(duì)列。在P2P中,通過種子之間的位圖交換,我們可以獲知應(yīng)當(dāng)下載哪些塊,這便是可下載塊隊(duì)列。正在下載塊隊(duì)列的大小是相對(duì)固定的,也就是說對(duì)于任何一個(gè)種子,如果在選片時(shí)發(fā)現(xiàn)正在下載的塊沒有完整下載完畢,那么就會(huì)優(yōu)先下載這一部分。例如一個(gè)種子開始下載,此時(shí)系統(tǒng)發(fā)現(xiàn)其他種子超時(shí),那么系統(tǒng)不會(huì)重新下載別的分片而是繼續(xù)下載該種子后面的分片,從而利用這種集中式協(xié)同的思路,盡可能完整地下載某一塊數(shù)據(jù)。我們知道UDP的數(shù)據(jù)傳輸沒有TCP那樣嚴(yán)格依賴順序,而集中式協(xié)同的設(shè)計(jì)主要是為了按順序盡可能快地將距離播放點(diǎn)比較近的數(shù)據(jù)下載下來,從而實(shí)現(xiàn)P2P下載效率與播放體驗(yàn)的精準(zhǔn)平衡。
?
全平臺(tái)的視頻介質(zhì)統(tǒng)一至關(guān)重要,大家知道廣播電視行業(yè)需要牌照,這樣影視作品才能在TV端合法上線。但騰訊沒有這方面的牌照資質(zhì),因此我們需要尋求外部牌照方合作。而第三方合作就存在一個(gè)問題:對(duì)方會(huì)要求在TV端播放時(shí)必須顯示牌照方的水印,而不能顯示騰訊視頻自己的水印。
?
?
一般情況下,水印會(huì)被直接編碼在原視頻數(shù)據(jù)當(dāng)中,稱為“硬水印”。為了做到全平臺(tái)統(tǒng)一,我們則使用了軟水印技術(shù),也就是將視頻內(nèi)容與水印分開。同一個(gè)視頻內(nèi)容在不同的平臺(tái)上,介質(zhì)完全一樣而水印顯示則根據(jù)場景改變,從而滿足不同場景的水印需求。
?
我們構(gòu)建了一套系統(tǒng)性的種子質(zhì)量提升方案:在第一層,系統(tǒng)會(huì)對(duì)一些無效的種子做過濾處理,這里的“無效種子”更多的是指在一些限制條件下對(duì)種子的篩選擇優(yōu),如ISP過濾(以避免對(duì)運(yùn)營商網(wǎng)絡(luò)不友好的跨運(yùn)營商傳輸)、NAT類型過濾(常規(guī)手段實(shí)現(xiàn)NAT穿透較為困難,我們會(huì)盡可能選用對(duì)稱型以減少在穿透方面的損耗)、平臺(tái)過濾(更多考慮移動(dòng)端,因?yàn)橐苿?dòng)端存在運(yùn)營商網(wǎng)絡(luò)的限制)、連接數(shù)過濾。
?
結(jié)束第一層過濾之后,我們會(huì)根據(jù)一些屬性,使用多屬性權(quán)重打分決策算法對(duì)其進(jìn)行處理。這里的屬性主要有在線時(shí)長(能否提供穩(wěn)定的在線上傳)、上傳能力(如100M、200M帶寬等)、NAT類型與地域就近。完成加權(quán)打分之后,我們會(huì)對(duì)種子進(jìn)行一個(gè)質(zhì)量等級(jí)的劃分。隨后優(yōu)先返回評(píng)分較高的種子,這樣可充分改善客戶端的種子建連與下載效率。
?
?
為實(shí)現(xiàn)更多的P2P上傳,我們還需優(yōu)化上傳控制。在P2P網(wǎng)絡(luò)傳輸?shù)脑缙?#xff0c;例如大家在大學(xué)時(shí)可能用過BT下載,如果宿舍里面有一個(gè)人正在進(jìn)行BT下載,那么其他人可能連常規(guī)的互聯(lián)網(wǎng)訪問都無法正常進(jìn)行。也就是說如果控制不好P2P的上傳過程,實(shí)際上會(huì)對(duì)TCP的ACK等普通網(wǎng)絡(luò)傳輸過程帶來不利影響,因此我們希望實(shí)現(xiàn)更加出色的上傳控制。這里的優(yōu)化借鑒了類BBR的思路,也就是通過周期性地動(dòng)態(tài)測(cè)速,對(duì)每個(gè)P2P信道實(shí)時(shí)計(jì)算上行帶寬累加,并作為限速值進(jìn)行上傳動(dòng)態(tài)限速控制,限速機(jī)制采用TCP中勻速發(fā)送的機(jī)制,從而降低瞬時(shí)大數(shù)據(jù)包對(duì)網(wǎng)絡(luò)傳輸鏈路的沖擊。
?
對(duì)于客戶端來說,通過信道連接不同種子,我們這里測(cè)量的是不同信道的帶寬情況,并累加作為整體上傳的限速值。上圖右側(cè)可視化圖表展示了動(dòng)態(tài)測(cè)速方案的效果,我們可以看出其整體波動(dòng)均勻集中。用戶在使用客戶端訪問服務(wù)時(shí)可能會(huì)同時(shí)進(jìn)行一些其他的上網(wǎng)行為,例如看視頻時(shí)點(diǎn)擊某個(gè)網(wǎng)頁。測(cè)速圖表中的“PC空閑時(shí)間”就是指用戶未使用鼠標(biāo)、鍵盤的時(shí)間,如果偵測(cè)到鼠標(biāo)、鍵盤使用,那么我們則認(rèn)為用戶在訪問互聯(lián)網(wǎng)其他服務(wù)。根據(jù)測(cè)速結(jié)果我們可以看到,隨著空閑時(shí)間不斷增加,動(dòng)態(tài)測(cè)速呈現(xiàn)一個(gè)緩慢上升的趨勢(shì),也就是說動(dòng)態(tài)測(cè)速可以感知并自適應(yīng)用戶其他訪問互聯(lián)網(wǎng)的行為,并確保視頻服務(wù)的可用。
在完成對(duì)P2P下載與上傳的優(yōu)化之后,我們還需實(shí)現(xiàn)更少的CDN下載。我們所做的第一件事就是優(yōu)化http下載,對(duì)此我們并未采用過于高深莫測(cè)的算法,而更多采用的是策略優(yōu)化+擁塞控制優(yōu)化(QUIC、BBR)。
?
?
策略上的優(yōu)化,總體思想其實(shí)是多元——第一項(xiàng)是MSS也就是IP直出和域名兜底。IP直出是為了減少DNS解析所帶來的耗時(shí),域名兜底則主要是為了適應(yīng)運(yùn)營商的切換,如用戶從中國電信的Wi-Fi網(wǎng)絡(luò)切換到中國聯(lián)通的4G移動(dòng)網(wǎng)絡(luò),此時(shí)原電信服務(wù)器的IP需要切換至聯(lián)通服務(wù)器下的IP之上,我們會(huì)對(duì)域名進(jìn)行解析并實(shí)現(xiàn)兜底。
?
第二項(xiàng)是多IP競速連接,之前IP直出決定了有多個(gè)IP待選,這里我們使用了多IP競速連接以提高速度。
?
第三項(xiàng)是多鏈接加速,現(xiàn)在大家提到比較多的一個(gè)是MP TCP,也就是實(shí)現(xiàn)WiFi網(wǎng)卡與運(yùn)營商網(wǎng)卡的組合加速。
?
在策略優(yōu)化的基礎(chǔ)上,我們進(jìn)行了擁塞控制優(yōu)化,如使用QUIC、BBR等。
?
若想實(shí)現(xiàn)更少的CDN下載,除了優(yōu)化http,必不可少的一項(xiàng)舉措是合理利用CDN資源。
?
結(jié)合業(yè)務(wù)特性,我們進(jìn)行了系統(tǒng)調(diào)度的優(yōu)化:首先嘗試深度整合業(yè)務(wù),例如用戶訪問騰訊視頻,如果是非會(huì)員那么會(huì)在正片開始之前看到一段時(shí)間較長的廣告。在廣告播放期間系統(tǒng)就可利用P2P網(wǎng)絡(luò)預(yù)先下載正片數(shù)據(jù),在此期間CDN并未被使用。除此之外在播放專輯畫面時(shí),如果專輯中上一集即將播放結(jié)束,那么下一集即可開始預(yù)加載。當(dāng)然還有一種情況是用戶退出當(dāng)前正片之后,可能需要重新點(diǎn)擊打開重復(fù)觀看,此時(shí)系統(tǒng)會(huì)對(duì)播放點(diǎn)數(shù)據(jù)做緩存處理,從而實(shí)現(xiàn)當(dāng)用戶想要再次打開觀看時(shí),系統(tǒng)可快速從本地加載數(shù)據(jù)并快速開始播放。
?
當(dāng)然,如果是會(huì)員無廣告的情況,為了保證播放體驗(yàn)我們還是會(huì)優(yōu)先選擇CDN下載數(shù)據(jù),從而保證快速啟動(dòng)播放。在這里我們構(gòu)建了一套網(wǎng)絡(luò)預(yù)測(cè)模型,結(jié)合歷史下載速度、實(shí)時(shí)下載速度與當(dāng)前視頻碼率綜合做出決策,判斷啟動(dòng)播放究竟需要多長時(shí)間,并盡可能降低CDN的下載時(shí)長。例如當(dāng)用戶使用光纖網(wǎng)絡(luò)時(shí),由于網(wǎng)絡(luò)帶寬資源充裕,下載速度較高,即便沒有P2P,CDN也可快速下載所需數(shù)據(jù)并實(shí)現(xiàn)快速啟動(dòng)播放。
?
除以上兩點(diǎn)之外,我們還會(huì)從用戶行為入手。上圖右側(cè)圖線是我們與香港中文大學(xué)進(jìn)行的聯(lián)合研究的結(jié)果:不同的媒體類型如電影、電視劇、綜藝等,其視頻用戶中斷播放的位置也不盡相同。對(duì)于不同類型的視頻用戶在某一個(gè)時(shí)間段離開的概率不同,且存在一定規(guī)律。通過數(shù)據(jù)分析我們可以基于此在下載的時(shí)長控制方面進(jìn)行一些針對(duì)性處理。
實(shí)現(xiàn)更少CDN下載的最后一點(diǎn)是多源體系建設(shè)。由于CDN價(jià)格高昂,因此我們應(yīng)當(dāng)科學(xué)調(diào)配內(nèi)容與承載網(wǎng)絡(luò)類型之間的關(guān)系,從而實(shí)現(xiàn)產(chǎn)品服務(wù)與成本控制的精準(zhǔn)平衡。
上圖左側(cè)展示了CDN的大概拓?fù)浣Y(jié)構(gòu),從上到下依次是距離用戶比較遠(yuǎn)的服務(wù)器、城市或社區(qū)的機(jī)房、家用路由器與用戶終端,與用戶之間的距離由遠(yuǎn)及近。隨著5G時(shí)代的到來,大家經(jīng)常提到的一個(gè)詞是移動(dòng)邊緣計(jì)算也就是MEC,未來5G基站即可承擔(dān)一部分機(jī)房的角色。大家總是強(qiáng)調(diào)5G技術(shù)的高帶寬低延時(shí),如果未來我們的視頻內(nèi)容直接下沉到基站,借助5G網(wǎng)絡(luò)訪問就可達(dá)到類似于局域網(wǎng)的效果,其所能達(dá)到的速度是驚人的。如果CDN距離用戶較遠(yuǎn),那么本身就存在一個(gè)傳輸鏈路上的損耗;我們嘗試盡可能縮短用戶與內(nèi)容之間的距離,進(jìn)一步突破互聯(lián)網(wǎng)傳輸技術(shù)對(duì)用戶體驗(yàn)的桎梏。
PART3/總結(jié)
P2P節(jié)省率=P2P帶寬/ (P2P帶寬 + CDN帶寬), 要想提升P2P帶寬節(jié)省率,最直接的方式當(dāng)然是直接壓縮CDN帶寬,如減少CDN下載;但是簡單粗暴的減少CDN下載勢(shì)必會(huì)帶來播放體驗(yàn)問題,所以我們的思路是先優(yōu)化P2P網(wǎng)絡(luò), 在P2P網(wǎng)絡(luò)優(yōu)化下載的效率和穩(wěn)定性提升之后,再來合理的減少CDN下載。
點(diǎn)擊【閱讀原文】訪問購票頁面
總結(jié)
以上是生活随笔為你收集整理的腾讯视频P2P带宽节省率持续提升之路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5G+AI时代的高效视频处理
- 下一篇: Xilinx FPGA,“加速”视频质量