【计算机网络】图解内容分发网络 CDN

【计算机网络】图解内容分发网络 CDN

参考资料:

用了CDN就一定比不用更快吗?

什么是内容分发网络

高性能利器:CDN我建议你好好学一下!

文章目录

  • 【计算机网络】图解内容分发网络 CDN
    • 一、CDN 概述
      • 1.1、什么是 CDN
      • 1.2、为什么需要 CDN
        • 1.2.1、互联网中的三个一公里
        • 1.2.2、运营商的互联互通问题
        • 1.2.3、难兄难弟
    • 二、CDN 工作原理
      • 2.1、接入CDN
        • 2.1.1、两个重要的概念
        • 2.1.2、怎么知道哪个服务器IP里调用方最近?
      • 2.2、CDN访问过程
        • 2.2.1、传统模式下DNS的调度过程
        • 2.2.2、有CDN参与的DNS调度过程
    • 三、CDN 的回源
      • 3.1、CDN的资源可以直接访问吗?
      • 3.2、回源是什么?
      • 3.3、怎么判断是否发生回源
    • 四、CDN的组成
      • 4.1、全局负载均衡系统 GLB
      • 4.2、缓存服务器
      • 4.3、源站
      • 4.4、CDN的分层架构
    • 五、CDN 总结

一、CDN 概述

1.1、什么是 CDN

CDN 全称 Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定

CDN 的工作原理 就是将源站的资源缓存CDN各个节点上,当请求命中了某个节点的资源缓存时,立即返回客户端,避免每个请求的资源都通过源站获取,避免网络拥塞、缓解源站压力,保证用户访问资源的速度和体验。

内容分发网络 解决了因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度和成功率。

1.2、为什么需要 CDN

CDN并非网络基础设施,而是构建在实体网络基础设施的一个"应用层",来看看为什么需要它。

1.2.1、互联网中的三个一公里

image-20230503195011000

这幅图展示了互联网通信领域中常说的"三公里":

  • 第一公里
    网站服务器接入互联网公网的链路,这里的带宽也决定了网站的负载能力,也称为网站的接入带宽。
  • 中间一公里
    中间一公里主要是接入网、城域网、骨干网组成的链路实体,其中会涉及多家运营商,也就出现了运营商之间互联互通的数据交换问题。
  • 最后一公里
    这是用户接入互联网获取信息的最后环节,换句话说就是你们小区的网络、你们家楼的网,往往这部分的带宽不高,影响也比较明显。

1.2.2、运营商的互联互通问题

运营商之间数据的互联互通问题,比如A市联通要访问A市电信的数据资源,按照互联互通的规则限制,不同运营商的数据要在指定的交换中心进行数据交换,假如交换中心位于较远的B市,那么就存在如下图的关系:

image-20230503195156453

换句话说,本来两个运营商是同一个城市的,但由于运营商的网络差异需要到几百公里之外的交换中心所在的城市进行数据交换,实现资源的访问。

对于不同运营商间的互联互通,一般是采用BGP peering(对等)的方式进行。两家运营商相互协商,在特定地点建立连接,通过一系列的配置,运营商A的用户就能访问运营商B的资源了。
在中国,运营商之间通过“国家级互联网骨干直联点”进行连接,2001到2014年,国内只有北上广三个直联点,导致跨网访问体验极差,流量无法本地中转需要长途迂回,大大增加了延迟。

1.2.3、难兄难弟

试想北美的海外用户要访问在服务器在深圳的资源,物理距离就有几万公里,算上三个一公里的消耗,恐怕用户的体验会非常糟糕。

image-20230503195410524

同样的,网站服务器的接入带宽是有限的,对于海量用户的接入访问非常容易出现拥塞,这样很容易把网站服务器压垮。

image-20230503195435788

同时,对于运营商来说也很糟糕,骨干网充斥着大量相同的请求,网络基建压力很大,如果把这些请求在本地处理掉该多好!

可见,如果没有CDN这一层Cache应用,网站、用户、运营商都会很崩溃。

image-20230503195502822

二、CDN 工作原理

2.1、接入CDN

在接入CDN前,当我们访问某个域名,直接拿到第一个真实服务器的IP地址,整个流程如下:

image-20230503195809844

当我们需要加速网站时,通过向运营商注册自己加速域名,源站域名,然后进入到自己域名的DNS配置信息,将 A 记录修改成 CNAME 记录即可。阿里云加速申请参考如下:

image.png

2.1.1、两个重要的概念

比如为源站abc.com到阿里云进行域名加速,配置完成后阿里云会自动关联生成加速域名的别名如abc.com.aliyuncdn.net,这个别名也称为CNAME。

image-20230503200525925

