優(yōu)化CDN不用愁,從全鏈路入手就會找到答案

原標題:優(yōu)化CDN不用愁,從全鏈路入手就會找到答案

CDN是一種新型網(wǎng)絡構建方式,目的是提高用戶訪問響應速度和準確率。CDN代表了一種基于質(zhì)量與秩序的網(wǎng)絡服務模式。本專欄將從技術角度探討CDN的應用前景,同時結合實際場景中的問題和解決辦法,希望能夠幫助企業(yè)更好的用好網(wǎng)絡,服務用戶。

今天,我們先介紹CDN優(yōu)化的核心要點和關鍵環(huán)節(jié)。

1、質(zhì)量與規(guī)模均是業(yè)內(nèi)領先

百度智能云CDN自2016年開始對外商業(yè)化,搭上百度智能云發(fā)展的快車道,不斷打磨與改進,CDN的規(guī)模與質(zhì)量都得到了很大提升。目前儲備帶寬50T+,利用率在60%左右,全球可用節(jié)點在600+,擁有國內(nèi)與海外完整的加速解決方案。

用戶非??粗谻DN的質(zhì)量,經(jīng)常會用“PK”的方式從N家中選擇1-2家作為供應商。百度智能云CDN經(jīng)過2017~2018這兩年的不斷自我進化與客戶打磨,目前整體質(zhì)量綜合排名在業(yè)界處于領先位置。

百度智能云CDN架構與優(yōu)勢

當前,百度智能云CDN的主要特點如下:

  • 邊緣CDN節(jié)點支持QUIC、HTTP2.0、TLS1.3等新特性。
  • 節(jié)點內(nèi)部支持私有協(xié)議,主要用于節(jié)點間加速與內(nèi)部回源防劫持。
  • 上傳加速,節(jié)點間使用QUIC、長連接復用等技術打造上傳加速差異。
  • 中心節(jié)點與百度內(nèi)網(wǎng)有高速專線連接,總體利用率不到40%。
  • 與BOS結合,有一套完整的上傳與分發(fā)解決方案。

由于百度智能云的CDN表現(xiàn)出色,不少重量級的企業(yè)已經(jīng)在使用。例如,我們服務的長視頻類客戶主要有愛奇藝、芒果點播等,短視頻類客戶主要有快手、手百Feed、全民視頻、好看視頻等,手機APP下載類客戶有魅族、小米、華為等。

2、從全鏈路入手進行優(yōu)化

如何做到CDN的優(yōu)化?我們從全鏈路分析著手,涉及到客戶端、網(wǎng)絡、節(jié)點和回源整個請求的生命周期。

就拿手機百度APP的Feed小視頻來說,當用戶點擊一個視頻后,一個HTTPS請求會從端上觸發(fā),經(jīng)歷端上APP及播放器再到底層網(wǎng)絡協(xié)議棧發(fā)出,再通過公網(wǎng)途經(jīng)就近CDN網(wǎng)絡,首次未命中回源獲取,同步響應第一個用戶。在CDN上緩存后,便能加速后續(xù)的請求。從這個過程來看,一個請求的生命周期大概經(jīng)過以下階段。

? 客戶端:需要不同調(diào)整策略

端上的數(shù)據(jù)往往是我們優(yōu)化的突破點,因端上APP實現(xiàn)邏輯的差異,不同的實現(xiàn)形式可能需要服務端有不同的對應調(diào)整。HTTPS現(xiàn)在基本是端上的標配,有效的HTTPS Session復用能大大提升加載資源的速度,手機百度APP通過多種Session復用技術,可以做到0-1RTT的時延。

我們團隊與手機百度網(wǎng)絡團隊聯(lián)合優(yōu)化時發(fā)現(xiàn),手機百度端上網(wǎng)絡庫存在以目標IP為粒度的Session復用,雖說這樣能大幅度提升Session復用率,但在目前以SNI為基石的多域名復用CDN加速機制下,會出現(xiàn)握手失敗的情況,最后通過端上網(wǎng)絡庫的打點,我們能及時發(fā)現(xiàn)并解決問題。

另外,我們還結合端上的卡頓分析,發(fā)現(xiàn)4G網(wǎng)絡用戶因受運營端套餐的限制,會出現(xiàn)每月從1號開始,卡頓比或loading率持續(xù)上升,再到次月初恢復的現(xiàn)象。

? 網(wǎng)絡:注意域名解析

在發(fā)請求前,域名解析是一個必不可少的環(huán)節(jié),大部分端會首先用DNS來解析,但國內(nèi)的DNS劫持與污染一直是非常嚴重的問題。我們給用戶建議使用HTTP DNS后有效解決了劫持問題。例如,在某些弱網(wǎng)絡環(huán)境下,手機百度APP端上會自動升級到QUIC協(xié)議,主動改善用戶體驗。

