Snapchat QUIC實(shí)踐:提高性能,改善用戶體驗(yàn)

來(lái)源: 百家號(hào)
作者:蟲(chóng)蟲(chóng)搜奇
時(shí)間:2021-06-28
17185
熟悉網(wǎng)絡(luò)的小伙伴,應(yīng)該都知道下一代的應(yīng)用層網(wǎng)絡(luò)傳輸協(xié)HTTP3將有重大轉(zhuǎn)變底層網(wǎng)絡(luò)層的傳輸協(xié)議將會(huì)由目前的TCP變成UDP,并基于谷歌開(kāi)源的QUIC協(xié)議為中間層。我們都知道UDB協(xié)議似乎無(wú)序不可靠的協(xié)議,但是其傳輸高效,可以并行傳輸可以極大提高傳輸性能,那么在HTTP3下傳輸?shù)目煽啃跃鸵蠶UIC來(lái)保證。QUIC也從最初的實(shí)驗(yàn),到實(shí)際使用,逐漸成了一個(gè)眾所矚目的協(xié)議,谷歌,臉書(shū),亞馬遜,Cloudflare等都有在線上嘗試和使用。本文我們就來(lái)學(xué)習(xí)一下Snapchat的QUIC實(shí)踐。

熟悉網(wǎng)絡(luò)的小伙伴,應(yīng)該都知道下一代的應(yīng)用層網(wǎng)絡(luò)傳輸協(xié)HTTP3將有重大轉(zhuǎn)變底層網(wǎng)絡(luò)層的傳輸協(xié)議將會(huì)由目前的TCP變成UDP,并基于谷歌開(kāi)源的QUIC協(xié)議為中間層。我們都知道UDB協(xié)議似乎無(wú)序不可靠的協(xié)議,但是其傳輸高效,可以并行傳輸可以極大提高傳輸性能,那么在HTTP3下傳輸?shù)目煽啃跃鸵蠶UIC來(lái)保證。QUIC也從最初的實(shí)驗(yàn),到實(shí)際使用,逐漸成了一個(gè)眾所矚目的協(xié)議,谷歌,臉書(shū),亞馬遜,Cloudflare等都有在線上嘗試和使用。本文我們就來(lái)學(xué)習(xí)一下Snapchat的QUIC實(shí)踐。


現(xiàn)狀

Snapchat(色拉布)是由Stanford兩位學(xué)生開(kāi)發(fā)“閱后即焚”照片分享應(yīng)用站點(diǎn)。使用Snapchat用戶可以拍照、錄制視頻、增加文字描述和圖片,并可以通過(guò)網(wǎng)絡(luò)分享給自己好友和粉絲。在其中服務(wù)性能,尤其是網(wǎng)絡(luò)性能是關(guān)鍵,在分享東西時(shí)如果延遲就會(huì)有很大影響。

根據(jù)他們的分析:在Snapchat 的服務(wù)流程中UI渲染和數(shù)據(jù)磁盤(pán)持久化寫(xiě)入都可以在幾毫秒內(nèi)實(shí)現(xiàn),而其中瓶頸在于網(wǎng)絡(luò)上的延遲,可能需要幾秒鐘,而且錯(cuò)誤率和對(duì)硬件設(shè)備限制都很高。為了減少網(wǎng)絡(luò)延遲和錯(cuò)誤,在通過(guò)使用減少請(qǐng)求包和響應(yīng)包,減少不必要的同步,利用全球內(nèi)容分發(fā)CDN廠商加速等常規(guī)的做法。當(dāng)然他們也使用了新的傳輸技術(shù),下一代高速UDP Internet網(wǎng)絡(luò)協(xié)議QUIC 。



老架構(gòu)



Snapchatter使用QUIC之前的網(wǎng)絡(luò)棧。以發(fā)送Snap為例,在應(yīng)用層,Snap媒體通過(guò)入HTTP2請(qǐng)求傳輸中。使用TLS 在安全層 來(lái)保證連接的安全,利用TCP將請(qǐng)求拆分成chunk上傳Snap到服務(wù)器。然而,TCP+TLS+HTTP2 堆棧對(duì)于移動(dòng)網(wǎng)絡(luò)環(huán)境來(lái)說(shuō)并不是最理想的。 例如,如果 Snapchatter 在WiFi和 WAN之間切換,TCP 請(qǐng)求將失敗。對(duì)于與朋友聊天的用戶,由于連接斷開(kāi)而無(wú)法發(fā)送消息會(huì)導(dǎo)致體驗(yàn)下降。


QUIC優(yōu)勢(shì)



QUIC是一種互聯(lián)網(wǎng)傳輸協(xié)議,由谷歌的工程師開(kāi)發(fā)。QUIC 是HTTP3的基礎(chǔ),底層基于UDP,用來(lái)取代HTTP2的TCP+TLS+。 QUIC 解決了許多傳輸層和應(yīng)用層問(wèn)題,同時(shí)幾乎不需要應(yīng)用程序開(kāi)發(fā)人員進(jìn)行更改。如上圖所示,QUIC沒(méi)有改變網(wǎng)絡(luò)層網(wǎng)絡(luò)協(xié)議,也無(wú)需更改高層的HTTP協(xié)議。



與HTTP2的TCP+TLS+協(xié)議棧相比,QUIC在以下幾個(gè)方面做了改進(jìn):



更快的連接建立:QUIC 握手支持零往返于,在發(fā)送有效載荷之減少TCP+TLS 的1-3 次往返交互 。



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