这里我们提两个重要的概念:CNAME和A记录,它们是理解CDN的基础概念。

CNAME记录,也叫别名记录,比如www.xx.com的别名是www.yy.com,CNAME记录是一种指向关系,把www.yy.com指向了www.xx.com,一个域名可以有多个别名,存在多对一的关系。

A记录,即Address记录,我们可以把它理解为一种域名和IP地址的映射关系。

drawio

由于加速域名已经进行了CDN的CNAME配置,在权威DNS服务器的解析下得到的并不是IP地址,而是CNAME。

2.1.2、怎么知道哪个服务器IP里调用方最近?

可以看到"最近"这个词其实是加了双引号的。

CDN专用的DNS域名服务器其实是CDN提供商提供的,比如阿里云当然知道自己的的CDN节点有哪些,以及这些CDN服务器目前的负载情况和响应延时甚至权重啥的,并且也能知道调用方的IP地址是什么,可以通过调用方的IP知道它所属的运营商以及大概所在地,根据条件筛选出最合适的CDN服务器,这就是所谓的"最近"。

举个例子。假设地理位置最近的CDN机房流量较多,响应较慢,但地理位置远一些的服务器却能更好的响应当前请求,那按理说可能会选择地理位置远一些的那台CDN服务器。

也就是说,选出来的服务器不一定在地理位置最近,但一定是当前最合适的服务器。

2.2、CDN访问过程

2.2.1、传统模式下DNS的调度过程

image-20230503200123027

  1. 客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。
  2. 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:“老大, 能告诉我 www.server.com 的 IP 地址吗?” 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。
  3. 根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说:“www.server.com 这个域名归 .com 区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”
  4. 本地 DNS 收到顶级域名服务器的地址后,发起请求问“老二, 你能告诉我 www.server.com 的 IP 地址吗?”
  5. 顶级域名服务器说:“我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该能问到”。
  6. 本地 DNS 于是转向问权威 DNS 服务器:“老三,www.server.com对应的IP是啥呀?” server.com 的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。
  7. 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
  8. 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。

2.2.2、有CDN参与的DNS调度过程

当我们在浏览器输入这个URL就会发起HTTP GET请求,然后经历以下过程。

image-20230503201837010

1、用户访问图片内容,先经过 本地DNS 解析,如果 LDNS 命中,直接返回给用户。

2、LDNS MISS,转发 授权DNS 查询

3、返回域名 CNAME picwebws.pstatp.com.wsglb0.com. 对应IP地址(实际就是DNS调度系统的ip地址)

4、域名解析请求发送至DNS调度系统,DNS调度系统为请求分配最佳节点IP地址。

5、返回的解析IP地址

6、用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。

三、CDN 的回源

3.1、CDN的资源可以直接访问吗?

我们平时看到的图片,可以右键复制查看它的URL。

image-20230503202251367

会发现图片的URL长这样。

https://cdn.xiaobaidebug.top/1667106197000.png

其中前面的cdn.xiaobaidebug.top就是CDN的域名,后面的1667106197000.png是图片的路径名。

也就是说这张图片是访问CDN拿到的。

那么,直接访问对象存储能不能拿到图片数据并展示?

比如像下面这样。

https://oss域名/图片地址.png

当然能。但这样成本更高,这里的成本,可以指性能成本,也可以指调用成本。看下下面这个图。

image-20230503202424738

3.2、回源是什么?

上面的截图里,红框里有个词叫"回源"。

当我们访问https://cdn域名/图片地址.png时,请求会打到cdn服务器上面。但cdn服务器本质上就是一层缓存,并不是数据源,对象存储才是数据源

第一次访问cdn获取某张图片时,大概率在cdn里并没有这张图片的数据,因此需要到数据那去取出这份图片数据。然后再放到cdn上。下次再次访问cdn时,只要缓存不过期,就能命中缓存直接返回,这就不需要再回源。

于是访问的过程就变成了下面这样。

image-20230503203032080

那还有哪些情况会发生回源呢?

除了上面提到的cdn上拿不到数据会回源站外,还有cdn上的缓存过期失效了也会导致回源站。另外,就算有缓存,且缓存不过期,也可以通过cdn提供的开放接口来触发主动回源,但这个我们比较少机会能接触到。

另外,回源这个事情,其实用户是感知不到的,因为用户去读图片的时候,只能知道自己读到了还是读不到。

同样是读到了,还细分为是从cdn那直接读的,还是cdn回源读对象存储之后返回的

image-20230503203146759

3.3、怎么判断是否发生回源

假设我要请求下面这张图https://cdn.xiaobaidebug.top/image/image-20220404094549469.png

