初识CDN
在之前的工作中,一个常见的优化措施是将静态资源放在CDN上面,本文对CDN相关的知识进行整理。
概念
CDN(Content Delivery Network
,内容分发网络)是一种分布式网络技术,它是一种通过分布在全球不同地点的服务器来加速互联网内容传输的网络架构
在传统的互联网架构中,当用户请求访问网站或应用程序时,数据通常需要从源服务器(通常是位于特定地理位置的数据中心)传输到用户的设备上。这可能会导致延迟和较慢的加载速度,尤其是对于远离服务器的用户而言。
CDN的主要目的是提高网站性能、减轻服务器负载、降低延迟并保护用户隐私,通过在全球范围内的服务器节点存储和分发内容,使用户能够更快速、更有效地访问数据和资源。
CDN的工作方式如下:
缓存:CDN通过在各个地理位置分布的服务器(这些服务器也被称为边缘服务器)上缓存网站的静态资源(如图片、视频、CSS文件和JavaScript文件),当用户请求访问某个内容时,CDN会根据用户的位置,将内容提供给距离用户最近的边缘服务器,从而减少数据传输的距离和延迟。这样可以提高内容的加载速度,并且降低网络拥塞的风险。
负载均衡:当用户请求访问某个网站时,CDN会自动选择一个最佳的服务器来处理请求。这有助于平衡网站的流量,确保所有服务器都能公平地分配负载。
内容传输:当用户请求访问网站时,CDN会从就近的服务器获取资源,然后将这些资源传输到用户的浏览器。这使得用户可以更快地访问网站,特别是在网络拥堵或高延迟的情况下。
总之,CDN通过利用全球分布的边缘服务器,优化内容传输路径和加速内容加载,提供更快速、可靠和安全的用户体验,被广泛应用于各种互联网应用,如网站、应用程序、视频流媒体等。
原理
CDN网络是在用户和服务器之间增加Cache层,如何将用户的请求引导到Cache上获得源服务器的数据,主要是通过接管DNS实现,当业务需要接入到 CDN 时,用户只需调整自己的 DNS 配置信息,将 A 记录改为 CNAME 记录,将内容改为 CDN 厂商所提供的接入域名即可。
- 由于CDN对域名解析过程进行了调整,所以解析函数库得到的是该域名对应的CNAME记录,
- 为了得到实际的CDN服务器地址,浏览器需要再次对获得的CNAME进行解析,使用全局的负载均衡,分配靠近用户的CDN缓存服务器
- 缓存服务器根据浏览器提供的需要访问的域名,使用内部专用DNS解析得到此域名的实际IP,向该原始服务器请求数据,一方面缓存数据,一方面返回给浏览器,后续访问在缓存失效前可直接返回缓存
- 浏览器不在意数据从何处返回,能以较小延迟返回即可
未使用CDN,请求域名过程如下
- 用户向浏览器提供要访问的域名;
- 浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址;
- 浏览器使用所得到的IP地址,域名的服务主机发出数据访问请求;
- 浏览器根据域名主机返回的数据显示网页的内容。
CDN网络是在用户和服务器之间增加Cache层,如何将用户的请求引导到Cache上获得源服务器的数据,主要是通过接管DNS实现
当业务需要接入到 CDN 时,用户只需调整自己的 DNS 配置信息,将 A 记录改为 CNAME 记录,将内容改为 CDN 厂商所提供的接入域名即可。
使用了CDN,请求域名过程如下
- 用户向浏览器提供要访问的域名;
- 浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析函数库得到的是该域名对应的CNAME记录(由于现在已经是使用了CDN服务,CNAME为CDN服务商域名)
- 为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;
- 在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问。(CDN服务来提供最近的机器)
- 此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;
- 缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;
- 缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程;
- 客户端得到由缓存服务器返回的数据以后显示出来并完成整个浏览的数据请求过程。
CNAME
CNAME(Canonical Name)是一种DNS记录类型,用于将一个域名映射到另一个域名。当您在DNS管理面板中创建一个CNAME记录时,您实际上是告诉DNS服务器将一个域名重定向到另一个域名。
例如,假设您有一个名为“example.com”的域名,并且您希望将其重定向到“www.example.com”。您可以在DNS管理面板中创建一个CNAME记录,将其指向“www”,然后将目标域名设置为“example.com”。这样,当用户访问“example.com”时,他们将被重定向到“www.example.com”。
CNAME记录通常用于以下情况:
重定向:当您想要将一个域名重定向到另一个域名时,可以使用CNAME记录。
别名:当您想要使用一个易于记忆的别名来访问一个域名时,可以使用CNAME记录。
前缀:当您想要使用一个前缀来访问多个子域名时,可以使用CNAME记录。
总之,CNAME是一种非常有用的DNS记录类型,可以帮助您轻松地管理您的域名系统。
CNAME和CDN之间的关系在以下方面体现:
域名重定向:使用CNAME记录可以将域名重定向到CDN提供商的域名。例如,将"www.example.com"的CNAME记录设置为CDN提供商的域名,可以将网站的内容交付交给CDN来处理。
域名解析:当用户通过域名访问内容时,DNS解析会查找CNAME记录,并将请求重定向到CDN提供商的服务器。CDN服务器会根据用户的位置和网络条件,将内容从最近的边缘服务器交付给用户。
内容分发:CDN使用边缘服务器来缓存和分发内容,以减少用户请求的延迟。通过CNAME记录,域名可以与CDN的边缘服务器关联起来,从而实现内容的高效分发。
综上所述,CNAME记录可用于将域名重定向到CDN提供商的域名,以便利用CDN的内容分发服务,提高内容的交付效率和用户体验。
扩展:OSS
在实际开发中,CDN一般会用来访问不会变更的资源,如前端静态资源、图片、视频等。
将这些资源放在自己的服务器磁盘上比较浪费,因此各个云服务商基本都提供了类似云磁盘的功能,比如OSS
(Object Storage Service)云对象存储服务。
可以通过OSS + CDN ,搭建一个专属于自己的图床
你要请我喝一杯奶茶?
版权声明:自由转载-非商用-保持署名和原文链接。
本站文章均为本人原创,参考文章我都会在文中进行声明,也请您转载时附上署名。