如果你像我一样从七牛云开始接触 CDN,就很可能先入为主地认为 OSS 和 CDN 是一个东西。我们先讨论七牛 CDN 的工作方式,搞懂了这个就不难理解 OSS 和 CDN 的差别。
如果你没有受到七牛云的“荼毒”,也可以跳过这一部分。
七牛 CDN 的工作方式
在七牛的官网可以看到两个主打产品,一个是对象存储,一个是融合 CDN。既然是分开的产品,那就说明它们可以分开使用,针对的问题也不同。
网上常说的“用七牛 CDN 加速”,其实是这两个产品的混合应用。初学者跟着网上的教程或者插件操作,只知道怎么用而不知道原理,因此无法分清两者的差别,把它们混为一谈。
多数七牛用户的配置结构是这样的:
当访客访问网页时,动态网页的处理在服务器中完成,而静态资源(比如图片、CSS、JS、字体)需要从对象存储中获取。如果使用了CDN,那么CDN将从对象存储中获取并缓存静态资源。网页发出请求后,离访客最近的CDN直接提供资源;如果资源还未在CDN中缓存,那么CDN就会把请求指向对象存储,最终获取到对象存储中的资源。
事实上,根据业务需求的不同,上图中的 CDN 或 对象存储并不是必须的组成部分,组合方式既可以是源站+CDN,也可以源站+对象存储。
OSS 和 CDN的差别
通过对七牛加速功能的分析可以看出,对象存储与 CDN 不一样,而 OSS 就是阿里云的对象存储存储产品。除了 七牛云存储、阿里云OSS,常见的对象存储产品还有——
- 腾讯云COS
- 京东对象云存储
- 华为云OBS
每个厂商的对象存储服务都可能有不同的名称,其实它们是同一个东西,只不过底层的技术可能不同而已。CDN 就不同了,几乎所有厂商的 CDN 产品都叫 CDN,因此大家一看就明白它是做什么的。
OSS 是做存储的,CDN 是做内容加速的。打个比方,OSS 是硬盘,用来存数据,那么 CDN 就是宽带,用来传输数据。如果 OSS 是一,那么 CDN 就是多。OSS 有它所在的数据中心,是一个容量巨大的硬盘,里面的内容只存在于那个数据中心;而 CDN 在世界各地都有缓存节点,内容被分别存储在世界各地,当访客浏览网页时,最近的缓存节点就为 Ta 提供数据。
OSS 和 CDN 能否相互替代?不能。下面我们以使用场景来对比解释。
使用场景
假设这样一个场景——
我用阿里云 ECS 建了一个视频网站,我写的代码简洁高效,用入门级配置的 ECS 就能支持几十上百万的访问量。
但是随着用户的增加,视频越来越多,我的 ECS 硬盘容量开始捉襟见肘。此时我应该升级硬盘容量吗?不,升级 ECS 的硬盘容量是性价比极低的方法,正确的选择是 OSS。将视频网站程序与用户上传的视频资源分离,视频保存在便宜大容量的 OSS 中,ECS 只需要负责运行程序。此时我们的网站就像是外挂了一个无限容量的巨大硬盘,而且这个“硬盘”对网站的运行不会产生影响。
存储问题解决了,但是我接到用户反馈说视频加载很慢。原来,我的 OSS 区域在杭州,而我的访客分布在全国各地。怎么才能让远方的访客获得更快的加载速度呢?我应该在多个区域创建 OSS吗?不,那样一来成本高,而来数据量庞大,跨区域间无安全拷贝和实时同步是不太可能的,最好的解决方法是使用 CDN 加速。CDN 将视频缓存在全国各地的节点上,用户获取到的是当地节点上的文件,速度自然就飞快起来了。
通过以上解释和场景模拟,相信你已经理解对象存储 OSS 和 CDN 的作用、组合方式。在实际应用中,它们并非必须同时使用。例如个人博客,本身的存储量不大,40GB 甚至 24GB 容量都绰绰有余,如果要实现加速功能,那么只需要 ECS + CDN 就行了。
- 不限性能入门主机推荐: ECS 共享型 xn4
- CDN 推荐:阿里云CDN、腾讯云CDN
意思是oss也能相当于一个源站吗?或者说是源站的一部分?
可以啊,云服务商如果同时提供了OSS和CDN服务,CDN要给OSS加速,OSS就是源站。另外可以用OSS搭建JAMSTACK静态网站,OSS也是原站。
谢谢,讲的很好!第一次对cdn和oss分清楚了
我之前也是一团迷糊,搞清楚之后再看网上的教程就能够轻松理解了