cdn 服务器本质上就是一层缓存,并不是数据员,对象存储才是。数据员第一次访问 cdn 获取某张图片时,大概率在 cdn 里并没有这张图片的数据,因此需要回到数据员那去取出这份图片数据,然后再放到 cdn 上。 下次再次访问 cdn 时,只要缓存不过期,就能命中缓存,直接返回,这就不需要再回源。另外,回源这个事情其实用户是感知不到的, 因为用户去读图片的时候,只能知道自己读到了还是读不到。同样是读到了,还细分为是从 cdn 那直接读的,还是 cdn 回源,读对象存储之后返回的。那么我们有办法判断是否发生过回源吗? 有,以阿某云为例,当我们请求图片时,返回的结果里会有个叫 x cash 的 response header 信息,当它为 tcp miss 时, 意思是未命中缓存,导致 cdn 回原。查 oss 拿到数据后再返回,当它为 tcp memory heat 时,就是命中缓存了。其他公司的云产品几乎都可以从 response header 里找到相关的信息。 看到这里,我们就可以回答视频开头的问题了。用了 cdn 一定比不用的更快吗?如果没有接入 cdn, 直接访问原战流程是这样的,但如果接入了 cdn, 且 cdn 上没有缓存数据,那就会触发回原, 相当于在原来的流程上还多了一层 cdn 的调用流程。也就是用了 cdn 时未命中 cdn 缓存,导致回源就会比不用 cdn 的时候更慢。 为命中缓存,可能是 cdn 里压根就没这一数据,也可能是曾经有这条数据,但后来过期失效了。这两种情况都正常,大部分时候并不需要 做任何处理,但对于极个别场景,我们可能需要做些优化。比如你们原站数据有大版本更新,就像更换 cdn 域名啥的,那在上线的那一刻,用户全用新 cdn 域名去请求图片啥的,新 cdn 节点基本上百分百触发回源,严重的时候甚至可能会拖垮对象存储。 这时候你可能需要提前将热点数据筛选出来,利用工具预先请求一波,让 cdn 加载上热点数据缓存。 比如某鲤鱼上的 cdn 就有这样的刷新预热功能。从上面的描述看下来, cdn 最大的优势在于,对于来自世界各地的用户, 他可以就近分配 cdn 节点获取数据,并且多次重复获取同一个文件数据的时候,有缓存加速的作用。这对于网页图片这样的场景是再合适不过了,因为底层用的是对象存储,也就是说,只要是文件对象,比如视频、 音频啥的,都可以用这套流程接入 cdn 做加速。比如平时刷的某音某手短视频就是这么干的。那反过来想想,问题就来了,什么情况下不应该使用 cdn? 如果你有一个公司内网的服务,并且服务请求的图片等文件不太可能被多次重复调用,这时候其实没必要。使用 cdn 内网服务是为了保证你是了解服务的请求来源的,也能拿到对象存储的读权限。并且如果你的对象存储也是公司内部的,那大概率跟你的服务已经在同一个机房里,这已经很近了, 接入 cdn 也享受不到就近分配 cdn 节点所带来的好处。图片或其他文件不太可能被多次重复使用。如果接入了 cdn, 那你每次去访问 cdn 获取图片的时候, cdn 节点上大概率没有你要的数据,相当于每次都需要回原到对象存储去取一把,那接入 cdn 相当于给自己加了一层代理,多一层代理就多一层耗时。关于上面的第二点,如果你需要一个明确的指标去说服自己,那我可以给你一个 从上面的介绍内容。我们知道可以通过 cdn 响应的 http header 中的 x cash 字段,用回源次数除以总的请求数,就能得到回源的比例,比如回源比例高达百分之九十,那还接啥 cdn? 最后遗留一个问题, cdn 上方的图片和对象存处理的恢不一致吗?这种情况该怎么处理呢? 欢迎评论区讨论。想要文字版的笔记,可到我的号上回复关键字 cdn 即可获取。老规矩,总结的事情就交给你们了, is help you?
粉丝35.9万获赞98.2万

不是吧,作为程序员,你连 cd 是什么都不知道?就算你说你知道,那我多问一句,用了 cd 就一定比不用更快吗?用猫了吧? 没关系,今天我们换个角度重新认识下 cdn。 对于名字和电话号码这样的数字文本类型的数据, 我们通常会写入买色口数据库。那读场景呢?因为买色口的数据是存在词盘上的,单台实力读性能到差不多五 kqps 就已经很不错了,对于稍微大一点的系统,就稍微有点捉急了。 为了提升性能,我们在买色口之前一般会加一层内存做缓存层。比如常说的 readers, 读数据优先到内存里读,读不到才到买色口里读,大大减少了读买色口的次数。有了这套组合权,读性能轻松上万 qps。 但如果现在我要处理的不再是上面提到的文本类数据, 而是图片数据呢?比如我有一张帅气的照片,每次刷抖音,听到有人翻唱蔡健雅的来订购的时候,我都忍不住想发这张图并配文,还是忘不了。那么问题来了,这张图片数据应该存在哪? 又该从哪里读?我们回过头去看买色口和 redis 的场景,无非就是存储层加缓存层。 对于图片这样的文件,对象存储层不太可能再用买色口,应该改用专业的对象存储,比如亚某逊的 s 三,或者阿某云的 oss, 也就是 object storage service。 而缓存层也不能继续用 ready sir, 需要改成 cdn content delivery network, 也就是内容分发网络,可以将 cdn 简单理解为对象存储对应的缓存层。这张图片数据存在了对象存储,那当有需要的时候,会从 cdn 那被读出来。现在我们来看一下他们之 是怎么工作的。我们平时看到的图片可以右键复制,查看他的 url, 会发现图片的 url 长这样。其中前面的 cdn 点小白 debug 点 top 就是 cdn 的域名,后面的小白点 png 是图片的 usually。 当我们在浏览器输入这个 u 二 l 时,电脑会先通过点按协议获得 cdn 点小白 dbox 点 top。 这个域名对应的 ip 听起来很简单,但其实获得 ip 的过程挺曲折。首先电脑会先查看浏览器缓存,再看操作系统缓存以及 dns 服务器, 这时候就得到了这个 cdn 的别名 c name kenanico name, 也就是上面展示的这个昆仑结尾的域名,它是阿某云 cdn 专用的 dns 调度系统,此时 ds 服务器会去请求这个 columech 点 com, 然后返回一个离你最近的 ip 地址给你。这是个 cdn 节点, ip 浏览器去访问他一般就能获得图片数据。我们知道,对于普通域名, dns 解析后一般就能直接得到域名对应的 ip 地址。但对于 cdn 域名,一波查询下来,先得到的却是另一个域名,也就是 c name, 然后再查一次才能得到对应的 ip 地址。 看到这里,问题就又来了,为什么要加一层别名那么麻烦? c name 别名指向的其实是 cdn 专用的 dns 域名服务器。 当查询请求打入普通域名服务器时,普通的 dns 域名服务器返回域名对应的部分 ip 就够了,但 cdn 专用的 dns 域名服务器就会要求返回离调用方最近的服务器 ip, 因此这一层别名服务器是为了调度最近的 ip? 问题又又来了,怎么知道哪个服务器 ip 离掉永芳最近?可以看到,最近这个词其实是加了引号 后的 cdns 域名服务器其实是 cdn 提供商提供的,比如阿某云,当然知道自己的 cdn 节点 ip 有哪些,以及这些 cdn 服务器目前的负债和岩石啥的,可以通过调用方的 ip 知道他所属的运营商以及大概所在地,根据条件筛选出最合适的 cdn 服务器。这就是所谓的最近。 是不是觉得很麻烦?我也觉得,不用 cdn 直接访问对象存储,能不能拿到图片数据并展示,这就像问不走 redis, 直接从买色口中能不能读取到文本数据并展示一样。当然呢,这就是所谓的回源, 我之前放在博客里的图片就是这么干的,但这样成本更高。看一下下面这个图,可以看到直接请求 oss 的费用差不多是通过 cdn 请求 oss 的两倍。考虑到家境贫寒,同时也为了让博客获取图片的速度更快,我就接入了 cdn。


理解 cdn 的工作机制以及如何通过 cdn 优化网站性能。 cdn content delivery network 内容分发网络是一种分布式网络架构,他通过在全球多个边缘节点部署服务器, 将网站的内容预先缓存。当用户请求这些内容时, cdn 会从最近的节点快速响应,而非直接从原服务器获取,从而显著提高了网站的访问速度和稳定性。 其工作原理主要包括以下几个关键步骤,一、内容分发原湛江静态资源,如图片、 视频、 c s s javascript 等上传到 c d、 n 的各个边缘节点,这些节点会持续更新和存储最新的内容。二、请求路由用 户的请求首先由 dns 服务器处理,根据用户的位置和网络状况, dns 会返回最接近用户的 cdn 节点的 ip 地址,从而减少传输距离。三、缓存命中如果用户请求的内容在 cdn 节点已经存在, cdn 会立即返回,无需回原,大大减少了延迟。若未命中,则向原战请求并缓存数据。 四、缓存更新当原站内容更新时, cdn 会自动同步并推送到所有相关节点,确保信息的实时性。为了进一步优化 cdn 的性能,以下是一些策略, 合理的缓存策略,设置合理的缓存过期时间,既能保证内容的新鲜度,又能减少不必要 的会员请求。同时可以使用若一致性哈西算法,使得用户请求尽量均匀的分布在各个节点上。预热和预取对热门内容进行预热, 使新用户首次访问时就能快速获取。预取则是预测用户可能需要的内容。在用户请求前进行加载,负载均衡,通过智能调度,避免单个节点压力过大,保证服务的稳定性和可用性。 监控与分析,定期监控 cdn 的性能指标,如响应时间、命中率等, 发现问题及时调整配置。持续优化安全防护,利用 cdn 提供的 dds 防护功能,保护原战免受大规模攻击。总之,通过深入理解 cdn 的缓存原理 和灵活运用优化策略,网站能够实现更快的加载速度、更好的用户体验以及更高的安全性,从而提升整体的业务表现。