那些前端需要了解掌握的:对象存储 和 CDN 内容分发网络

概念定义

首先我们要明确一点,对象存储 和 CDN 内容分发网络,两者是不一样的!以下是它们的概念介绍:

对象存储(Object Storage)

  • 定义: 对象存储是一种云计算服务,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务, 用于存储和检索大量非结构化数据,如图片、视频、文档等。 相对于传统的文件系统,对象存储以对象的形式存储数据,每个对象包含数据、元数据和唯一的标识符。

  • 使用: 对象存储通常通过 HTTP 或 HTTPS 协议进行访问,使用 RESTful API 进行管理。

  • 场景: 适用于需要存储大规模数据、具备高可用性和耐久性的场景,如备份、存档、多媒体存储等。

CDN(Content Delivery Network,CDN)

  • 定义: CDN 是一种分布式服务,通过在全球各地的节点缓存静态资源(如图片、CSS、JavaScript 等),提高用户对这些资源的访问速度和体验。

  • 使用: CDN 通过将内容复制到位于全球各地的服务器上,使用户能够从离他们更近的地方获取所需的静态资源,而不是直接从原始服务器获取。

  • 场景: 适用于提高网站性能、减少加载时间、降低服务器负载等场景。特别是对于全球性的网站或服务,CDN 能够显著改善用户体验。

关于对象存储,不同的云厂商对应不同的英文缩写命名,不过本质上都是一样的。例如阿里云的对象存储服务叫做 OSS,华为云叫 OBS,腾讯云叫 COS(Cloud Object Storage),七牛叫 Kodo,百度叫 BOS……

可能单看上述文字解释,还是难以理解两者的概念。

疑问一:为什么需要引入对象存储这个概念?对象存储和服务器存储有何区别?

对象存储 VS 服务器存储

为什么需要对象存储呢?我们举个例子来看一下,假如有下面的应用场景:

某公司要准备上线一个视频网站,这个网站中可能会需要存有大量的视频文件,以供用户观看或下载。一般情况下,该公司会为该视频网站申请一台服务器以供存储该网站对应的代码文件及资源。

  1. 上传到网站服务器:当有大批量用户来访问此网站、观看视频或者下载时,服务器的带宽资源有限,观看视频的用户会抢占流量和带宽,可能导致某些访问/浏览网站的用户异常缓慢或卡顿。

  2. 上传到对象存储桶:对象存储可容纳海量数据,简单来说,使用对象存储可以一定程度上减轻服务器的压力。

对象存储和服务器存储 是两种不同的存储概念,它们在设计和应用上有一些区别:

对象存储

服务器存储

数据组织

对象存储以对象为基本存储单位,每个对象包含数据、元数据和唯一的标识符。这些对象以扁平的命名空间进行存储,而非像传统文件系统一样使用层次结构。

服务器存储通常采用传统的文件系统或块存储方式,将数据组织成文件或块,并通过文件路径或存储卷进行访问。

访问方式

对象存储通常通过HTTP或HTTPS协议进行访问,使用RESTful API进行管理。这种方式使得对象存储非常适合大规模的非结构化数据,如图片、视频、文档等。

存储在服务器上的数据可以通过网络文件共享协议(如NFS、CIFS)或块存储协议(如iSCSI)进行访问。这种存储方式更适用于结构化数据和应用程序的存储需求。

应用场景

适用于需要存储和检索大规模非结构化数据,例如备份、存档、多媒体存储等。

适用于传统应用程序、数据库存储等需要结构化数据管理的场景。

此外,通常情况下,在各种云服务厂商平台上,购买云服务器的成本往往比购买对象存储容量的成本高,所以,对于海量大规模数据的存储,可以考虑一下对象存储。

疑问二:既然对象存储已经解决了海量数据存储的问题,为何又需要 CDN 呢?

CDN(Content Delivery Network)

CDN 可以加速网络访问,目的是通过在源服务器和用户之间增加一层新的网络架构,将网站内容分发到最接近用户的网络“边缘”。简单来讲,CDN 就是根据用户位置分配最近的资源

【CDN 的基本工作流程】

不使用 CDN 的情况下的流程:

1️⃣用户在自己的浏览器中输入要访问的网站域名。

2️⃣浏览器向 本地 DNS 服务器 请求对该域名的解析。

  • 本地 DNS 服务器中如果缓存有这个域名的解析结果,则直接响应用户的解析请求;

  • 本地 DNS 服务器中如果没有这个域名的解析结果的缓存,则以递归方式向整个 DNS 系统请求解析,获得响应后将结果反馈给浏览器。

3️⃣浏览器得到域名解析结果,即该域名相应的服务设备的 IP 地址 。

4️⃣然后浏览器向服务器请求内容。

5️⃣服务器将用户请求内容传送给浏览器。

这整个流程概括为:

用户访问域名→浏览器向 DNS 发出请求→DNS 解析域名得到 IP 地址→根据 IP 地址访问发出请求→得到请求数据并回复

