阿里云 CDN 相关测试
Ali-Swift-Global-Savetime : e.g. 1598941922
X-Cache (阿里云CDN缓存命中): e.g. MISS TCP_MISS dirn:-2:-2
X-Swift-SaveTime (在CDN上缓存的时间): e.g. Tue, 01 Sep 2020 06:32:02 GMT
X-Swift-CacheTime (CDN默认缓存时间, 以秒为单位, 过了就要回源): e.g. 10
Age (在CDN上已经缓存了的时间): e.g. 85
修改缓存过期时间
600秒 = 10分钟
服务器新建文件,CDN如何如何处理
同网段第一个客户端(Chrome)第一次访问
同网段第一个客户端(Chrome)第二次访问
同网段第一个客户端(Chrome)第三次访问
同网段第一个客户端(Chrome)第四次访问
切换IP访问服务器同一资源
结论: 哪个ip访问哪个CDN节点是阿里云CDN决定的. CDN节点上没有缓存就会去请求源服务器, CDN节点上有缓存就直接返回缓存
删除服务器上的某个文件, 但是这个文件在一部分CDN上有缓存(缓存时间为一年, 没有过期), 切换不同ip访问
测试1,有多个CDN缓存的情况,源文件删除, 切换不同ip能访问, 相同的ip能访问
测试2, 只有一个CDN缓存的情况下, 源文件删除, 切换不同ip有的能访问, 大部分都不能访问
结论: 推测,缓存不是全 CDN节点覆盖的情况下, 删除源服务器上的文件, 还是会导致某些IP访问到没有缓存的CDN节点,因为回源而访问不到源服务器上的文件
CDN刷新功能测试(刷新能刷目录和URL)
新建文件CDN预热功能测试(只能预热URL)
CDN节点缓存策略如下:
1.客户端向CDN节点发起连接请求,当L1节点有缓存资源时,会命中该资源,直接将数据返回给客户端。当L1节点无缓存资源时,会向L2节点请求对应资源,如果L2节点有缓存资源,则将资源同步到L1节点,并返回给用户;如果L2节点无缓存资源,则直接回客户源站获取资源,并按照配置的缓存策略进行缓存。
2.为了方便理解,再举一个简单例子,假设有杭州移动节点L1-hz和宁波移动节点L1-nb两个L1节点,这两个L1节点都回源到同一个L2这个节点,源站在北京。这几个CDN节点初始的时候都没有用户的缓存资源。当ABC三个用户依次请求同一个图片的时候,过程如下:
- 杭州移动用户A被CDN调度到杭州移动L1-hz节点,L1-hz由于没有缓存,则回源到L2,L2由于也没有缓存,则回源到北京源站,请求到数据以后再返回给L1-hz,L1再返回给用户A。
- 用户A请求完以后,L1-hz和L2节点都有了缓存资源。此时杭州移动用户B也开始访问这个图片,用户B也被分配到了L1-hz节点,由于L1-hz已经有这个图片的缓存了,因此不需要再去回源了,而是直接返回缓存给用户B。
- 宁波移动用户C此时也访问了同一个图片,用户C被分配到了宁波移动节点L1-nb,由于L1-nb还没有缓存,就会回源到L2,而L2已经有缓存,因此L2会直接返回缓存数据给L1-nb,然后L1-nb再返回给用户B。此过程存在L1-nb向L2回源的过程,而L2不需要再去回源到源站了。
- 通过CDN加速,杭州用户A和B可以直接从杭州节点读取缓存数据,宁波用户C可以直接从宁波节点读取数据,不需要每一次都去请求北京服务器了,提高了用户侧的访问速度,降低了服务器压力。
(ip 不固定)
缓存时间为一天的情况下修改已有文件后的预热测试
已经在Cache节点缓存过
在源服务器修改
因为缓存没过期, 访问的还是CDN节点上的缓存内容, 即便源服务器已经更新
现在来预热
结论: 预热不能让已有的缓存刷新
缓存时间为一天的情况下修改已有文件后的刷新测试
已经在Cache节点缓存过
在源服务器修改
因为缓存没过期, 访问的还是CDN节点上的缓存内容, 即便源服务器已经更新
现在来刷新(删除CDN上的缓存, 强制访问源服务器)
服务器的修改已经正确返回
结论: 刷新可以立即刷新源服务器的修改, 而不用等到缓存时间到
各种带宽资速度测试
下载内容总大小390M
以下结果都是浮动的, 测试样本少, 仅供参考
本地局域网下载时, 耗时48秒
同一个IP,第一次下载, 服务器10M带宽,CDN上没有缓存,耗时5分33秒
同一个IP,第二次下载, 服务器10M带宽,CDN上有缓存,耗时4分12秒
同一个IP,第三次下载, 服务器10M带宽,CDN上有缓存,耗时4分40秒
同一个IP,第一次下载, 服务器20M带宽,CDN上没有缓存,耗时4分43秒
同一个IP,第二次下载, 服务器20M带宽,CDN上有缓存,耗时4分33秒
同一个IP,第三次下载, 服务器20M带宽,CDN上有缓存,耗时4分26秒
同一个IP,第一次下载, 服务器30M带宽,CDN上没有缓存,耗时4分18秒
同一个IP,第二次下载, 服务器30M带宽,CDN上有缓存,耗时3分35秒
同一个IP,第三次下载, 服务器30M带宽,CDN上有缓存,耗时3分40秒
同一个IP,第一次下载, 服务器40M带宽,CDN上没有缓存,耗时4分33秒
同一个IP,第二次下载, 服务器40M带宽,CDN上有缓存,耗时3分34秒
同一个IP,第三次下载, 服务器40M带宽,CDN上有缓存,耗时3分40秒
同一个IP,第一次下载, 服务器50M带宽,CDN上没有缓存,耗时4分40秒
同一个IP,第二次下载, 服务器50M带宽,CDN上有缓存,耗时4分13秒
同一个IP,第三次下载, 服务器50M带宽,CDN上有缓存,耗时4分13秒
同一个IP,第一次下载, 服务器100M带宽,CDN上没有缓存,耗时5分13秒
同一个IP,第二次下载, 服务器100M带宽,CDN上有缓存,耗时3分41秒
同一个IP,第三次下载, 服务器100M带宽,CDN上有缓存,耗时3分9秒
目录刷新延迟太高,单个文件刷新基本没延迟
参考
验证IP是否为CDN节点: https://help.aliyun.com/document_detail/146385.html?spm=a2c4g.11174283.6.882.3f217035ssVO9R
阿里云CDN加速原理详解: https://developer.aliyun.com/article/749176?spm=a2c6h.14164896.0.0.15ab226ffuJoEk