QUIC助力Snapchat提升用戶體驗(yàn)

來源: LiveVideoStack
作者:NetworkTeam
時(shí)間:2021-07-12
17071
Snapchat(色拉布)是由斯坦福大學(xué)兩位學(xué)生開發(fā)的一款“閱后即焚”照片分享應(yīng)用。利用該應(yīng)用程序,用戶可以拍照、錄制視頻、添加文字和圖畫,并將他們發(fā)送到自己在該應(yīng)用上的好友列表, 這些照片及視頻被稱為“快照”(Snaps)。本文來自Snapchat Client Network Team,主要介紹了Snapchat在使用QUIC協(xié)議后,用戶體驗(yàn)得到了很大提升。

在Snapchat,我們的目標(biāo)是讓Snapchat Camera能夠以最快的方式分享精彩瞬間。我們不希望用戶在跟朋友分享的時(shí)候發(fā)生任何的延時(shí)。

在使用Snapchat的時(shí)候,網(wǎng)絡(luò)請求特別重要。與UI更新和磁盤寫入需要消耗數(shù)毫秒相比,網(wǎng)絡(luò)延時(shí)可以高達(dá)數(shù)秒,而且伴隨著高錯(cuò)誤率和設(shè)備受限。為了降低延時(shí)和錯(cuò)誤,我們把請求和響應(yīng)變得盡可能小,降低不必要的同步,通過全球內(nèi)容分發(fā)合作伙伴,使媒體信息接近用戶,并使用更加高效的、下一代網(wǎng)絡(luò)協(xié)議——QUIC(Quick UDP Internet Connections)。


01

QUIC協(xié)議是如何助力Snapchat的?



讓我們先來看看QUIC之前的網(wǎng)絡(luò)堆棧。以Snap為例,在應(yīng)用層,我們先將Snap媒體放入HTTP2 request payload中,然后使用TLS確保安全層上的連接安全,再通過TCP將請求分塊,并將Snap上傳到服務(wù)器。然而,對于移動網(wǎng)絡(luò)環(huán)境來說,TCP+TLS+HTTP2協(xié)議棧是次優(yōu)的。比如,當(dāng)Snap用戶在Wifi和WWAN之間切換的時(shí)候,TCP就會請求失敗。當(dāng)Snap用戶在和朋友聊天的時(shí)候,由于連接中斷而無法發(fā)送信息會給他們帶來糟糕的體驗(yàn)。





QUIC是由谷歌工程師開發(fā)的一種互聯(lián)網(wǎng)傳輸協(xié)議。QUIC基于UDP, 是替換TCP+TLS+HTTP2的HTTP3的基礎(chǔ)。它解決了許多傳輸層和應(yīng)用層的問題,而且應(yīng)用開發(fā)者無需任何修改或者只需做小部分改動。如上圖所示,QUIC不會改變底層操作系統(tǒng)網(wǎng)絡(luò)協(xié)議,也不會更改HTTP。


和TCP+TLS+HTTP2協(xié)議棧相比,QUIC有如下優(yōu)點(diǎn):


更快建連:在發(fā)送有效載荷之前,TCP+TLS需要1~3個(gè)RTT(往返時(shí)延),QUIC支持0RTT。 


改進(jìn)的擁塞控制:QUIC擁有可插拔的擁塞控制,與TCP相比,QUIC向擁塞控制算法提供更豐富的信息,如QUIC BBR v1和QUIC BBR v2。


避免隊(duì)頭阻塞的多路復(fù)用:對于HTTP2連接來說,當(dāng)丟失一個(gè)TCP包時(shí),該連接上的stream無法繼續(xù)前進(jìn),直到這個(gè)包被再次傳輸或者被接收方收到。這就導(dǎo)致延時(shí)增加,進(jìn)而降低用戶體驗(yàn)(在移動網(wǎng)絡(luò)連接環(huán)境中)。而QUIC會通過多路復(fù)用其他stream來消除這種延時(shí)。 


連接遷移:如果IP地址發(fā)生改變,TCP請求將會失敗。而QUIC連接是以一個(gè) 64 位的隨機(jī)數(shù)作為 ID 來標(biāo)識, 即使IP地址改變,客戶端仍可不受干擾地繼續(xù)請求,使用戶體驗(yàn)如常。


