这两天为了解决网站TTFB过高的问题,最后追踪到是腾讯CDN导致的,详情请看:腾讯CDN业务变更导致多次请求TTFB变长。让我对目前的CDN有了更深刻的认识,简单谈谈我对CDN的理解。
首先CDN最重要的属性就是能缓存文件到各个CDN节点,就是经常说到的内容分发。但经过多年的发展,很多大厂的CDN功能越来越多,比如腾讯云的CDN、ECDN、SCDN。阿里云倒是没怎么了解,很多功能都被细分了,但内容分发的能力却是不是改变的。
然后就是隐藏源站IP的能力,这个功能非常重要,它能让你在重要时刻免受损失。有句话说得好,我可以不用,但你必须要有。然而很多站长将CDN当做静态资源加速来使用,让源站暴露在公网中,这是非常不好的。就比如前面我遇到的问题,解决方案并非一定要找腾讯那边给改规则。我也可以单独用过二级域名来存放静态文件,然后对二级域名使用CDN加速,但这样我的非静态资源岂不是裸奔在公网上了?又有人出主意,可以再加一个CDN嘛,一个网站2个CDN???真是个天才。
当然隐藏源站IP就意味着需要CDN节点回源,TTFB就会增加。
- 不使用CDN的时候,用户——源站服务器(TTFB=用户网络延时+服务器处理时间+用户本地DNS解析时间+TCP链接时间+https加密时间)
- 使用CDN回源的时候,用户——CDN节点——源站服务器(TTFB=用户网络延时+服务器处理时间+用户本地DNS解析时间+TCP链接时间+https加密时间+CDN节点网络延时+节点处理时间+节点DNS解析时间+TCP链接时间+https加密时间)
从上面的流程不难看出使用CDN的情况下,TTFB比直接访问源站服务器耗时更长,但是为什么还要加CDN呢?
原因是CDN的节点响应延时短,源站服务器位置固定,全国总有些地方访问延时大,据我测试,杭州阿里云的服务器全国测ping延时中,最大可达300ms。也就是说不加CDN有的地方访问的TTFB时间=300ms+服务器处理时间+……而加上CDN后,最长延时仅40ms,平均20-30ms。在某些地方即使CDN多了一步回源时间,但CDN响应仍然比直接请求源站速度快。
另外,使用CDN时注意区分是全站加速还是静态文件加速。
腾讯云对CDN业务进行了调整,估计其他大厂也不远了,诸位站长要注意了。至于我为什么不换一家CDN,因为我的主题对腾讯CDN进行了特殊优化,不想改代码,而且我买的流量包不用会过期,浪费可耻!
对于wordpress来说最佳的CDN使用方式应该是像腾讯那些活动页一样,使用完全静态的前端,用户数据如cookie等通过JS来实现,,如此就能将所有的文件都保存到CDN上,实现最快速度的响应。但是这样成本太大,改造一个主题不是那么容易的事。所以有人退而求其次,去掉网站的用户功能,变成一个纯博客,也能将其完全静态化,存到CDN中,如我爱水煮鱼等。
又或者能不能通过请求头判断用户是否登录,没登录就执行CDN策略,登录就回源,理论上来说是能实现的。
评论 (2)