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