关于域名解析和CDN的一点经验

这两天折腾网站访问速度,前两天主要着眼CDN,但卡在无法自动刷新CDN缓存上,所以CDN页面缓存只能设置折中的10分钟,这增加了回源次数,导致冷资源访问较慢。

 

DNS

受博友天一生水启发,似乎域名解析也有折腾的空间,于是买了个阿里最便宜的DNS解析服务,传说中原价48元,阿里拍断大腿后每人限购一个,价格19.9元/年。

阿里云DNS付费版还分三个档次,最便宜的就是上面这个个人版,功能也比较减配,近似于免费版。我看了下,最实用的就是将免费的国内4组DNS节点升级为6个,另免费版没有国外节点,收费版有15个。其他多出的功能个人博客都用不到,基本上就是个装饰。

免费版没有海外节点,是否意味着国外请求要发到大陆解析?如果是这样的话就要多不少解析时间。刚好有多个域名,就用阿里解析平台自带的DNS测试平台测试了下收费和免费的解析速度。

国内解析,两者没有区别,平均都在60ms左右。但是免费的似乎会有较多的个别请求会在600ms以上,收费的也有这种情况,但较少。

国外解析,明显看到收费的要快一些,平均170ms,而免费的平均390ms。和国内一样,免费版在海外也有更多的超长时间,而收费的相对较少。

免费DNS海外测试
收费DNS海外测试

简单说,收费的在解析时间上比较收敛,而免费的比较发散,较长时间的占比较大。如果不关注海外访问者,那么两者基本上没有区别。

 

CDN

如果使用了CDN,那么域名解析就比较复杂了,为此我专门上网查了资料,基本上弄清楚了DNS在有CDN的情况下对解析时间的影响了。先看示意图,及简单说明。

无CDN时的浏览器请求流程

 

①浏览器向本地 DNS 服务器请求对域名的解析;

②如果本地 DNS 服务器有域名的解析结果,那么直接响应用户请求,返回该域名对应的 IP 地址;

如果本地 DNS 服务器没有域名的解析结果,那么则会递归地向 DNS 系统请求解析,随后将该结果返回给用户。这一点在CDN DNS解析中也一样。

③浏览器得到域名解析结果,即服务器 IP 地址后,向服务器请求内容;

④服务器将用户请求内容返回给浏览器;

有CDN时的浏览器请求流程

①浏览器向本地 DNS 服务器请求对域名的解析;

②DNS服务器返回CDN的NAS服务器地址;

③浏览器向CDN的NAS服务器请求内容分发服务器IP;

④⑤CDN的NAS服务器查找就近的文件分发服务器,并将其IP存储在CDN NAS服务器;

⑥CDN的NAS服务器向浏览器返回文件分发服务器IP;

⑦浏览器向文件分发服务器请求内容(如分发服务器上无内容则回源,回源等于多一次解析);

⑧文件分发服务器返回内容给浏览器;

可以看出,有CDN后3-6步骤都是多出的,如果CDN上没有缓存,那么第7步还要回源,也是多出来的,由此可见,如果服务器足够强大,带宽足够高,响应足够快,那么不用CDN会更快。但个人博客服务器都接近免费送的,所以强不到哪里去,而CDN无论带宽还是稳定性上都要比垃圾服务器强很多,这也是使用CDN的主要理由。

 

结论

1、仅大陆使用,免费DNS和收费的无区别;

2、域名的DNS只负责用户浏览器到域名解析出你服务器IP,或你使用的CDN域名这段,到了CDN域名后就是它负责了,你的DNS就无能为力了。从这个角度看,如果使用了CDN,那么收费DNS的作用其实更有限,影响的主要在CDN端。

3、大陆使用,如果资源能够静态,没有多少回源,那么使用CDN后会更快,收费DNS作用聊胜于无;

4、海外收费DNS速度明显快,如果同时使用全球节点的CDN,那么静态资源在全球访问都会很快。我想纯静态博客是不是可以用这种方法加速全球访问?但如果网站没有流量,冷资源会被CDN自动释放,即使你把过期时间写1年也不管用。

5、只想折腾,DNS真没有多少折腾的空间,不如把力气花在CDN上。

6、对于个人博客,我觉得加速的优先顺序如下:

精简页面元素及大小>静态化>服务器配置>CDN>NAS及其他

 

阿里云的收费DNS和免费DNS区别点击这个链接去查看,其他云服务商的我估计差不多,没有对比过。

[免费版和付费版DNS差别]

25 条评论

  1. 看见这些术语我就头疼啊,不想折腾了

    1. 水拍石

      不想折腾就别折腾了,博观最关键的还是得写,折腾是次要的。

  2. 国内的DNS其实很坑的,我现在不到万不得已都尽量少用国内DNS!

    1. 水拍石

      我还没有发现坑在哪里,一直很稳定,而且解析速度也不错,当然我也没有用过国外的DNS,所以没有对比。

  3. 国外访问慢就慢白,毕竟我方问他们也不快。

    1. 水拍石

      对等伤害,这个想法不错。

  4. 我的一直使用cloudflare套装了,省心。

    1. 水拍石

      我是按耐不住的想折腾,要不用国内云套装也很省心。博客还是得专注内容,折腾太耗时间。

  5. 那么,到底为什么这么快

    1. 水拍石

      使用了W3 Total cache静态化插件和阿里云CDN,两个都很重要。

  6. 可以尝试一个网站多个域名,一个主域名,图片静态资源用二级域名。有很多好处,不细说了。
    P.S.你的缓存设置应该有点问题,打开留言时,留言信息里保存的有其他网友的昵称,邮箱网址信息。

    1. 水拍石

      我的图片和其他附件已经分离了,JS和CSS没有分离,看网上说这样分离了等于重定向一次,也需要时间,还有安全问题,所以我就没有做。缓存方案这两天没有改,就是来回折腾缓存和去掉缓存对比,估计是那个环节缓存的数据出错了,我今天清理下缓存,看下留言信息会不会正常。

      1. 用二级域名静态资源后,在head头,用dns-prefetch,甚至preconnect标签,可以与主域名同步加载。浏览器一般都能支持多任务处理的。

        1. 水拍石

          谢谢解惑,我向人工智能再好好学习下怎么操作。将CSS和JS分离出来后,不影响CDN回源吧,因为分离出来的二级域名仅相当于转发,它下面是没有对应文件的。按道理只要浏览器能访问,CDN就能回源,但还是对这个逻辑有点不肯定。

          1. css,js这些静态资源是真的分离,不是虚拟分离。新建一个站点(对象云存储之类的也行),用来专门保存静态资源。至于要加cdn什么的,正常操作即可。

            1. 水拍石

              谢谢,我大概明白了。

  7. 如果网站静态资源较多,带宽又不够高,一次性加载会造成网络拥堵,用上cdn后会好很多。

    1. 水拍石

      是的,静态资源多CDN就是神器。

  8. 从源头开始优化。

    1. 水拍石

      听你的,先从模板开始干起。

  9. 我感觉你的博客已经足够快了,速度跟静态也没啥区别啊。

    1. 水拍石

      和静态还是没法比,静态是努力的方向。我今天想到一个主意,用AI写一个插件,在wordpress后台手动填url的方式清除缓存,我以为这样很简单,结果捣鼓了一天还没有弄好。

      1. 别人访问你的站点我不知道,反正我关了缓存,开启无痕模式来测试你的站点跟我的站点速度差不多的,也就几毫秒之间的差距。
        在我眼里这差距等于没区别!
        不过呢,你有时间,也有精力的话,研究一下,折腾一下也是好的,毕竟知识是一点点积累的。我现在 PHP 是忘得七七八八了,这个语言也是牛,这么多年过去了,还是非常能打。

        1. 水拍石

          你测试的应该是CDN有缓存的,如果你找个CDN没有缓存的资源就比较慢,因为CDN要回源。我现在就是想解决WP后台能刷新CDN的问题,这样就可以把页面CDN缓存设成1个月,或者更久,这样就不会经常回源了。

        2. 水拍石

          告诉你一个好消息,刚才我测试成功了,现在可以在后台手动刷新阿里CDN。我大概知道昨天那个自动刷新代码可能哪里出问题了,后面再人肉测试,看能不能搞好自动的。