Cloudflare Argo 测试,CDN 加速的黑科技

本网站曾经一直将国外解析到 CloudFront 实现为国外加速,最近看到 Cloudflare 支持了 Argo 这一新功能,于是就把国外的 CDN 从 CloudFront 换到了 Cloudflare 并开启了 Argo 来试一下效果,官方宣称无缓存时能明显降低 TTFB(首字节延迟),有缓存时也能提高缓存命中率。

提升缓存命中率,Argo Tiered Cache

Cloudflare 的节点很多,但是节点太多有时不是一件好事——大多数 CDN 之间的节点是相对独立的。首先要先明白 CDN 的工作原理,CDN 通常不会预先缓存内容,而是在访客访问时充当代理的同时对可缓存的内容缓存。就拿本站来说,本站用的是香港虚拟主机,如果有英国伦敦的访客访问了我的网站,那么由于我的网站是可被缓存的,他就会连接到伦敦的节点并被缓存在这个节点。那么如果是英国曼彻斯特的访客访问了呢?由于 CDN 在曼彻斯特另有节点,访客会直接连接到曼彻斯特节点,然而曼彻斯特上并没有缓存,所以该节点会回源到香港。而显然的是,如果曼彻斯特回源到伦敦,使用伦敦的缓存会更快。

综上,如果能选择性的从其他节点上获取资源,TTFB 会更低,缓存命中率也会相应提高。但是一般的 CDN 不会去这样做,因为节点相互独立,节点之间并不知道对方是否已经缓存。一般的解决方法是节点与源站之间先经过为数不多的几个节点,这几个节点可能只是分布在几个州,比如整个欧洲就只有一个这种节点。这样的话,伦敦的访客访问后,同时也被欧洲的那个节点缓存。这样,当再有欧洲其他地区的访客连接到一个没有缓存的节点时,这些节点会直接提供欧洲的那个节点的缓存。CloudFront 和 KeyCDN 就利用了这样的技术。

Cloudflare 是如何实现的他们官方没有详细说明。然而在实际测试时,并没有观察到缓存率上有明显提升,远比不过 CloudFront 的效果。下图是通过这些节点测试的 TTFB,请求是逐个发起的。

Cloudflare 上可被缓存的内容的首次访问测试,启用了 Argo

CloudFront 对比,比 Cloudflare 要强

降低 TTFB,Argo Smart Routing

通常情况下,节点与源站的连接是直接的,这之间的网络很大程度上取决于主机的网络接入。然而,有了 Argo Smart Routing,Cloudflare 会使用自己的线路。图片来自 Cloudflare.com。

