Railgun是Cloudflare开发的WAN优化技术,Cloudflare商业和企业客户以及Optimized Partner均可使用 。Railgun需要在Web服务器的网络上安装一个名为Railgun Listener的软件。
使用Cloudflare的主要优势之一是,可缓存的内容(例如图像,JavaScript,CSS和HTML)都由Cloudflare缓存并从我们全球的数据中心提供。由于Cloudflare的数据中心遍及全球,因此缓存的内容可以迅速传递到网络冲浪者,无论他们身在何处(并解决了延迟问题)。
但是只有大约66%的内容是可缓存的。其他34%必须从真实来源的Web服务器获得。Railgun通过使用一种方案来解决此问题,该方案能够缓存动态生成或个性化的网页,从而大大减少了使用的带宽并缩短了下载时间。
Railgun是在64位系统上运行的单个守护程序,该守护程序使用替代压缩技术来显着提高WAN性能。
它通过特殊协议代理流量,该协议通常会通过HTTP在Cloudflare和您的原始服务器之间传输。
通常,网站的标记或JSON API响应正文不会将更改频繁地从一个请求更改为下一个请求。Railgun不会在Cloudflare和您的环境之间转移整个请求,而只会将标记的更改从一个请求转移到下一个请求。这样可以减少带宽,传输时间和整体页面加载时间。Railgun将这些差异缓存在内存中,以使页面处理尽可能快。
要求
|
商业和企业用户 |
优化的合作伙伴 |
硬件 |
|
|
软件 |
- 具有至少512MB存储空间的Memcache> = 1.4(建议> 1GB)
|
- 具有至少1GB存储空间的Memcache> = 1.4(建议> 2GB)
|
操作系统 |
- Debian 8、9
- Ubuntu Linux 12.04、14.04、16.04
- 红帽企业版Linux 6、7
- CentOS 6、7
|
网络 |
|
Railgun的工作原理是不可缓存的网页不会很快改变。例如,我捕获了CNN主页HTML一次,然后在5分钟后再次捕获,然后在一个小时后再次捕获。页面大小为92,516,五分钟仍为92,516,一个小时后为93,727。
CNN将此页面上的缓存设置为60秒。一分钟后,必须重新下载整个页面。但是查看页面本身并没有太大变化。实际上,版本之间的更改大约是100k字节中的100s字节。这是五分钟间隔CNN主页之间的小二进制差异之一的屏幕截图。黄色字节已更改,其余字节未更改:

Cloudflare的实验揭示了整个网络上类似的变化值。例如,reddit.com在五分钟内变化约2.15%,在一个小时内变化3.16%。纽约时报首页在五分钟内变化约0.6%,在一个小时内变化3%。英国广播公司新闻在五分钟内变化约0.4%,在一个小时内变化2%。
尽管动态Web不可缓存,但它并没有快速改变。这意味着页面的不同版本之间有时只有很小的变化。Railgun利用这一事实实现了很高的压缩率。这与视频压缩查找逐帧变化的方式非常相似;Railgun在页面上查找从下载到下载的更改。
Railgun由两个组件组成:发送者和监听者。发送器已安装在全球每个Cloudflare数据中心。侦听器是高级客户在其网络上安装的软件组件。
发送方和侦听方建立由TLS保护的永久TCP连接。此TCP连接用于Railgun协议。这是一个全二进制多路复用协议,允许多个HTTP请求在链接上同时异步运行。
对于Web客户端,Railgun系统看起来像是代理服务器,但它不是服务器,而是具有特殊属性的广域链接。这些属性之一是它通过同步页面版本对不可缓存的内容执行压缩。
Railgun链接的每一端都跟踪所请求网页的最新版本。当对Railgun已经看到的页面提出新请求时,仅更改通过链接发送。侦听器组件向真实的原始Web服务器发出不可缓存页面的HTTP请求,与存储的版本进行比较并跨差异发送。
然后,发送方从其缓存和另一端发送的差异中重建页面。
当然,今天的网页上使用了压缩。最常见的技术是gzip页面本身。CNN实际上会执行此操作,并发送23,529字节的压缩数据,该数据在解压缩后将变成92,516字节的页面(因此,该页面被压缩到其原始大小的25.25%)。谷歌已经提出了一种称为SDCH的基于字典的方案,该方案并不复杂。
但是Railgun压缩技术却走得更远。上面页面的版本1和2之间的压缩(每隔五分钟)导致仅发送266字节的差异数据(压缩到原始页面大小的0.29%)。一小时的差异(上述版本2至3)为2885字节(压缩为原始页面大小的3%)。显然,Railgun压缩的性能大大优于gzip。
对于经常访问的页面,增量通常很小,以至于它们只能容纳在一个TCP数据包中,而且由于保持了Railgun的两部分之间的连接处于活动状态,从而消除了TCP连接时间和启动缓慢的问题。