腾讯云 cdn 回源时,是回源节点和 客户端(浏览器)加起来两次请求嘛?

2021-11-09 04:00:17 +08:00
 selfcreditgiving
还是说 cdn 节点先请求到服务器的 response ,然后 cdn 节点再把缓存好的返回给客户端,只有一次请求。

对 cdn 的一些细节不太了解,请多指教
1331 次点击
所在节点    CDN
5 条回复
eason1874
2021-11-09 06:45:26 +08:00
就一次,CDN 就是反代,中间人。Client -> CDN nodes -> Server

如果没配置缓存,那客户端访问一次,CDN 就回源一次。服务器只是接收到一次 CDN 节点请求,客户端请求不会到达。

如果配置了缓存,那客户端第一次访问,CDN 回源一次,缓存了,客户端再次访问时,CDN 节点上的缓存有效就直接返回缓存结果,不会回源(没有请求到达服务器)。

但缓存配置只是建议,CDN 不会完全遵循,CDN 有自己的缓存策略。比如小文件你设置一个月那真的能缓存一个月,几十万次都没流量到服务器,而大文件,你设置一个月,可能几个小时没流量就给清理掉了,一天回源好几次。
selfcreditgiving
2021-11-09 07:10:26 +08:00
@eason1874 了解了多谢。 我遇到一个问题,是我的一个 动态 api 被调用了两次,疑问是不是 客户端和 cdn 节点各访问了一次呢。 那应该不是这个原因了。

对了,不要介意我 cdn 还缓存动态 api 的内容,我在测试 cdn 的功能,
原先的代码也没有根据动静分离,分别用不同的域名
比如 静态资源: static.domain.com/img.jpg 动态接口:apidomain.com/api/v1/getData
都是用一样的相对路径 /img/img.jpg /getData
eason1874
2021-11-09 07:37:00 +08:00
@selfcreditgiving CDN 控制台可以查询 IP 是不是 CDN 节点的,你把访问日志 IP 复制去查下就知道是不是 CDN 的请求了

另外在控制台也可以设置回源 header ,你添加一个特别的回源 header ,不要泄露,然后把它加入到日志格式,就可以从日志一眼看出来是不是 CDN 回源的请求了。你还可以拒绝没有这个 header 值的访问,那可以确保访问全部经过 CDN
selfcreditgiving
2021-11-09 08:14:28 +08:00
@eason1874 又想了想 CDN 本质上应该算一个 DNS 服务器,把我托管在 CDN 的域名,又重新分配给不同的 ip (根据地域不同分配地理位置最近的服务器 ip ),客户端(比如浏览器)拿到这个 ip 后去访问服务器。
这个服务器如果没有请求的内容(也就是没有命中),就会触发回源。

这里又有一个细节的问题想问了。 触发回源,cdn 服务器去回源地址取到数据后,假如我是北京的,要等 cdn 服务器把数据从主节点,一个个下发 直到下发到 北京那个节点的 cdn 服务器后, 我的请求(浏览器的)才能从北京那个节点收到返回结果嘛?

那样触发一次回源不是比正常的直连会慢很多了。
eason1874
2021-11-09 09:38:25 +08:00
@selfcreditgiving CDN 是反代服务,不是 DNS 服务。CDN 会提供一个 CNAME 域名,通过 DNS 把流量调度到 CDN 的不同节点,但这个不是 CDN 业务本身,只是流量调度方式之一。也有非 DNS 调度的,Anycast 方式。

如果客户端网络条件足够好,服务器也能负载得起流量,经 CDN 回源再返回是会比直连慢一点的,不过影响微乎其微,几十毫秒到一两百毫秒,大部分场景是感觉不明显的。

有一种 CDN 类型专门做了链路加速,优化反代速度,通常叫全站加速,会贵一些,适合要求毫秒级的客户。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/814019

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX