网站接入Cloudflare之后,访问正常了一段时间。可是最近访问网站,总是奇慢无比,本文是相应的记录。

Cloudflare anycast

Anycast 网络路由能够跨多个数据中心路由传入的连接请求。当请求进入与 Anycast 网络关联的单个 IP 地址时,网络将根据某种优先级排序方法分发数据。通常,通过选择与请求方距离最短的数据中心来优化选择特定数据中心的选择过程,从而缩短延迟。

Anycast本来是为了缩短延迟,但是我的网站为什么访问反而变慢了?

分析

网站正常吗

第一个想法是,是不是最近更新网站,导致网站不正常,变慢了?仔细一想,问题不在这。
因为最近为了提高网站的访问速度,已经将不必要的外站js给去掉了,并且做了hugo image resize,缩小了图片。
并且将一些额外特性也做了延迟加载,比如hugo fancyboxyoutube lazy loadbilibili lazy load,这些都做了延迟或者在用户点击时才响应。
并且网站是纯静态的,不会是这里慢了。

是dns服务器的问题吗?

是不是因为dns服务器解析慢,所以打开慢?
尝试换了国内和国外的几个不同dns,发现打开还是慢。

一个有意思的现象

在尝试的过程中,发现第一次打开总是特别慢。但是打开过一次之后,再次刷新就非常快。

curl -v

使用dig 命令查看dns时,返回的两个ip都是cloudflare anycast的ip。
使用ping命令时,发现其中一个ip可以ping通,一个ip ping不通。
使用curl -v 访问时,发现解析到其中一个ip时,会超时,然后会再使用另一个ip,这样就可以访问成功。
到这里,我们初步判断是其中一个anycast ip无法访问,导致我们的网站访问非常慢。

直接访问源站

我们直接访问源站时,可以在可接受的时间内打开,说明源站访问正常。

proxied dns

proxied dns records将域名解析到anycast的ip,避免直接请求源站。
虽然功能是好的,但是实际导致网站访问非常慢,体验不好。只能将dns设置中的proxied开关暂时关掉,使用dns only,直接访问源站。
网站访问速度终于正常了。