腾讯云CDN趟坑记

qcloud-cdn

「生命不息,折腾不止。」图片类应用的流量消耗就是个黑洞,根据目前对象存储的日均访问流量预估每月的免费流量配额几天就消耗完了,基于综合成本的考虑得上CDN了。

目前上CDN主要还是基于成本的考虑,暂时还没有性能提升的要求。因为目前小程序的访问量不大,日均访问量较平稳,基于对象存储的访问速度也还是很快的。如果单纯使用COS对象存储每月只有10G的免费流量配额,超出部分的单位价格比使用CDN+COS回源的单位价格总和还贵,如果回源策略设置的比较好回源的成本会很少,我使用了自有源把图片放在自己的服务器上,于是回源成本也节省了。新用户前6个自然月每月有50G的CDN赠送流量,加上每月固定10G的免费配额,每月有60G的免费流量可用。如果流量还是不够用可以买打折的流量包,另外还可以关注类似小程序扶持计划之类的活动也可能获取到优惠券。如果流量较大可以考虑使用根据带宽计费的模式付费,但按流量计费和按带宽计费的切换可能造成一定的损失需要自己评估下,官方给出的建议如下。

流量计费适合业务曲线波动较大的客户,带宽峰值计费适合业务曲线平稳的客户。若您的带宽利用率超过30%,表明您业务的曲线较为平稳,建议您采用带宽计费方式;若您的带宽利用率小于30%,表明您业务的曲线波动较大,建议您采用流量计费方式。

配置CDN之前需要先准备好两个二级域名并配置好https,一个域名用于CNAME到CDN节点,一个域名作为CDN的自有回源,即回源host需要配置的内容。访问控制里可以设置过滤参数、防盗链、IP黑白名单、IP访问限频等配置项。防盗链可以通过设置referer白名单进行防护,CDN用于小程序时需要配置 servicewechat.com 域名,而且必须勾选 包含空referer 的选项,否则浏览器无法访问图片资源。而COS存储中的防盗链就没有 包含空referer 的配置项,一旦设置防盗链就会导致图片在小程序中无法预览。之前使用COS存储还碰到过一个问题,如果COS存储中的图片做了修改,小程序中是没法立刻刷新到的,这是由于小程序在客户端缓存了图片,通过在请求图片的url后加随机数的办法解决了这个问题。然而刚切换到CDN时发现小程序加载图片的速度还不如之前使用COS存储时的速度,排除了网络的原因后发现应该是由于 过滤参数 的开关没有打开导致的,没打开开关之前每次请求图片都不会命中缓存导致必定回源请求图片,导致访问速度变慢了。打开开关后会截断url的访问参数,命中CDN缓存的机率就大大增加了,如果修改了源站的图片可以通过 缓存刷新 的功能更新图片缓存。缓存策略可以在默认规则的基础上做适当的调整,例如可以配置文件夹的缓存策略。之前想直接利用www的域名作为回源,通过目录结构作区分存放图片资源,这样少一个配置https二级域名的工作量,客服告知可以配置上述文件夹缓存的办法实现。实测类似 cdn.test.comwww.test.com/image 这种映射方式是无法实现的,访问url的路径必须是一一对应的,即 cdn.test.com/imagewww.test.com/image,如果不想使用路径还是老实添加二级域名作为回源地址吧。最后还需要打开 中间源 的开关,回源使用https时还需要打开 强制跳转HTTPS 的开关,并且将证书的回源方式配置为 协议跟随。还有值得一提的是CDN默认开启了gzip压缩的支持,这样可以节省图片下载的流量消耗,回源服务器开启gzip压缩支持需要在nginx中自行配置。

如上配置好以后就可以正常使用了,此外腾讯云还提供了多维度的图形化监控,方便用户实时了解CDN的使用情况,便于对使用的资源进行预估和调整。目前CDN上线一周运行稳定,待日后监控数据丰富后还可以作为小程序运营数据分析的补充。