国外请求这个地址(https://guozeyu.com/cgi-bin/trace.php),其中的 via 字段就是 Cloudflare 与本站建立的连接的 IP 地址。通过 GeoIP 服务查询,发现是香港的 IP。Cloudflare 将自己的节点之间都建立了长连接,并在离源站最近的服务器上与源站也提前建立了连接。这样,就能大大降低首次连接所需要的时间。如果回源是 HTTPS 的,那么效果更明显。我的另一个测试地址 https://tlo.xyz/cgi-bin/trace.php 是没有开启这个功能的,用来对比,它的回源与本站建立的 IP 就不是香港的。

使用 Flexible SSL 的 TTFB 对比

没有启用 Argo

启用了 Argo

使用 Full SSL 的 TTFB 对比

没有启用 Argo 并且是 Full SSL

启用了 Argo 并且是 Full SSL

速度的确有一定的提升,但是不是特别明显,而且似乎开启了之后一些节点反而更不稳定——原本都是比较稳定的一个速度,开了这个之后一些节点反而忽快忽慢。看来提速的最佳方法还是半程加密。

总结

我在国内外几家全站 CDN 对比中测试 Google Cloud CDN 时,其极低的 TTFB 令我惊讶,仔细研究后发现节点是真的与主机之间建立长连接,而且会保持很长一段时间。而且 Google Cloud CDN 使用的是 Google 的网络,自认为要比 Cloudflare 的好很多。所以目前服务动态内容最快的应该还属 Google Cloud CDN 了。CloudFront 自带的 Regional Edge Caches 在缓存静态内容和提高缓存命中率上要比 Argo Tiered Cache 好,但是 Argo Smart Routing 在服务于动态的不可缓存的内容上更显出优势。

Argo 并没有想象中的那么好用,而且 $5/mo 的起步价和 $0.10/GB 的流量并不便宜。当然也有可能需要一段时间 Argo 去分析线路延迟才能更好的进行优化。本文预计将在一个月后补充更新。

关于本站的分区解析

本站的解析没有使用 Cloudflare 而是 自建的 DNS,因为我的 Cloudflare 域名是通过 CNAME 接入的。Cloudflare 分配的 IP 在很长时间内都不会变动,所以我直接把其 IP 设置为了海外线路。使用自建的DNS是为了在备案后,为国内分区解析配置 CDN 线路。

PS: 大家应该都知道启用这个功能后并不会提升国内连接 Cloudflare 的速度,如果想要用 Cloudflare 并且希望国内快一点,源站最好就用美国西岸的。

“Cloudflare Argo 测试,CDN 加速的黑科技”的11个回复

  1. CloudFlare有一个与源站服务器建立长连接的黑科技,叫做Railgun,是一个跑在源站服务器上的软件,与CF服务器建立一个长连接,然后访问内容通过TLS加密走这个连接,对于Partner大概是免费的,但是要签协议。
    另外,我一周前申请了个Partner API,然后做了个Web Panel用于修改记录,大概很快会公开出来供大家使用

  2. 如果想要用 Cloudflare 并且希望国内快一点,源站最好就用美国西岸的。

    1、能否讲讲原理?我源站在香港,速度反而会比不上源站在美国西岸?
    2、为何Cloudflare的HKG节点在国内ping普遍有200ms?
    3、CloudFront和Google的CDN是否也有免费版?如是,是否都像Cloudflare那样免费提供https?
    4、Cloudflare的Partnrer账户申请是否有什么特殊要求?

    1. 抱歉我只写了结论没有写原因。首先,前两个问题原因是相同的,很简单,国内连接 Cloudflare (联通和电信)是直接连到的美国西岸的节点,主要是 LAX 和 SJC,具体到了那个服务器可以看 HTTP Header 中的 CF Ray。这个限制我认为可能是运营商为了降低成本。由于直接连接到的是美国西岸节点,如果源站是香港,那么就是:去程先到 Cloudflare 的美国西部,再到香港,再从源站返回到 Cloudflare 的美国西岸,再返回用户。
      CloudFront 和 Google CDN 都没有免费版,都能自己上传证书,其中 CloudFront 有免费的多域名通配符证书。CloudFront 是按量付费,所以访问量不高的话很便宜。另外 Google 的CDN必须是 Google 的服务器才能用,具体看这篇文章
      Cloudflare的Partnrer账户需要是出售云服务,主机的才能有。CNAME 接入没有任何优势,除非单独为国内配置线路则可以提高国内的速度。

    1. 几年前申请了一个 Cloudflare Partner 账号,https://www.cloudflare.com/partners/ ,Partner 可以通过 API 的方式实现 CNAME 接入。就是每次改记录、添加记录都给用 API 来,有些麻烦。

      1. cloudflare partner 必须要添加三个测试站点吗
        我刚申请 他邮件里说 Once you have installed Cloudflare and enabled three test websites, within 24 hours you will receive an email outlining next steps and a Launch Plan. We look forward to getting you up and running as a Certified Partner.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论可能需要审核才能显示,请尽量让自己的回复能够对别人有帮助

当有人回复你时你会收到邮件通知,你所回复的人能够看到你的电子邮件地址。