跟 Cloudflare Raigun 类似的功能有人自己实现过么?

2017-10-26 11:14:32 +08:00
 risent

起因

最近自己尝试在基于 OpenResty 做一些简单的 CDN 相关的工作,尝试支持 ESI的时候查看资料看到了 Cloudflare Raigun 的介绍,他的实现方式感觉非常的漂亮,在不用在改变业务应用代码架构的时候达到了类似 ESI 的加速效果。

功能特点

个人理解:就是将不能缓存的动态内容的 HTTP 请求(从源站到 CDN 节点之间的数据发送)从每次单一的全量发送变成两次请求数据之间的增量发送,进而减少源站的流出流量。该功能使用的时候需要在源站的服务器上安装 Cloudflare 提供的称作 Sender 端的软件。

实现原理

其介绍中说到其思路有点类似于视频中 MPEG 相关的编码技术:视频在编码的时候,每一帧对应的图像信息并不是全量进行保存,而是通过某种算法(比如 运动补偿 )计算出相邻帧的差异部分(因为视频相邻帧之间的图像大部分是相同的),只需保存发生变化的增量部分就可以。

将一次 HTTP 请求类比为视频的一帧,那么在传输后面的请求时候通过某种方法能够计算出与前面请求的差异部分,就可以只需传递这部分增量,然后 CDN 节点收到增量后再与其本地缓存的前一次请求做合并处理后返回给用户。这样就能够极大的减少源站跟 CDN 节点之间的流量带宽。

最后

由于自己对于视频相关技术并不了解,以上部分全是自己简单查资料后的理解,如有错误,请大家多多指正。

另外就是想问下有没有人已经做过类似的开源实现?


附 1: 5 年多前 Raigun 发布的时候 HN 上的讨论: Caching the uncacheable: CloudFlare's Railgun

3284 次点击
所在节点    程序员
4 条回复
rhwood
2017-10-26 12:12:10 +08:00
可以看一下 varnish
risent
2017-10-26 13:28:13 +08:00
@rhwood 之前的架构就是 nginx+varnish,后来接触 OpenResty 后感觉 Lua 的可控性和可扩展性比 VCL 强很多,并且 nginx 少不掉,那么就把 varnish 的功能直接继承进 nginx 了,这样只用维护 nginx 就够了。
scriptB0y
2017-10-26 21:48:09 +08:00
@risent
@rhwood

这个和 RailGun 是不是原理不一样? varnish 是缓存资源吧?实际上发送给真实服务器的包并没有压缩,只是请求少了?
risent
2017-10-27 21:58:33 +08:00
@scriptB0y 嗯,不一样,不过 varnish 是内置支持 ESI 的。
从效果上说的话 Cloudflare Railgun 就是通过透明化不需要改动应用层的业务逻辑 自动化的达到了 ESI 的效果。

类似的还有 Google 之前推出过一个 SDCH (Shared Dictionary Compression for HTTP) 的协议,Chrome 从 2008 年起就支持,但是后语需要更改后端业务层的逻辑才能起到压缩效果,一直推广不开来,前不久在 Chrome 59 中被 Google 把该功能移除了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/400877

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX