早年,我还是学生的时候,时常会鼓捣自己的个人网站,其中最困扰我的问题就是源站服务器易崩溃。作为学生,一方面我没有足够的钱购买高质量的服务器,另一方面一年的流量费用算下来也挺贵的,要花掉我不少的生活费。

同样用户基数大的视频网站每天会面临数据请求、传输等方面的问题,通过正确的方法降低网站流量也可以让网站节省成本。

那么到底有没有好的办法可以帮助我们减少网站流量开支,降低源站服务器的压力?

价格更低的 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%,在节约流量成本的同时,让用户有更好的使用体验,的确是一个不错的选择。

 

推荐阅读:

HTTPS 安全级别检测 免费 SSL 证书领取入口

启用 Brotli 压缩算法,对比 Gzip 压缩 CDN 流量再减少 20%

让 CDN 更省流量的 Brotli 算法详解的更多相关文章

  1. BM算法  Boyer-Moore高质量实现代码详解与算法详解

    Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...

  2. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器

    原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector  ...

  3. 【转】AC算法详解

    原文转自:http://blog.csdn.net/joylnwang/article/details/6793192 AC算法是Alfred V.Aho(<编译原理>(龙书)的作者),和 ...

  4. EM算法详解

    EM算法详解 1 极大似然估计 假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么? 图1 学生成 ...

  5. 【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?

    简介 Floyd-Warshall算法(Floyd-Warshall algorithm),是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以 ...

  6. 安全体系(一)—— DES算法详解

    本文主要介绍了DES算法的步骤,包括IP置换.密钥置换.E扩展置换.S盒代替.P盒置换和末置换. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(二)——RSA算 ...

  7. 第三十一节,目标检测算法之 Faster R-CNN算法详解

    Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal network ...

  8. 第二十九节,目标检测算法之R-CNN算法详解

    Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmenta ...

  9. SILC超像素分割算法详解(附Python代码)

    SILC算法详解 一.原理介绍 SLIC算法是simple linear iterative cluster的简称,该算法用来生成超像素(superpixel) 算法步骤: 已知一副图像大小M*N,可 ...

随机推荐

  1. 彻底卸载MySQL服务

    前言 由于安装某个项目的执行文件,提示要卸载MySQL以便它自身MySQL安装,然后我禁用了MYSQL服务,再把这个文件夹删除后,发现还是提示请卸载MYSQL服务. ----------------- ...

  2. 动态规划——Freedom Trail

    题目:https://leetcode.com/problems/freedom-trail/ 额...不解释大意了,题目我也不想写过程了有点繁琐,直接给出代码: public int findRot ...

  3. 把ssl模块加入到已经编译好的apache中实现HTTPS

    为了使Apache支持https访问,系统需要安有apache.openssl.mod_ssl.so 1.安装openssl: 基本上系统都已经安装了,在/usr/bin/openssl下,直接使用o ...

  4. 我的 FPGA 学习历程(09)—— 时序逻辑入门

    讲到这篇时,组合逻辑就告一段落了,下面是一些总结: 描述组合逻辑时,always 语句中的敏感信号列表中需要列出全部的可能影响输出的变量 描述组合逻辑时,always 语句中的赋值总是使用阻塞赋值符号 ...

  5. android BLE Peripheral 模拟 ibeacon 发出ble 广播

    Android对外模模式(peripheral)的支持: 从Android 5.0+开始才支持. api level >= 21 所以5.0 之前设备,是不能向外发送广播的. Android中心 ...

  6. 解决Idea无法提示代码、不检查语法的方法

    今天打开Idea做项目的时候,java代码图标出现异常(不是以前的C图标),所有java文件都只有两种颜色,百度查了一下,Idea有一个叫power save mode,在file -> Pow ...

  7. 在VB中动态执行VBS代码,可操控窗体控件

    通过执行一段VBS代码来操控窗体内的控件也可以使用AddObject方法添加自己的类,那么在动态VBS代码中也一样可以使用在增加程序扩展性或是有脚本化需求的时候,这个方法还是不错的. Option E ...

  8. 解决fastJson无序问题

    对外提供接口,第三方传过来的参数没问题.可是用fastJson 转换的出现 参数顺序不一致,导致 验签失败 解决fastJosn 转换无序问题 https://github.com/alibaba/f ...

  9. 二、JAVA基础、语法

    第二节:JAVA基础.语法 1.修饰符.变量:    Java中主要有如下几种类型的变量    局部变量                                                 ...

  10. data.table包使用应该注意的一些细节

    fread中nThread 参数的使用   注意默认nThread=getDTthreads(),即使用所有能用的核心,但并不是核心用的越多越好,本人亲自测试的情况下,其实单核具有较强的性能,只有在数 ...