网络知识 娱乐 玩转腾讯云CDN

玩转腾讯云CDN

本人见证了腾讯云一步步的成长,整体团队的不断进步,个人能力一点点的提升,遇到过各种各样的用户,咨询过各类相关问题。

今天开始用最简短的语言总结CDN产品的各类问题,方便广大用户了解和使用,感谢支持!

一、开通

1、实名认证:

根据国家规定,使用cdn产品需要完成实名认证。

  • 认证完成可能存在10分钟左右延迟,可以喝杯茶,耐心等待一会。

2、信用度检查:

在开通 CDN 服务时,会进行账号信用度检查。

  • 这里不仅仅是当前账号出现违规信息会导致无法开通使用cdn服务,如果相关联账号出现过违规,一样无法使用;
  • 例如:当前账号和违规账号认证信息相同;手机号相同等。

正义也许会迟到,但绝不会缺席;合规使用,合法做人。

二、接入

1、域名备案

加速区域选择为中国境内全球时,需要先完成 ICP 备案,若您的域名尚未完成 ICP 备案,您可以使用腾讯云网站备案。

  • 备案只要工信部可查即可,不强制在腾讯云完成备案;
  • 当前CDN拉取工信部备案信息存在延迟,可以耐心等待24小时;如果工信部已经可以查看到备案信息,可以咨询客服提供支持。

2、域名归属验证

接入域名为泛域名,或已被其他用户接入,或首次接入一个新域名时,需要进行域名归属权验证

  • 加速域名接入

三、配置

接入配置

1. 加速区域:

默认境内加速,自己用户所在区域;如无境外用户选择境内加速即可。

中国境外暂不支持使用流量包进行流量抵扣

加速区域和源站存在跨境,访问质量会受到公网环境影响。即源站在境外,加速区域为境内;源站在境内,加速区域为境外。

2. 业务类型:

业务类型不同会有不同默认配置(过滤参数:静态加速类型默认不开启,下载、流媒体点播加速类型默认开启;对象存储源站或业务类型为流媒体点播加速时默认开启分片回源);业务类型不同对应cdn会有不针对性的加速性能优化。

静态加速:适用于电商类、网站类、游戏图片类小型资源加速场景。

下载加速:适用于游戏安装包、音视频源文件下载、手机固件分发等下载场景。

流媒体点播加速:适用于在线教育、在线视频点播等场景。

3. ipv6访问:

默认为关闭状态。开启后,支持通过 IPv6 协议访问 CDN 节点,回源依然是ipv4协议(全链路ipv6敬请期待)

部分平台正在升级中,暂不支持开启 IPv6 访问

仅中国境内支持 IPv6 访问,若域名的加速区域为中国境外,则不可开启。

4.源站类型:

自有源(自己的ip或者域名):

1. 支持配置多个 IP 作为源站,回源时会进行轮询回源。

2. 支持增加配置端口(0 - 65535)和权重(1 - 100):源站:端口:权重(端口可缺省:源站::权重),HTTPS 协议暂时仅支持443端口。

3. 支持配置域名作为源站,此域名不可与 CDN 加速域名相同。

注:源站地址若为已接入的cdn加速域名,会造成循环解析,无法正常回源。

COS 源(直接选择对应bucket名字):

1. 选择腾讯云对象存储中的一个存储桶作为源站。

2. 根据存储桶处的配置和您的实际业务场景,选择默认域名或静态网站类型。

3. 若您的存储桶为私有桶,请授权 CDN 并开启回源鉴权,即开启私有存储桶访问。

第三方对象存储(第三方云存储默认访问域名):

1. 若资源已存储在第三方对象存储中,请输入有效的存储桶访问地址作为源站,当前支持的第三方为:AWS S3 和阿里云 OSS。

2. 回源至第三方私有存储桶,需填写有效密钥并开启回源鉴权,即开启私有存储桶访问。

5.回源协议:

cdn回源的协议类型,源站支持的访问协议。

源站如果仅支持http或者仅支持https,选择对应回源协议;源站如果两种协议都支持选择协议跟随。

6.回源Host:

同一个IP可以设置多个不同站点,访问不同的域名都转发到同一IP,怎么区分这些不同的站点呢,就是用的Host字段。

host头
  • 自有源:

默认为当前加速域名,可以自行修改。若接入泛域名,则默认为泛域名,且实际回源 HOST 为访问域名。

