讓CDN更省流量的Brotli算法詳解
早年,我還是學(xué)生的時(shí)候,時(shí)常會(huì)鼓搗自己的個(gè)人網(wǎng)站,其中最困擾我的問(wèn)題就是源站服務(wù)器易崩潰。作為學(xué)生,一方面我沒(méi)有足夠的錢購(gòu)買高質(zhì)量的服務(wù)器,另一方面一年的流量費(fèi)用算下來(lái)也挺貴的,要花掉我不少的生活費(fèi)。
同樣用戶基數(shù)大的視頻網(wǎng)站每天會(huì)面臨數(shù)據(jù)請(qǐng)求、傳輸?shù)确矫娴膯?wèn)題,通過(guò)正確的方法降低網(wǎng)站流量也可以讓網(wǎng)站節(jié)省成本。
那么到底有沒(méi)有好的辦法可以幫助我們減少網(wǎng)站流量開(kāi)支,降低源站服務(wù)器的壓力?
價(jià)格更低的 CDN
這幾年 CDN 價(jià)格越來(lái)越低,讓我找到了完美的解決方法。一般來(lái)說(shuō),網(wǎng)站開(kāi)啟 CDN 加速之后,會(huì)將網(wǎng)站內(nèi)容緩存到 CDN 節(jié)點(diǎn)服務(wù)器上,這個(gè)時(shí)候如果有訪問(wèn)的話,就會(huì)直接從 CDN 節(jié)點(diǎn)服務(wù)器返回網(wǎng)站數(shù)據(jù),不需要再?gòu)脑凑菊{(diào)取數(shù)據(jù)。
這個(gè)方法解決了源站老是崩潰的問(wèn)題,同時(shí) CDN 流量?jī)r(jià)格比源站流量?jī)r(jià)格低很多,只要設(shè)置得當(dāng),可以比較不錯(cuò)的減少網(wǎng)站在流量上的開(kāi)支。
技術(shù)含量更高的 CDN
除了價(jià)格降低之外,CDN 的技術(shù)含量這幾年也越來(lái)越高,本文就以又拍云 CDN 的 Brotli 壓縮算法為例,講講它是如何做到減少流量消耗的。
Google 認(rèn)為互聯(lián)網(wǎng)用戶的時(shí)間是寶貴,尤其不應(yīng)該浪費(fèi)在無(wú)用的網(wǎng)頁(yè)加載中,因此推出了無(wú)損壓縮算法 Brotli。Brotli 通過(guò)變種的 LZ77 算法、Huffman 編碼以及二階文本建模等方式進(jìn)行數(shù)據(jù)壓縮。
更高的壓縮率
通過(guò)上圖,我們可以看到 Brotli 與常用的壓縮算法 bzip2、gzip、lzma2 對(duì)比,壓縮比上有明顯的優(yōu)勢(shì)。
更快的解壓縮速度
對(duì)于現(xiàn)在的互聯(lián)網(wǎng)來(lái)說(shuō),最重要的性能可能是解壓縮速度。即使在瀏覽器和移動(dòng)設(shè)備等資源有限的情況下,客戶端能夠快速解壓,有更良好的用戶體驗(yàn)是現(xiàn)在所追求的。而在解壓縮速度上,Brotli 依舊表現(xiàn)出色。
圖中我們看到 Brotli 的解壓縮速度與 Gzip 非常相似,但是遠(yuǎn)遠(yuǎn)超出 bzip2 和 lzma2,盡管它們相較于 Gzip 有更好的壓縮比,但是它們解壓縮的速度要慢幾倍,和 Brotli 一比,他們的優(yōu)勢(shì)消失殆盡。
與現(xiàn)在的常用壓縮算法比,Brotli 的優(yōu)勢(shì)盡顯無(wú)疑。與 Gzip 相比在 Web 資源壓縮方面,Brotli的壓縮性能提升了 17%-25%。當(dāng) Brotli 壓縮級(jí)別為1時(shí),壓縮率比 Gzip 壓縮最高等級(jí)為 9 時(shí)還要高。
瀏覽器兼容
Brotli 算法憑借它優(yōu)異的壓縮性能,在行業(yè)內(nèi)迅速普及,到目前為止,除了 IE 和 Opera Mini之外,幾乎所有的主流瀏覽器都已支持 Brotli 算法。
隨著 CDN 技術(shù)的不斷成熟,合理利用 CDN 可以大大降低源站服務(wù)器遇到的并發(fā)壓力,減少源站流量,節(jié)省開(kāi)支。同時(shí)現(xiàn)在 CDN 的防 D 手段也在發(fā)展,我們也不用擔(dān)心因?yàn)?DDoS 攻擊而“破產(chǎn)”(當(dāng)年因?yàn)檫@個(gè)一直不敢用 CDN,哈哈)。
關(guān)于如何使用Brotli壓縮算法,這個(gè)不用操心。又拍云 CDN 默認(rèn)支持 Brotli 壓縮算法,只需要接入 CDN 就可以使用高性能的Web資源壓縮算法了。由于并非所有的瀏覽器都支持 Brotli 算法,所以在 CDN 邊緣節(jié)點(diǎn),又拍云會(huì)同時(shí)提供通過(guò) Brotli 算法壓縮的文件和原始資源文件。當(dāng)客戶端不支持 Brotli 算法時(shí),又拍云會(huì)選擇提供 Gzip 算法來(lái)壓縮原始文件并提供給客戶端。當(dāng)客戶端同時(shí)支持兩種算法時(shí),又拍云 CDN 會(huì)優(yōu)先響應(yīng) br 版本文件。
借助壓縮效率更高的 Brotli 算法,對(duì)比 Gzip 壓縮 CDN 流量再減少 20%,在節(jié)約流量成本的同時(shí),讓用戶有更好的使用體驗(yàn),的確是一個(gè)不錯(cuò)的選擇。