CDN网络基础入门:CDN原理及架构
背景
互联网业务的繁荣让各类门户网站、短视频、剧集观看、在线教育等内容生态快速发展,互联网流量呈现爆发式增长,自然也面临着海量内容分发效率上的挑战,那么作为终端用户,我们获取资源的体验是否有提升呢?
答案是肯定的。持续改善用户体验的过程中,不仅受益于网络基础设施的建设,云计算产品也肩负着特有的使命。
当前,全球互联网流量一半以上通过 CDN 进行接入,CDN 帮助用户更快速、更安全地消费互联网内容,不管是浏览门户网站、观看短视频和长剧, 还是网上购物、在线学习,背后都有 CDN 在后台加速的身影。尤其在 2020 年春夏新冠肺炎疫情期间,CDN 支撑了上亿个学生的在线课堂学习,成功应对了在线课堂流量相较之前几十倍的增长,使得各级学校实现了停课不停学的目标,实现了巨大的社会价值。
传统网络分发面临的瓶颈与挑战
CDN 并不是互联网诞生之初就一直存在的,而是在支撑各类互联网业务高速发展的过程中应运而生并不断发展壮大的。未使用 CDN 加速时,大量用户请求需要穿越互联网骨干网才能获取源站内容,内容分发常面临着以下几项挑战:
-
用户距离源站距离较远,网络链路易拥塞,长距离传输对终端体验并不友好,易出现卡顿、慢速问题。
-
源站部署在单线(单个运营商)机房时,跨运营商访问质量差。
-
源站部署在 BGP /多线机房时,带宽的成本昂贵,且固定出口带宽时易成为服务瓶颈,突发活动需要扩容。
-
内容分发业务需要投入高成本进行服务器配置扩容,并且伴随高并发业务维护的人力成本。

而在业务使用 CDN 加速后,用户可以就近在边缘 IDC 节点下载到所需内容,极大地提升了用户体验,不仅让业务内容分发效率提升,也分担了源站的负载压力,使得源站服务聚焦于对非静态内容的业务处理,能够更加从容地面对突发业务带宽。通过智能回源出口选择,也能够避免单线机房跨运营商访问造成的不稳定性。

同时,相比 BGP 机房的带宽单价,CDN 将分发内容产生的流量成本降低到极致,您也可以通过选购 CDN 资源包享受更多优惠折扣。
CDN 是什么
互联网内容的分发模式与传统商品货物的分发模式有许多共通之处,在介绍 CDN 是什么之前,我们不妨思考一下是哪些因素让日常生活的购买效率更高,时效性更强?
-
首先,交通工具的便利及道路基建能力的提升,运输效率提升,让货物运输速度更快。
-
其次,仓储物流能力的建设,货物在多地仓库分布式仓储,位于同地区的多个超市便利店可选择从本地仓库直接进货,而顾客也可以直接在家门口的超市便利店购买所需商品,无需用户和源头生产厂商直接完成订单交易。
-
最后,售卖点的数量、覆盖范围的扩张也都为购买过程带来了体验上的改善,每个小区门口甚至单元楼都已经覆盖了便民超市,如今最近距离商品交易只需从身边的自动贩卖机就能够完成。
如何更通俗地去理解 CDN 是什么呢,我们也不妨尝试用购买效率提升的思路来帮助理解:CDN 在网络上的作用就像现实中用户身边的自动贩卖机、家门口的超市、各地的集中仓储,让用户可以最近距离很快捷的获取所需商品。
从技术视角出发,CDN 通过多级代理服务器对源站内容(例如 js/css/html/mp4 等)进行缓存,让静态内容缓存在距离用户更近的 IDC 机房节点上,实现用户获取资源的网络距离大幅度缩减,进而提升终端用户体验和传输效率。
CDN 架构及访问流程
如果要实现对全球业务的分发加速,自然需要海量节点储备用于给终端用户提供服务,而作为一个全球化的分布式系统,CDN 对系统性能和稳定性有非常高的要求,当前阿里云 CDN 主要由调度系统、链路质量系统、缓存系统、支撑系统等子系统组成,这些子系统共同构成了 CDN 大脑神经网络来保证 CDN 的日常服务。
-
调度系统:支持策略中心、DNS、HTTPDNS和302调度模式。当终端用户发起访问请求时,用户的访问请求会先进行域名DNS解析,调度系统将根据用户解析请求中携带的 IP 地址判断其区域、运营商,为用户选择并返回最佳接入节点 IP (DNS 未携带客户端 IP 时,调度根据DNS IP决策)。
-
链路质量系统:实时监测缓存系统中所有节点和链路的实时负载以及健康状况。调度系统在决策最优节点时,也会综合链路质量、实时负载等因素来为用户分配服务节点。
-
缓存系统:用户通过收到的最佳接入节点 IP 访问对应的缓存节点,如果节点已经缓存了用户请求的资源,会直接将资源返回给用户。
-
支撑系统:支撑服务系统包括天眼、数据智能和配置管理系统,分别具备了资源监测、数据分析和配置管理能力。

