Snapchat QUIC實踐:提高性能,改善用戶體驗

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

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


現(xiàn)狀

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

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



老架構(gòu)



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


QUIC優(yōu)勢



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



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



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



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



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



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



連接丟失檢測: QUIC可以快速檢測連接丟失,避免長時間請求被掛起。



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



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



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



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



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



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



效果



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



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



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


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



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


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



總結(jié)



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



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