让 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 算法。

△ Brotli 算法支持情况
随着 CDN 技术的不断成熟,合理利用 CDN 可以大大降低源站服务器遇到的并发压力,减少源站流量,节省开支。同时现在 CDN 的防 D 手段也在发展,我们也不用担心因为 DDoS 攻击而“破产”(当年因为这个一直不敢用 CDN,哈哈)。
关于如何使用 Brotli 压缩算法,这个不用操心。又拍云 CDN 默认支持 Brotli 压缩算法,只需要接入 CDN 就可以使用高性能的Web资源压缩算法了。由于并非所有的浏览器都支持 Brotli 算法,所以在 CDN 边缘节点,又拍云会同时提供通过 Brotli 算法压缩的文件和原始资源文件。当客户端不支持 Brotli 算法时,又拍云会选择提供 Gzip 算法来压缩原始文件并提供给客户端。当客户端同时支持两种算法时,又拍云 CDN 会优先响应 br 版本文件。
借助压缩效率更高的 Brotli 算法,对比 Gzip 压缩 CDN 流量再减少 20%,在节约流量成本的同时,让用户有更好的使用体验,的确是一个不错的选择。
推荐阅读:
启用 Brotli 压缩算法,对比 Gzip 压缩 CDN 流量再减少 20%
让 CDN 更省流量的 Brotli 算法详解的更多相关文章
- BM算法 Boyer-Moore高质量实现代码详解与算法详解
Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...
- 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
- 【转】AC算法详解
原文转自:http://blog.csdn.net/joylnwang/article/details/6793192 AC算法是Alfred V.Aho(<编译原理>(龙书)的作者),和 ...
- EM算法详解
EM算法详解 1 极大似然估计 假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么? 图1 学生成 ...
- 【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?
简介 Floyd-Warshall算法(Floyd-Warshall algorithm),是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以 ...
- 安全体系(一)—— DES算法详解
本文主要介绍了DES算法的步骤,包括IP置换.密钥置换.E扩展置换.S盒代替.P盒置换和末置换. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(二)——RSA算 ...
- 第三十一节,目标检测算法之 Faster R-CNN算法详解
Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal network ...
- 第二十九节,目标检测算法之R-CNN算法详解
Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmenta ...
- SILC超像素分割算法详解(附Python代码)
SILC算法详解 一.原理介绍 SLIC算法是simple linear iterative cluster的简称,该算法用来生成超像素(superpixel) 算法步骤: 已知一副图像大小M*N,可 ...
随机推荐
- 对JS 的classList 简单记录
一 对classList整体感觉 浏览器支持参考(http://www.runoob.com/jsref/prop-element-classlist.html) classList 是一个对象 ,返 ...
- 树莓派B+使用入门&RPI库安装&wringPi库安装
最近看看试用一下树莓派进行一些开发操作,于是入手一块Raspberry Pi B+的板子来玩.由于没有显示器,没有备用的键盘和鼠标,所以想到用SSH来控制树莓派,刚开始还很担心已经安装好的操作系统到底 ...
- SQL ServerAlways Encrypted Data
SQL Server 提供了一个加密表上字段的功能, Encrypt Columns , 比如身份证号码,手机号码,银行账户等等敏感信息.
- Android SDK提供的常用控件Widget “常用控件”“Android原生”
Android提供一个标准的视图工具箱来帮助创建简单的UI界面.通过使用这些控件(必要时,可以对这些控件进行修改). 创建一个简单的.xml文件,从预览窗口可以看到Android SDK提供的原生控件 ...
- Android应用程序如何使用Internet资源?
思路:连接Internet资源-->分析XML资源-->使用Download Manager下载文件 Android的Internet连接模型和用于分析Internet数据源的Java技术 ...
- copy与mutableCopy的区别总结
1.不可变类型(不管是集合还是非集合),copy结果,不产生新对象,浅拷贝:不可变类型(不管是集合还是非集合),mutableCopy结果,产生新对象,深拷贝.2.可变类型(不管是集合还是非集合),c ...
- java代码编译与C/C++代码编译的区别
Java编译原理 1.Java编译过程与c/c++编译过程不同 Java编译程序将java源程序编译成jvm可执行代码--java字节码. Java在编译过程中一般会按照以下过程进行: (1)JDK根 ...
- turtle库的学习
Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动, ...
- 使用poi读取Excel文件数据
package com.haiyisoft.iecp.util; import java.io.File;import java.io.FileInputStream;import java.io.F ...
- 微信小程序用户信息解密失败导致的内存泄漏问题。
微信小程序获取用户解密的Session_key 然后对 encryptedData进行解密 偶尔报错 时间长了之后会报内存溢出: java.lang.OutOfMemoryError: GC over ...