無(wú)隊(duì)頭阻塞的多路復(fù)用:對(duì)于HTTP2連接,當(dāng)TCP 數(shù)據(jù)包丟失時(shí),該連接上的任何流都無(wú)法前進(jìn),直到數(shù)據(jù)包被遠(yuǎn)端重新傳輸和接收。這會(huì)導(dǎo)致延遲增加,并可能降低移動(dòng)網(wǎng)絡(luò)連接上的用戶體驗(yàn)。 QUIC 消除了在同一連接上復(fù)用的其他流的這種停滯。



跨IP地址的連接遷移: 如果IP更改,TCP請(qǐng)求會(huì)失敗。 而QUIC連接由QUIC 協(xié)議層隨機(jī)生成的64位標(biāo)識(shí)符識(shí)別,因此使用QUIC的客戶端可以繼續(xù)進(jìn)行中的請(qǐng)求,在IP地址更改時(shí)不會(huì)中斷,從而實(shí)現(xiàn)不受干擾的用戶體驗(yàn)。



連接丟失檢測(cè): QUIC可以快速檢測(cè)連接丟失,避免長(zhǎng)時(shí)間請(qǐng)求被掛起。



QUIC的這些優(yōu)勢(shì),非常適合有解決Snapchat的問(wèn)題,極大地提高了其用戶體驗(yàn)。



更快的連接建立:在采用QUIC之前,p90 連接建立需要長(zhǎng)達(dá)300毫秒。這種連接設(shè)置延遲轉(zhuǎn)化為用戶等待延遲,并阻止用戶接收快照和查看信息。QUIC更快的連接直接減少了用戶等待延遲并改善了用戶體驗(yàn)。



改進(jìn)的堵塞控制:Snapchat上傳的Snap媒體大小可以能會(huì)達(dá)到10MB以上。更好的擁塞控制算法可提高吞吐量、降低延遲和錯(cuò)誤率,尤其是對(duì)于大型媒體。



多路復(fù)用,無(wú)隊(duì)頭阻塞: Snapchat具有豐富的短內(nèi)容用例,包括Snaps、Stories、Discover內(nèi)容等。通常有多個(gè)下載流使用同一連接。 QUIC消除了HTTP2頭阻塞問(wèn)題,例如避免發(fā)送消息請(qǐng)求阻塞聚光燈請(qǐng)求。



跨 P地址的連接遷移:與朋友一起時(shí),由于wifi連接中斷而無(wú)法發(fā)送消息可能會(huì)導(dǎo)致體驗(yàn)下降。連接遷移解決了這個(gè)痛點(diǎn)。



檢測(cè)連接丟失: 由于連接丟失而導(dǎo)致的長(zhǎng)時(shí)間加載微調(diào)器令人不安,尤其是當(dāng) Snapchatter 處于全屏模式欣賞內(nèi)容時(shí)。使用 QUIC,當(dāng)請(qǐng)求因連接丟失而失敗時(shí),我們可以檢測(cè)并重試,同時(shí)提供用戶友好的UI。



效果



Snapchat 的客戶端網(wǎng)絡(luò)堆棧建立在開(kāi)源移動(dòng)網(wǎng)絡(luò)庫(kù)Cronet之上。Snap利用Cronet實(shí)現(xiàn)QUIC,還通過(guò)豐富的指標(biāo)和日志提高了服務(wù)可觀察性,構(gòu)建了客戶端和服務(wù)器網(wǎng)絡(luò)性能的統(tǒng)一視圖。



根據(jù)Snapchat不同地區(qū)不同協(xié)議對(duì)比??傮w上來(lái)說(shuō),啟用QUIC將 p90/P99 網(wǎng)絡(luò)延遲提高了6-20%,網(wǎng)絡(luò)錯(cuò)誤降低了3%-8%。對(duì)低網(wǎng)絡(luò)連接用戶群還有更多改進(jìn)。



Snapchat于2019年10月廣告服務(wù)上啟用了QUIC??梢杂^察到 P90/P99 的延遲和錯(cuò)誤率大有改善。


如上面所示,所有錯(cuò)誤代碼的錯(cuò)誤率都有所改善,包括連接超時(shí)、連接丟失、請(qǐng)求超時(shí)。在按國(guó)家和地區(qū)對(duì)延遲改進(jìn)進(jìn)行的進(jìn)一步細(xì)分中,可以觀察到網(wǎng)絡(luò)質(zhì)量相對(duì)較差且與服務(wù)的地理距離較遠(yuǎn)的國(guó)家和地區(qū)的延遲改進(jìn)更高。



在第二個(gè)示例中,在QUIC的基礎(chǔ)上,在客戶端到服務(wù)器路徑上啟用BBR擁塞控制也帶來(lái)了顯著的延遲改進(jìn)。更大的請(qǐng)求有效負(fù)載還有更多改進(jìn)。


在最后一個(gè)示例中,通過(guò)在安卓啟用連接遷移,丟失wifi連接時(shí)的網(wǎng)絡(luò)請(qǐng)求成功率提高了20%。



總結(jié)



Snapchat的QUIC實(shí)踐嘗試取得了很好的效果,通過(guò)使用新技術(shù),解決了服務(wù)上的痛點(diǎn),提高性能,極大提高了用戶的使用體驗(yàn)。通過(guò)小協(xié)議解決大問(wèn)題,這樣的案例,可以直接拿來(lái)使用,或者用來(lái)作為調(diào)研報(bào)告說(shuō)服領(lǐng)導(dǎo)進(jìn)行架構(gòu)完善。



立即登錄,閱讀全文
版權(quán)說(shuō)明:
本文內(nèi)容來(lái)自于百家號(hào),本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開(kāi)掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家