? CDN節(jié)點:分層優(yōu)化

節(jié)點內(nèi)的優(yōu)化一直是我們的重點,優(yōu)良架構的選型與核心模塊的優(yōu)化都有顯著的效果。百度智能云CDN采用典型的分層結構,接入業(yè)務層與Cache存儲層分離,各自分工明確,通過四層BGW加七層Nginx的兩層負載,應對各種故障場景。

CDN節(jié)點上內(nèi)核協(xié)議棧的行為,對性能有很大的影響,如初始窗口、發(fā)包策略、重傳策略等,我們線上內(nèi)核大量嘗試BBR、Boost等較為先進的發(fā)包算法,有效提升傳輸速度與可用性。

另外,協(xié)議棧層面,我們還自研了一套系統(tǒng),能自定義監(jiān)控一條TCP流上所有的形為,這樣就能有效快速的定位到應用層數(shù)據(jù)發(fā)完后,是協(xié)議棧沒有及時處理還是端上網(wǎng)絡不好。

? 回源:用私有協(xié)議應對劫持

回源劫持一直是比較頭疼的問題,如302劫持、DNS劫持等。比較有技術含量的運營商能根據(jù)Host進行阻斷,可能是為了減少跨網(wǎng)流量或主動封堵。此問題可以用HTTPS得到有效解決。但HTTPS就會要求用戶必須提供有效的證書,且存在大量的SSL握手,在節(jié)點內(nèi)部回源,就顯得有點太重。

為此我們開發(fā)了一套私有回源協(xié)議,盡量使問題簡單有效的得到解決。另外,如果使用百度智能云的BOS存儲,還會有額外的優(yōu)化,如高速專線回源、獨享公網(wǎng)帶寬、常態(tài)有40%的允余,足以應對各種突發(fā)。

3、重點優(yōu)化Nginx接入層

為了能有效的衡量七層接入層Nginx的優(yōu)化效果,我們團隊構建了一個能體現(xiàn)Nginx運行狀況的卡頓指標,具體為Nginx每分鐘處理事件cycle時間超過50ms(50ms的選擇是可配置的,主要是考慮優(yōu)化影響較大的場景)的個數(shù)。

一次處理cycle超過50ms意味著這個Nginx worker上的所有請求,都會在這個時間段(50ms內(nèi))得不到及時的處理。就小文件場景來說,就會體現(xiàn)在首包時間長,而我們的優(yōu)化往往就是毫秒級進行。對于Nginx這樣一個高效的異步事件驅(qū)動的模型來說,這有背于高并發(fā)設計原則,我們應該全力降低并消除回調(diào)callback過于占用CPU的情況。通過我們線上的實踐,大體發(fā)現(xiàn)兩類問題。

1、智能壓縮減少CPU消耗:這個問題大家都比較容易理解,壓縮本來是一個CPU密集性任務。為了有效降低CDN的出口帶寬,部分文件類型的壓縮是不可少的。但我們也發(fā)現(xiàn),有部分用戶的文件類型,壓縮比很低,這類基本沒有壓縮的必要,所以我們CDN支持了智能壓縮,自動計算與識別壓縮比,來決定壓縮與否。

2、解決系統(tǒng)調(diào)用卡頓:系統(tǒng)writev調(diào)用卡頓,是我們逐步縮小定位到的,發(fā)現(xiàn)線上機器因內(nèi)存使用不當,產(chǎn)生大量的內(nèi)存碎片,而每次writev調(diào)用時,在申請內(nèi)存不夠時,會時不時的觸發(fā)reclaim或compaction。經(jīng)過與內(nèi)核同學一起定位,通過修改內(nèi)核行為得到有效解決。

經(jīng)過以上調(diào)整之后,收益明顯:可以做到小文件首包降低30ms+,與多家競品對齊或超越;同時,每分鐘事件處理超過50ms的卡頓數(shù)降低90%(從每分鐘40次到每分鐘4次)。

小提示:后續(xù)百度智能云CDN團隊將持續(xù)撰寫相關文章,敬請關注。

極客網(wǎng)企業(yè)會員

免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權或存在不實內(nèi)容時,應及時向本網(wǎng)站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內(nèi)容或斷開相關鏈接。

2019-05-08
優(yōu)化CDN不用愁,從全鏈路入手就會找到答案
我們團隊與手機百度網(wǎng)絡團隊聯(lián)合優(yōu)化時發(fā)現(xiàn),手機百度端上網(wǎng)絡庫存在以目標IP為粒度的Session復用,雖說這樣能大幅度提升Session復用率,但在目前以SNI為基石的多域名復用CDN加速機制下,會出

長按掃碼 閱讀全文