源站为域名时一般回源host应改为源站域名

  • COS 源:

默认为存储桶访问地址,与源站地址一致,不可修改。

  • 第三方对象存储:

默认为存储桶访问地址,与源站地址一致,不可修改。

7.基本配置:

忽略参数:

如果请求地址携带例如?version=1参数时,参数不同代表不同的内容,不要开启此配置--不然会导致访问到其它参数的缓存上,出现访问异常;

如果参数不同,对应文件内容都是一致的,开启此配置可以提高cdn缓存效果--节点缓存时,不匹配参数部分,匹配到参数之前即可命中缓存。

忽略参数只是对cdn缓存有影响,不影响回源是否携带参数。

分片回源:

首先源站需要支持range请求(测试方法请看下面)。

业务场景如果都是小文件的访问,同样不建议开启次配置--开启此配置访问回源会有0-0探测,小文件增加探测请求影响请求效率;

如果是大文件访问场景,并且源站支持分片请求,开启此配置会提高访问速度。

curl -vo /dev/null -r 0-0 https://源站域名;返回状态码是206,返回Content-Length: 1状态为支持,源站特殊情况可能仅支持0-0分片,但不支持其它分片请求也会有问题。

8.缓存配置:

cdn依赖缓存起到加速作用,缓存配置必不可少;其次要了解什么是静态内容&动态内容?

  • 缓存优先级底部最高
  • 静态内容设置缓存时间,动态内容缓存时间为0

静态内容:只要不更新,文件就是固定不变的内容,例如图片,js,css等; 动态内容:需要和服务器动态交互获取的资源,例如登录状态,在线人数,商品库存等。

下图这样的缓存规则即只缓存后缀为jpg;png;css;js;txt和html,以及首页缓存30天,其它文件都不缓存。

四、优化

1、缓存效果优化

  • 节点缓存配置

首先需要做到最优的缓存配置规则,即能缓存的资源都设置上缓存时间;其次业务上最好做动静分离,动态业务和静态内容使用不同的域名。

缓存规则最简单的设置全部文件缓存*天---这里是域名全部都是静态内容并且都需要缓存的场景;

最简单缓存规则

其次是了解自己域名下面哪些资源是不能缓存,因为缓存规则底部优先级更高,即可设置如下图状态。即除文件后缀为php;jsp;asp;aspx,和目录/login不缓存外,其它资源都强制缓存365天。

了解哪些不能缓存

另外如果上面两种情况都不满足,即域名下资源不能全部都缓存,也不知道哪些资源是不能缓存的。那么可以反向排除,尽可能的缓存更多能缓存的资源。如下图顶部设置一条全部文件不缓存规则,下面一点点增加自己明确知道可以缓存的资源信息

试探增加缓存规则

这里需要注意,如果源站响应头部存在这样的信息:Cache-Control: no-store/no-cache/private

cdn默认不缓存对应资源,如果配置缓存规则之后无法命中缓存可以检查下是否有这个响应头,可以选择更改或者删除这个响应头,也可以设置勾选强制缓存配置。

强制缓存
  • 过滤参数

例如下图这样状态就需要开启过滤参数配置,即参数不同,但文件内容都是一样的状态;反之如果不同参数,文件是不同内容,不能开启过滤参数配置。

过滤参数

控制cdn缓存键是url还是uri状态

  • 浏览器缓存规则

当我们打开某些常用的网站发现304状态,或者from disk cache/from memory cache状态时会发现方式速度很快,这里大概率是命中了浏览器缓存。

浏览器缓存

设置和上面节点缓存配置思路一样,下面我这里设置的遵循源站缓存规则,即需要源站对应文件响应头存在例如:cache-control:

max-age=43200才会按照对应值进行缓存

浏览器缓存配置

2、访问速度优化

上面所讲的合理化缓存规则配置原则上即可缩短很大的访问时间消耗,下面几项可以再进一步进行速度优化。

  • 分片回源

个人建议域名下文件按照10M为分水岭区分大文件小文件,如果对应加速域名下都是小文件可以不开启此配置;反之如果都是大文件,并且源站支持分片请求,需要开启此配置。

开启分片回源,首先需要回源发起0-0探测请求,探测源站是否支持range;对应文件大小,从而确定需要分多少片请求。