使用 CDN 后,

DNS 返回的不是 IP 地址,而是一个 CNAME 别名记录,指向 CDN 的全局负载均衡

使用 CDN 的情况下的流程:

1️⃣用户在自己的浏览器中输入要访问的网站域名。

2️⃣DNS 解析:浏览器向本地 DNS 服务器发出解析请求,DNS 服务器负责将域名解析为 IP 地址(有缓存直接响应解析请求;无缓存则向整个 DNS 系统请求解析得到响应)。

3️⃣CDN 的 DNS 负载均衡:由于没有返回 IP 地址,本地 DNS 会向负载均衡系统再发送请求,进入到 CDN 的全局负载均衡系统进行智能调度

  • 用户的 DNS 解析请求到达 CDN 提供商的 DNS 服务器;

  • 然后 CDN 的 DNS 服务器根据用户地理位置、网络状况等因素,选择一台合适的边缘服务器(就近的服务器)作为用户的访问点。

4️⃣请求到达 CDN 边缘服务器:用户的请求到达 CDN 边缘服务器。

5️⃣缓存查找:边缘服务器检查请求的内容是否已存于本地缓存中

  • 缓存命中:若缓存中有请求的内容,则边缘服务器直接返回缓存内容给用户。

  • 缓存未命中:若没有,边缘服务器将发起一个向源服务器的请求。

6️⃣源服务器获取内容:边缘服务器向原始服务器请求所需的内容,这可以是网站的静态资源,比如图片、CSS 文件等;源服务器响应并将内容传送给边缘服务器。

7️⃣内容传递给用户:边缘服务器获取到内容,它将内容传递给用户的浏览器,完成用户的请求。

  • 边缘服务器和用户之间的通信通常采用高速、可靠的网络通道,从而减少延迟和提高访问速度。

关于缓存更新和刷新:

  • CDN 会定期检查源服务器上的内容是否有更新,以确保缓存中的内容是最新的。

  • 在需要时,CDN 可以手动或自动刷新缓存,以提供最新版本的内容给用户。

整个流程中,CDN 的主要目标是提高用户访问网站时的速度和性能,通过缓存、负载均衡和就近路由等策略,使用户能够更快地获取网站的内容。这对于大型网站、全球分布的用户群体和对性能要求较高的应用非常重要。

对象存储 和 CDN 配合使用

对象存储的核心是存储,以及计算能力 (图片处理),cdn 的核心是分发,本身不会给用户提供直接操作存储的入口,所以一般是两者配合使用。

应用场景示例:

  • 网站加速: 将网站的静态资源(图片、样式表、脚本等)存储在对象存储中,然后通过 CDN 加速分发,提高网站加载速度。

  • 多媒体服务: 存储和分发大量的音频、视频文件,通过 CDN 实现高速的内容传输。

  • 全球部署: 在全球范围内提供服务时,通过 CDN 在各个地区分发对象存储中的数据,提高全球用户的访问速度。

对象存储:鱼与熊掌兼得的存储方式;CDN:让数据离用户更近一点

如果还是不能够理解对象存储和 CDN,可以这样理解下:

⒈对象存储就像一个巨大的仓库:

  • 比喻: 想象一下有一个巨大的仓库,可以存放各种各样的东西,比如照片、视频、文件等。

  • 用途: 这个仓库方便存储大量数据,而且能够保证数据安全、可靠,就像我们放东西在一个很安全的库房里一样。

⒉CDN 就像快递小哥送货:

  • 比喻: 而 CDN 就是像快递小哥一样,把仓库中的东西(比如照片、视频)分别复制到离用户近的很多地方,放在各个小仓库里。

  • 用途: 这样,当用户需要看照片或视频时,不用直接从大仓库取,而是从离他们最近的小仓库取,速度就更快,就像快递小哥把货物直接送到家门口一样。

⒊怎么使用:

  • 对象存储: 你把各种数据存放在对象存储中,就像把东西放在一个大仓库里一样,这样数据就安全可靠。

  • CDN: 通过设置,让 CDN 知道你的数据在哪个大仓库(对象存储)里,然后 CDN 会把这些数据分散复制到各个小仓库中,以便用户能够更快地获取数据。

⒋应用场景:

  • 网站加速: 想象你有一个小商店,你把商品存储在大仓库(对象存储)中,然后让快递小哥(CDN)把商品复制到附近的小仓库。这样,当有人想买你的商品时,快递小哥可以直接从附近的小仓库送货,速度就更快了。

  • 多媒体服务: 如果你有很多音乐、视频,你可以把它们存储在大仓库,然后让快递小哥把它们送到世界各地的小仓库,这样用户在任何地方都能够更快地观看或听到这些媒体。

综合起来,对象存储就是存储数据的大仓库,而 CDN 是把这些数据送到用户附近,让用户更快、更方便地获取数据的快递服务。通过它们的合作,我们可以实现高效、快速、可靠的数据存储和传输。