國內(nèi)首家,快手上線千萬級QPS QUIC集群
近日,快手自研高性能服務(wù)器kQUIC已全面上線,集群峰值QPS突破千萬。kQUIC是快手結(jié)合自身業(yè)務(wù)特點(diǎn),自研打造的支持QUIC/HTTP/HTTPS多協(xié)議同層接入的高性能服務(wù)器,在短視頻場景下針對行業(yè)痛點(diǎn)做了針對性優(yōu)化。
kQUIC是快手結(jié)合自身業(yè)務(wù)特點(diǎn),自研打造的支持QUIC/HTTP/HTTPS多協(xié)議同層接入的高性能服務(wù)器,近日已經(jīng)全量部署上線,峰值QPS突破千萬,由此成為國內(nèi)優(yōu)先將QUIC應(yīng)用于全量業(yè)務(wù)并取得穩(wěn)定收益的互聯(lián)網(wǎng)企業(yè)。據(jù)悉,kQUIC自19年上半年開始研發(fā),年底灰度上線,20年6月峰值QPS突破千萬,歷時一年有余。kQUIC針對性地對數(shù)據(jù)壓縮、網(wǎng)絡(luò)傳輸擁塞控制等進(jìn)行了優(yōu)化,傳輸耗時平均降低10%以上,服務(wù)端處理性能提升了50%。
新一代互聯(lián)網(wǎng)傳輸協(xié)議QUIC(Quick UDP Internet Connections)自Google制定發(fā)布后受到眾多互聯(lián)網(wǎng)大廠的關(guān)注和使用,QUIC是基于UDP的互聯(lián)網(wǎng)傳輸協(xié)議,下一代HTTP/3協(xié)議標(biāo)準(zhǔn)也是從QUIC演進(jìn)而來。
相比HTTP(s) 有幾大優(yōu)勢:首先,QUIC在應(yīng)用層實現(xiàn)了基于UDP的可靠傳輸,能夠在使用多路復(fù)用機(jī)制的同時避免TCP的隊首阻塞問題;其次,QUIC改進(jìn)了握手機(jī)制,大部分場景下可以0-RTT建立安全鏈接進(jìn)行數(shù)據(jù)加密發(fā)送;QUIC還同時設(shè)計了連接遷移的新特性,可以保證在用戶的網(wǎng)絡(luò)地址發(fā)生變化時,比如WIFI和4G切換,業(yè)務(wù)請求依然能夠被繼續(xù)處理,不需要重新發(fā)起請求;此外,QUIC的傳輸控制機(jī)制是在應(yīng)用層處理的,相比TCP在內(nèi)核中處理的方式更加靈活、更方便貼近業(yè)務(wù)場景做自定義優(yōu)化,比如可以應(yīng)用更先進(jìn)的算法進(jìn)行雙端加速。
基于QUIC協(xié)議的突出優(yōu)勢,國內(nèi)外企業(yè)紛紛試水相關(guān)研究,很多同行貢獻(xiàn)了多種開源解決方案,但都不能完全滿足快手短視頻+直播業(yè)務(wù)的諸多特殊需求。因此,我們優(yōu)化了用戶體驗,對QUIC協(xié)議棧進(jìn)行了大量適配改造,首先采用了多項創(chuàng)新自研技術(shù),成為了國內(nèi)大規(guī)模全量使用QUIC協(xié)議的先行者。
自研內(nèi)核、算法、網(wǎng)絡(luò)庫和服務(wù)端架構(gòu)助力QUIC在快手實踐落地
下圖為服務(wù)端方案整體架構(gòu),從Nginx內(nèi)核集成QUIC協(xié)議棧,實現(xiàn)多協(xié)議同層接入,到Linux內(nèi)核優(yōu)化UDP報文管理,實現(xiàn)性能提升。下面詳細(xì)描述整個項目的主要優(yōu)化思路:
自研升級Nginx內(nèi)核,支持多協(xié)議接入:目前,業(yè)界普遍大規(guī)模使用了Nginx作為7層的接入服務(wù)器,但Nginx尚不支持QUIC協(xié)議??焓肿匝猩塏ginx內(nèi)核,在Nginx內(nèi)核里嵌入了QUIC協(xié)議棧,完成了Nginx和QUIC的有機(jī)融合,不管是HTTP/HTTPS還是QUIC,都能使用Nginx原生的所有處理邏輯,保留全部業(yè)務(wù)邏輯處理功能的同時可以靈活升級Nginx和chromium版本,并進(jìn)行了一系列的針對性優(yōu)化,性能提升了50%。
無損的配置熱更新:Nginx的配置熱更新機(jī)制不能支持udp業(yè)務(wù)的配置無損更新,為此調(diào)研了改造應(yīng)用層和改造內(nèi)核兩種實現(xiàn)路徑,最終實現(xiàn)了基于內(nèi)核session映射表的配置無損熱更新機(jī)制。相比在應(yīng)用層改造Nginx的方案而言,既不需要改造Nginx的udp收發(fā)機(jī)制,又充分保留了在udp socket上使用sendmmsg和gso的能力,可以減少發(fā)送udp報文的開銷,提升性能。
自研全新網(wǎng)絡(luò)擁塞控制算法:網(wǎng)絡(luò)擁塞控制算法直接影響著網(wǎng)絡(luò)傳輸?shù)男阅?,和用戶請求的成功率、響?yīng)時間等有非常大的關(guān)系。默認(rèn)采用的cubic、bbr等算法,在快手的大規(guī)模用戶與復(fù)雜的網(wǎng)絡(luò)環(huán)境面前,存在很多問題??焓衷O(shè)計了一套全新的擁塞控制算法IA2C,替換默認(rèn)算法,在弱網(wǎng)環(huán)境下,優(yōu)勢明顯。
統(tǒng)一的客戶端網(wǎng)絡(luò)庫:對QUIC協(xié)議的支持是需要客戶端和服務(wù)端統(tǒng)一設(shè)計的,很多優(yōu)化也需要雙端配合,快手客戶端網(wǎng)絡(luò)庫的設(shè)計也采用了新的辦法。區(qū)別于一般APP使用開源網(wǎng)絡(luò)庫OKHTTP和AFNetwork,無法支持跨平臺的做法,快手網(wǎng)絡(luò)庫在設(shè)計之初就把跨平臺作為一個重要的目標(biāo),完全采用C++編寫,不僅為快手主站的雙端提供統(tǒng)一的網(wǎng)絡(luò)優(yōu)化解決方案,還通過中臺輸出統(tǒng)一了各個新業(yè)務(wù)的網(wǎng)絡(luò)接入層,為快手系產(chǎn)品持續(xù)全面的網(wǎng)絡(luò)優(yōu)化提供了有力保障。
接入層統(tǒng)一單層架構(gòu)和穩(wěn)定保障:快手最早采用了QUIC代理和應(yīng)用網(wǎng)關(guān)分離的多層架構(gòu),存在運(yùn)維成本、資源成本以及穩(wěn)定性成本增加的問題,為此我們對架構(gòu)做了大幅簡化,采用QUIC/HTTP/HTTPS同層接入方案,同時特別制定了從壓測到實驗、從線上小流量灰度再到線上逐步全量加容災(zāi)集群建設(shè)的方案。在降低各項成本的同時,充分保證了系統(tǒng)穩(wěn)定性,實現(xiàn)了線上用戶千萬量級請求的穩(wěn)定接入。
數(shù)據(jù)驅(qū)動的迭代放量策略:快手的相關(guān)服務(wù)上線放量需要有嚴(yán)格的數(shù)據(jù)指標(biāo)衡量,為此我們建設(shè)了完善的服務(wù)端、客戶端性能指標(biāo)體系和監(jiān)控看板,設(shè)計了科學(xué)的A/B測試方案,配合專業(yè)的實驗室測試方法,可以科學(xué)的論證架構(gòu)改進(jìn)和算法收益,制定放量策略,支持項目快速的迭代優(yōu)化和穩(wěn)健上線。在整個大規(guī)模上線過程中,沒有出現(xiàn)一次影響用戶的事故。
快手kQUIC服務(wù)端技術(shù)負(fù)責(zé)人沈坤表示,kQUIC是快手在探索先進(jìn)的標(biāo)準(zhǔn)協(xié)議并進(jìn)行大規(guī)模優(yōu)化過程中取得的重要成果,目前已經(jīng)取得了良好的業(yè)務(wù)收益,客戶端實驗反饋顯示,QoE和QoS指標(biāo)都取得了顯著收益,未來在適當(dāng)時機(jī)將對行業(yè)開源,為行業(yè)提供豐富的應(yīng)用實踐經(jīng)驗參考,支持QUIC協(xié)議在全球的推廣和優(yōu)化。