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