为了更方便的查看响应数据的http header,我们可以用上postman

image-20230503203242373

此时查看response header下的X-Cache的值是 MISS TCP_MISS。意思是未命中缓存导致CDN回源查oss,拿到数据后再返回。

那此时CDN里肯定是有这张图片的缓存了。我们可以试着再执行一次 GET 方法获取图片。

image-20230503203442829

X-Cache的值就变成了 HIT TCP_MEM_HIT,这就是命中缓存了。

这个是某里云的做法,其他比如腾某云啥的,也都大差不差,几乎都可以从response header里找到相关的信息。

四、CDN的组成

4.1、全局负载均衡系统 GLB

image-20230503203749794

  • 当用户访问加入CDN服务的网站时,域名解析请求将最终由 “智能调度DNS”负责处理。
  • 它通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户可以得到快速的服务。
  • 同时它需要与分布在各地的CDN节点保持通信,跟踪各节点的健康状态、容量等信息,确保将用户的请求分配到就近可用的节点上。

4.2、缓存服务器

缓存服务器主要的功能就是缓存热点数据,数据类型包括:静态资源(html,js,css等),多媒体资源(img,mp3,mp4等),以及动态数据(边缘渲染)等。

众所周知耳熟能详的与 CDN 有关的开源软件有:

  • Squid
  • Varnish
  • Nginx
  • OpenResty
  • ATS
  • HAProxy

4.3、源站

源站指发布内容的原始站点。添加、删除和更改网站的文件,都是在源站上进行的;另外缓存服务器所抓取的对象也全部来自于源站。

4.4、CDN的分层架构

image-20230503204242278

五、CDN 总结

1、资源访问加速: 本地Cache加速,提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度,并大大提高以上性质站点的稳定性

2、消除运营商间网络互联的瓶颈问题: 镜像服务消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量。

3、远程加速: 远程访问用户根据DNS负载均衡技术 智能自动选择Cache服务器,选择最快的Cache服务器,加快远程访问的速度

4、带宽优化: 自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能。

5、集群抗攻击: 广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种D.D.o.S攻击对网站的影响,同时保证较好的服务质量 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/16564.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java笔试强训 16】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、判断题 🔥完全数计…

shell的基础学习三

文章目录 一、Shell 流程控制二、Shell 函数三、Shell 输入/输出重定向四、Shell 文件包含总结 一、Shell 流程控制 for 循环 与其他编程语言类似,Shell支持for循环。 for循环一般格式为: while 语句 while 循环用于不断执行一系列命令,也…

02-Vue技术栈之基础篇(下)

目录 1、class 与 style 绑定1.1 理解1.2 class 绑定1.3 style绑定1.4 代码示例 2、条件渲染2.1 v-if2.2 v-show2.3 注意事项2.4 代码示例 3、列表渲染3.1 基本列表3.2 key的原理3.2.1 虚拟DOM中key的作用:3.2.2 对比规则:3.2.3 用index作为key可能会引发…

IPsec中IKE与ISAKMP过程分析(主模式-消息1)

IPsec协议族中IKE(Internet Key Exchange)是一种基于ISAKMP的协议,它为建立IPSec安全通信隧道提供了一种无痕密钥交换的机制。简单来说,IKE就是ISAKMP的扩展,为ISAKMP提供了更加高效、灵活和安全的密钥协商机制。 GMT …

ChatGPT实现HTML网页文本提取

网页自动化工具 既然ChatGPT对于编程语言有非常强大的理解能力,那么它是否可以用来自动化地处理网页呢?答案是肯定的。ChatGPT可以使用机器学习算法来识别网页元素中的文本,并抽取出有用的信息。 例如我们提供一段层数比较多的相对来说较为…

继续科普:ChatGPT 最新写论文使用方法

这两天发现了几个国内就能用的ChatGPT,不需要魔法! 给大家推荐两种方法,大家自行选择: 1、电脑端安装VSCode软件,使用GPT插件: 优点: 无需魔法、无需付费、软件简单易用(稍懂电脑就会用) 缺点: ① 只支持电脑端,不支持手机:软件安装虽简单,但不一定所有人都…

java基础知识——22.lambda表达式

这篇文章,我们来讲一下java的lambda表达式 目录 1.初识lambda表达式 2.lambda表达式介绍 2.1 函数式编程 2.2 lambda表达式的具体格式 2.3 Lambda表达式的好处 2.4 Lambda的省略写法 1.初识lambda表达式 首先,我们来看一下lambda表达式的应用 下…

CKA/CKS/CKAD认证考试攻略