發(fā)現(xiàn)連接丟失:QUIC可以快速發(fā)現(xiàn)連接丟失,并避免長時(shí)間的請求掛起。


QUIC的這些優(yōu)點(diǎn)很好地應(yīng)用在Snapchat的用例中:


更快建連:在使用QUIC之前,Snapchat p90建立連接需要耗時(shí)300毫秒,這種連接上的延時(shí)轉(zhuǎn)變?yōu)橛脩舻却訒r(shí),并阻止用戶接收和查看Snap信息。而QUIC上的更快連接直接減少了用戶等待時(shí)間并提升了用戶體驗(yàn)。


改進(jìn)的擁塞控制:Snap上,用戶上傳的媒體文件可高達(dá)10MB。更好的擁塞控制算法可以提升流量,并降低延時(shí)和錯(cuò)誤率(尤其對于大文件來說)。


避免隊(duì)頭阻塞的多路復(fù)用:Snapchat擁有豐富的短內(nèi)容用例,如Snaps和故事、發(fā)現(xiàn)內(nèi)容等。一般情況下,多種下載stream會使用同一個(gè)連接。QUIC消除了HTTP2隊(duì)頭阻塞問題,如避免發(fā)送信息請求阻塞spotlight短視頻請求。


連接遷移:如果wifi連接斷掉,無法發(fā)送信息,將會大大降低Snap用戶的體驗(yàn),而QUIC解決這個(gè)痛點(diǎn)。


發(fā)現(xiàn)連接丟失:發(fā)生丟失連接時(shí),不斷加載的旋轉(zhuǎn)圖標(biāo)著實(shí)令人感到厭煩(尤其當(dāng)用戶正使用全屏模式觀看內(nèi)容時(shí))。使用了QUIC,當(dāng)丟失連接導(dǎo)致的請求失敗發(fā)生時(shí),我們會立即發(fā)現(xiàn),并再次嘗試連接,同時(shí)向用戶提供友好的界面。 


02

QUIC在Snapchat的應(yīng)用

Snapchat的客戶端網(wǎng)絡(luò)堆棧建立在開源移動網(wǎng)絡(luò)庫Cronet之上。Snap之所以使用Cronet,是因?yàn)樗粌H支持QUIC,還可以通過豐富的指標(biāo)和日志提升可觀察性。使我們能夠更加全面地觀測客戶端和服務(wù)端網(wǎng)絡(luò)性能。

示例展示


我們根據(jù)不同國家和平臺的網(wǎng)絡(luò)性能選擇不同的協(xié)議??傮w來說,我們觀察到啟用 QUIC 將 p90/P99 網(wǎng)絡(luò)延時(shí)提高了 6~20%,網(wǎng)絡(luò)錯(cuò)誤降低了 3%~8%。QUIC對低網(wǎng)絡(luò)連接用戶群還有更多改進(jìn)。這里我們展示了三個(gè)示例。



第一個(gè)示例: 2019 年 10 月,我們在廣告服務(wù)上啟用了 QUIC。我們觀察到, P90/P99 的延時(shí)和錯(cuò)誤率有所改善。




我們觀察到,所有錯(cuò)誤代碼的錯(cuò)誤率都有所改善,包括連接超時(shí)、連接丟失、請求超時(shí)。在按國家和地區(qū)進(jìn)一步細(xì)分時(shí),我們發(fā)現(xiàn),網(wǎng)絡(luò)質(zhì)量相對較差且與我們的服務(wù)地理距離較遠(yuǎn)的國家和地區(qū)的延時(shí)改善程度更高。


第二個(gè)示例:在 QUIC 之上,在客戶端到服務(wù)器路徑上啟用 BBR 擁塞控制也帶來了顯著的延時(shí)改進(jìn)。更大的request payload得到的改進(jìn)更多。



最后一個(gè)示例:在Android上啟用連接遷移后,wifi連接斷掉時(shí)的網(wǎng)絡(luò)請求成功率提升了20%。


03

未來工作



成功集成了QUIC使得我們不斷向前推進(jìn),未來,我們將會在QUIC上付諸更多努力:


提高QUIC的覆蓋率


進(jìn)一步利用QUIC的優(yōu)點(diǎn):包括在 BBR V2 上進(jìn)行試驗(yàn),支持在 iOS 上的連接遷移等。


立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于LiveVideoStack,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多