创建 CDN 加速域名后,CDN 将为您的加速域名分配 CNAME 记录值,您需要将域名解析至 CNAME 记录后才能接入CDN的智能调度系统。在正式接入 CDN 后,终端用户访问时经过的流程大致如下:
-
本机 DNS 发起对访问域名的解析查询,加速域名权威DNS将响应您所配置的 CNAME 地址,DNS 继续对CNAME 记录发起查询后,解析结果将根据阿里云调度系统决策,从权威 DNS 中返回最优节点 IP 地址。
-
用户本地发起和节点 IP 的建联,建联后开始发送 HTTP 请求,此时访问节点为边缘节点(L1),如果 L1 节点已缓存了用户请求的文件,L1 将直接返回缓存内容给用户,此时请求结束。
-
如果边缘节点(L1)没有该文件的缓存,将回源至上层节点(L2)获取资源,如果 L2 节点已缓存用户请求的文件,将直接返回缓存内容给L1,L1响应给用户并将文件缓存到本地,此时请求结束。
-
如果 L2 节点也没有用户所请求的文件,L2 节点将根据您在CDN控制台上的配置,回源到您的业务源站拉取资源返回给 L1 ,并将文件缓存到 L2 本地,此时请求结束。

阿里云在全球拥有2800+节点。中国内地(大陆)拥有2300+节点,覆盖31个省级区域;中国香港、中国澳门、中国台湾、其他国家和地区拥有500+节点,覆盖70多个国家和地区。全网带宽输出能力达150 Tbps。阿里云CDN产品通过广泛的地域覆盖和深厚的带宽储备,在全球范围为用户提供安全、稳定、可靠的内容分发服务。
相关文章:
CDN网络基础入门:CDN原理及架构
背景 互联网业务的繁荣让各类门户网站、短视频、剧集观看、在线教育等内容生态快速发展,互联网流量呈现爆发式增长,自然也面临着海量内容分发效率上的挑战,那么作为终端用户,我们获取资源的体验是否有提升呢? 答案是…...
李沐深度学习记录2:10多层感知机
一.简要知识记录 x.numel():看向量或矩阵里元素个数 A.sum():向量或矩阵求和,axis参数可对某维度求和,keepdims参数设置是否保持维度不变 A.cumsum:axis参数设置沿某一维度计算矩阵累计和x*y:向量的按元素乘法 torch.…...
Python标准库中内置装饰器@staticmethod@classmethod
装饰器是Python中强大而灵活的功能,用于修改或增强函数或方法的行为。装饰器本质上是一个函数,它接受另一个函数作为参数,并返回一个新的函数,通常用于在不修改原始函数代码的情况下添加额外的功能或行为。这种技术称为元编程&…...
MySQL8 间隙锁在11种情况下的锁持有情况分析
测试环境及相关必要知识 测试环境为mysql 8 版本 间隙锁(Gap Lock):用于锁定索引范围之间的间隙,防止其他事务在此间隙中插入新记录。间隙锁主要用于防止幻读问题。 在可重复读的隔离级别下默认打开该锁机制,解决幻…...
C# 图片按比例进行压缩
1、对图片进行压缩,保存在本地 对于一个200k的png文件按0.6的缩放比例进行压缩,压缩后的大小为20k左右 对于一个80k的jpg文件按0.6的缩放比例压缩,压缩后为13k左右 public void imageZoom(string name, Double zoomScale){Bitmap btImage …...
猜猜 JavaScript 输出:(! + [] + [] + ![]).length
一起猜 最近看到一个很有意思的题,直接来看,下面这段代码的打印结果是什么? console.log((! [] [] ![]).length) 猜猜看,你的答案是什么,打在评论区。 我的答案是 undefined,正如我的英文名 为什么呢&a…...
MTK Android12静默安装接口
该文档就是在android12系统上提供一个广播接收器,app端发送一个广播,并且带入apk的地址就可以实现安装 1、广播注册 frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java 首先要导入的依赖 import android.app.P…...
基于电容电流前馈与电网电压全前馈的三相LCL并网逆变器谐波抑制Simulink仿真
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Python数据攻略-Pandas与统计数据分析
统计学在数据分析中到底有多重要?在数据分析的世界里,统计学扮演着一角色。想象一下你是《三国志》游戏的数据分析师,任务是找出哪个武将最受玩家欢迎,哪些战役最具挑战性等。 你怎么做呢?这就需要统计学的力量了。 文章目录 基础统计方法描述性统计方差和标准差相关性和…...
【gcc】RtpTransportControllerSend学习笔记 1
本文是大神 https://www.cnblogs.com/ishen 的文章的学习笔记。主要是大神文章: webrtc源码分析(8)-拥塞控制(上)-码率预估 的学习笔记。大神的webrtc源码分析(8)-拥塞控制(上)-码率预估 详尽而具体,堪称神作。因为直接看大神的文章,自己啥也没记住,所以同时跟着看代码。跟…...
若依分离版-前端使用
1 执行 npm install --registryhttps://registry.npm.taobao.org,报错信息如下 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: ktg-mes-ui3.8.2 npm ERR! Found: vue2.6.12 npm ERR! node_modu…...
微信小程序-2
微信开发文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ 一、app.js中的生命周期函数与globalData(全局变量) 指南 - - - 小程序框架 - - - 注册小程序 删除app.js里的东西,输入App回车,调用生命周期 选项 - - - 重新打开此项目…...
卷积神经网络的发展历史-ResNet
ResNet的产生 2015 年,Kaiming He 提出了ResNet(拿到了 2016 年 CVPR Best Paper Award),不仅解决了神经网络中的退化问题还在同年的ILSVRC和COCO 竞赛横扫竞争对手,分别拿下分类、定位、检测、分割任务的第一名。 R…...
基于瞬时无功功率ip-iq的谐波信号检测Simulink仿真
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
node安装,nvm管理器
一、下载nvm,nvm-setup.exe https://github.com/coreybutler/nvm-windows/releases 二、配置NodeJS下载代理镜像(可选) 可以在NVM安装根目录下的setting.txt文件中,配置NodeJS下载代理镜像,解决在线安装NodeJS时速度…...
华为云云耀云服务器L实例评测|Ubuntu云锁防火墙安装搭建使用
华为云云耀云服务器L实例评测|Ubuntu安装云锁防火墙对抗服务器入侵和网络攻击 1.前言概述 华为云耀云服务器L实例是新一代开箱即用、面向中小企业和开发者打造的全新轻量应用云服务器。多种产品规格,满足您对成本、性能及技术创新的诉求。云耀云服务器L…...
C# OpenCvSharp 实现迷宫解密
效果 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Windows.Forms;namespace OpenCvSharp_实现迷宫解密 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e…...
趣味工具箱小程序源码
趣味工具箱小程序源码,支持功能去水印,精选壁纸,图片压缩,文字生成二维码,图片加水印,模拟来电,手持弹幕,掷骰子…等 使用小工具,一个小程序有几十个功能。 源码下载&am…...
互联网Java工程师面试题·Redis 篇·第二弹
目录 16、Redis 集群方案什么情况下会导致整个集群不可用? 17、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 18、Jedis 与 Redisson 对比有什么优缺点? 19、Redis 如何设置密码及验证密码? 20、说说 Redis…...
FreeRTOS入门教程(信号量的概念及API函数使用)
文章目录 前言一、什么是信号量二、信号量种类和对比三、信号量和队列的区别四、信号量相关的函数1.创建函数2.删除函数3.获取和释放信号量函数 总结 前言 本篇文章正式带大家开始学习什么是信号量,并且掌握信号量函数的基本使用方法,并且将和队列进行一…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