什么是CKA考试? CKA认证考试是由Linux基金会和云原生计算基金会(CNCF)创建的,以促进Kubernetes生态系统的持续发展。该考试是一种远程在线、有监考、基于实操的认证考试,需要在运行Kubernetes的命令行中解决多个任务。CKA认证考试是专为Kube…

SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈

Docker 我们发现在微服务中有一个令人头疼的问题——部署,用Docker去解决这个部署难题 (一)初识Docker-什么是docker 1、项目部署的问题 2、Docker 扔到一台机器上,它们的依赖难道没有干扰吗?不会,docke…

组合导航卡尔曼滤波几个杂项

1.组合导航卡尔曼滤波噪声协方差矩阵调参 在组合导航卡尔曼滤波算法中,主要涉及两个噪声协方差矩阵,过程噪声协方差矩阵Q,测量噪声协方差矩阵R,具体来说: R表示测量噪声协方差,它是一个数值,这…

低代码平台很赞,用2个小时,搭出1套应用

最近低代码很火,到处都是低代码的尝试贴,笔者今天也决定深入体验一下,感受它的便捷程度。 在案例开始之前,我们先来聊聊概念。 一、低代码 低代码实质上并不是一个新颖的话题,也不是最近才有的技术突破和创新&#xf…

【全年汇总】2023年CCF软件工程/系统软件/程序设计语言会议截稿时间汇总(持续更新)

本博文是根据CCF会议推荐的软件工程/系统软件/程序设计语言领域相关会议目录撰写。 一、截稿时间总览 截稿时间的总时间轴内容将会持续更新...... 往年投稿及录用情况及链接详见图片后面的内容。 二、会议详细目录 由于一些会议的投稿时间还没公开,因此根据往年投稿…

gRPC结合vcpkg在x64-windows平台visual studio2019 cmake工程里面的应用

这里我们运用vcpkg去下载安装gRPC,进入vcpkg目录后,执行命令:.\vcpkg.exe install grpc:x64-windows grpc在vcpkg里面安装完成后,我们就来使用grpc做一个简单的例子。 gRPC顾名思义,就是google的RPC方案,…

4月23日作业

#include <iostream> #include <cstring> using namespace std; class Student //学生类 { private: string name; //姓名 int year; //年龄 double sorce; //分数 public: Student (){} //无参构造 Student(string a,int b,double c):name(a),y…

元宇宙营销策略、玩法与案例

“元宇宙”依旧是当下品牌创新营销的重要形式&#xff0c;从时趣的行业观察来看&#xff0c;大量品牌方都有着元宇宙的营销意向&#xff0c;但在营销落地上存在不同的进度。一个显而易见的事实是&#xff0c;元宇宙不仅仅是一个虚拟的游戏空间&#xff0c;更是一个未来人人都会…

Java 抽象类和接口

一、抽象类和接口定义和使用场景 当你需要设计一些类&#xff0c;这些类有一些属性和方法是可以共享的&#xff0c;但同时又有一些属性和方法是需要不同的。在这种情况下&#xff0c;Java中提供了两种不同的机制&#xff0c;即“抽象类”和“接口”。 抽象类是一个类&#xff0…

第二十一章 光源

光源是每个场景必不可少的部分&#xff0c;光源除了能够照亮场景之外&#xff0c;还可以产生阴影效果。 Unity中分为四种光源类型&#xff1a; 1. 方向光&#xff1a;Directional Light 用于模拟太阳光&#xff0c;方向光任何地方都能照射到。 2. 点光源&#xff1a;Point L…

Java面试题总结 | Java面试题总结9- RabbitMQ模块(持续更新)

RabbitMQ 文章目录 RabbitMQ为什么使用Rabbitmq而不是其他的消息队列为什么使用消息队列解耦异步削峰 消息队列有什么优缺点MQ的高可用保障单机模式 普通集群模式&#xff08;无高可用性&#xff09;镜像集群模式&#xff08;高可用性&#xff09; MQ如何保证不重复消费、幂等性…

浏览器安全之XSS跨站脚本

基本概念 跨站脚本&#xff08;Cross-Site Scripting&#xff0c;XSS&#xff09;是一种经常出现在Web应用程序中的计算机安全漏洞&#xff0c;是由于Web应用程序对用户的输入过滤不足而产生的。 攻击者利用网站漏洞把恶意的脚本代码&#xff08;通常包括HTML代码和客户端Javas…

Vue.js 框架能力的官方认证

这两天Vue官方推出了Vue.js 认证计划。 即框架能力官方认证&#xff0c;即 Vue.js 框架能力证书。该认证由 Vue School 与 Vue.js 团队合作提供支持。官网&#xff1a;Vue.js - Official Certification Program 官方介绍此次的试题集和代码挑战由 Vue.js 核心团队审核&#xff…