如果是小文件,例如100kb文件,0-0探测消耗200ms,再请求文件消耗200ms,请求这个文件总耗时即400ms,关闭分片回源即缩短一半时间。

  • 智能压缩

通过智能压缩配置,CDN 在返回内容时会按照设定规则对资源进行 Gzip 压缩,有效减少传输内容大小,从而提高访问速度。

这里很容易理解,文件越大请求耗时相对越长,文件越小请求耗时越短。

  • OCSP装订

OCSP用来检验证书合法性的在线查询服务,一般由证书所属 CA 提供。某些客户端会在 TLS 握手阶段进一步协商时,实时查询 OCSP 接口,并在获得结果前阻塞后续流程。OCSP 查询本质是一次完整的 HTTP 请求会导致请求增长;启用 OCSP 装订(TLS 证书状态查询扩展)后, 服务器在 TLS 握手时会发送事先缓存的在线证书状态协议(OCSP)响应,供用户验证,无需用户再向数字证书认证机构(CA)发送查询请求。

针对一些签发的比较低端或者免费的证书(比如:Let's Encrypt),当证书分配的ocsp地址是海外,没有在大陆加速的情况,可以大大缓解apple系统访问失败的情况。

  • HTTP 2.0

优点:

在 HTTP/2 中引入了多路复用的技术。多路复用很好的解决了浏览器限制同一个域名下的请求数量的问题,同时也接更容易实现全速传输,毕竟新开一个 TCP 连接都需要慢慢提升传输速度。

缺点: 一般来说同一域名下只需要使用一个 TCP 连接。但当这个连接中出现了丢包的情况,那就会导致 HTTP/2 的表现情况反倒不如 HTTP/1 了。因为在出现丢包的情况下,整个 TCP 都要开始等待重传,也就导致了后面的所有数据都被阻塞了。但是对于 HTTP/1.1 来说,可以开启多个 TCP 连接,出现这种情况反到只会影响其中一个连接,剩余的 TCP 连接还可以正常传输数据。

HTTP/2 基于 SPDY3,专注于性能,最大的一个目标是在用户和网站间只用一个连接(connection),主要有如下功能:

◎使用虚拟的流传输消息,解决了HTTP一个连接中应用层的队头阻塞的问题;

◎使用了二进制协议,不再是纯文本,避免文本歧义,缩小了请求体积;

◎实现了多路复用,提高了连接的利用率,在拥塞控制方面有了更好的能力提升;

◎使用HPACK首部压缩方案压缩头部信息,大大节约了带宽;

◎增强了安全性,使用HTTP/2,要求必须至少用TLS1.2;

◎允许服务器主动向客户端推送数据;

  • quic

具体原因参考这篇文章,可以深度理解对应关系:quic加持提速cdn

  • 热点大资源提前预热

例如新游戏上线,新业务发布,提前统计获取到对应文件url列表,在活动上线前(用户访问之前)进行文件预热操作,提前把对应资源预热到节点上,减少并发回源请求,提高缓存效果,缩短用户首次访问速度。

  • 选择正确的业务类型

选择对应业务类型,cdn服务平台侧会有对应优化措施(后端节点服务存在不同逻辑,从而优化对应业务)

3、访问控制优化

可以参考另外一篇文章CDN 流量异常/遭受 DDOS、CC 攻击怎么办

五、常见问题

Q:修改加速方式对业务是否有影响?

A:切换加速类型之后CDN会重新建立缓存,回源带宽会增高。

Q:CDN回源流量是否计算费用

A:回源流量CDN不收取费用,由对应源站收取。

Q:CDN缓存时间设置成0,还会收费吗 A:您好,若缓存时间设置为0,即CDN节点不缓存该资源,用户每次请求至CDN节点,节点都需回源站拉取相应资源,再返回给用户。其中节点返回给用户的数据流量是会计费的。

Q:CDN流量包耗尽后是直接请求到源站,还是域名无法访问?

A:CDN系统在计费时会优先抵扣流量包,超出部分再继续按照阶梯价格进行计费。计费模式可以查看此文档:https://cloud.tencent.com/document/product/228/2949

Q:为什么设置的节点缓存规则是30天,访问看到过期时间为10分钟?

A:这里所看到的expires是本地浏览器过期时间,遵循的上面max-age时间,如果需要调整浏览器缓存时间,可以单独进行设置。