CDN的工作原理及流程

CDN(Content Delivery Network,内容分发网络)是一种构建在数据网络上的分布式内容分发网络。

CDN利用全局负载均衡技术,将用户的访问请求指向离用户最近且工作正常的流媒体服务器上,由流媒体服务器直接响应用户的请求

CDN克服单机系统输出带宽及并发能力不足的缺点,极大提升系统支持的并发流数目,减少或避免单点失效带来的不良影响。

举例:
假设一个电商网站在节假日时期流量激增,为了保障用户访问的流畅性和稳定性,该网站选择了CDN服务。CDN提供商在全球各地部署了节点,并将网站的静态内容(如图片、商品详情页等)缓存到这些节点上。当用户访问网站时,CDN会根据用户的地理位置,将请求指向离用户最近的节点,从而减少了网络传输的延迟,提高了用户访问的速度。同时,由于CDN缓存了网站的部分内容,因此部分用户的请求可以直接从CDN节点上得到满足,减轻了源站的负载。


特点

  • 访问加速:CDN通过在全球各地部署节点,将内容分发到离用户最近的节点上,从而减少了网络传输的延迟,提高了用户访问网站的速度。

  • 减轻源站负载:由于CDN缓存了网站的部分或全部内容,因此部分用户的请求可以直接从CDN节点上得到满足,从而减轻了源站(服务器)的负载。

  • 集群抗攻击:CDN节点分布广泛,加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种DDoS攻击对网站的影响。

  • 提高服务质量:CDN通过负载均衡、缓存等技术,保证了用户访问的稳定性和服务质量。


工作流程

1. 用户发起请求

当用户通过浏览器或应用访问某个网站或资源时,浏览器向本地DNS服务器发起一个DNS请求。

本地DNS服务器:通常是网络运营商(ISP)提供的DNS服务器。

2. 本地DNS查询

本地DNS服务器会首先检查其缓存中是否已有该域名的IP地址记录:

  • 如果有缓存,它会直接返回相应的IP地址给用户。

  • 如果没有缓存:

    • 如果该网站没有配置CDN服务:则以迭代方式向整个DNS系统请求解析,直到找到对应的IP地址。

    • 如果该网站配置了CDN服务,其DNS记录中包含了一个CNAME,指向CDN的DNS服务器。
      即:本地DNS服务器会将域名解析权交给CNAME指向的 CDN专用的DNS服务器,而不是直接指向源站服务器。
      这个过程称为智能DNS解析

CDN专用的DNS服务器:通常称为智能DNS、权威DNS、或全局负载均衡器

CDN通常使用CNAME来重定向DNS查询到一个或多个CDN专用的DNS服务器。

3. 请求全局负载均衡设备

  • CDN专用的DNS服务器将CDN的全局负载均衡设备IP地址返回给用户

  • 用户对这个全局负载均衡设备发起访问请求

4. 选择边缘节点并获取IP

CDN全局负载均衡设备根据用户IP地址、请求的URL,选择一个最优的缓存服务器节点(边缘节点),并获得该边缘节点的IP地址。

最优的缓存服务器节点(边缘节点):

  • 地理位置:根据用户IP地址,判断哪一个边缘节点距用户最近;
  • 数据内容:根据用户所请求的URL中携带的内容名称,判断哪一个边缘节点上有用户所需内容;
  • 负载均衡:查询各个边缘节点当前的负载情况,判断哪一个边缘节点尚有服务能力。

5. 分配IP地址

全局负载均衡设备再把该边缘节点的IP地址返回给用户。

6. 获取内容

用户设备首先收到的是全局负载均衡设备的IP地址

当用户设备向全局负载均衡设备发送HTTP请求时,它会收到一个最优节点的IP地址,并直接与该节点通信以获取内容

如果请求的内容已经在边缘节点上有缓存(命中缓存):

  • 边缘节点直接将缓存的内容返回给用户,这大大减少了响应时间和带宽消耗。

如果内容没有缓存在边缘节点上(未命中缓存):

  • 边缘节点向源服务器发起请求获取内容。
  • 边缘节点收到内容后,一方面将内容存储到本地缓存以备后续请求使用,另一方面立即将内容发送给用户。

总结⚡️

  1. 用户向本地DNS服务器发起DNS请求

  2. 本地DNS服务器会将域名解析权交给CNAME指向的CDN专用的DNS服务器(重定向到CDN专用DNS服务器)

  3. CDN专用的DNS服务器将CDN的全局负载均衡设备IP地址返回给用户

  4. 全局负载均衡设备会选择一个最优的缓存服务器节点(边缘节点),并获得该边缘节点的IP地址。

  5. 全局负载均衡设备再把该边缘节点的IP地址返回给用户。

  6. 用户设备首先收到的是全局负载均衡设备的IP地址,当用户设备向全局负载均衡设备发送HTTP请求时,它会收到一个最优节点的IP地址,并直接与该节点通信以获取内容


用法

  1. 选择CDN服务提供商

    首先,你需要选择一个CDN服务提供商,如阿里云、腾讯云、Cloudflare、Akamai等。

    不同的服务商可能在价格、全球节点分布、服务质量、控制面板易用性等方面有所不同,根据你的业务需求和预算来选择。

  2. 注册与配置
    注册账户后,按照服务商的指引进行配置。这通常包括:

    • 验证你的域名所有权,
    • 配置源站信息(即你的网站或应用的原始服务器地址)
    • 配置CNAME记录:将域名的CNAME记录指向CDN服务商提供的CNAME地址,完成域名解析。
  3. 配置CDN加速
    在控制台中选择需要加速的资源,如图片、CSS、JS等,并设置缓存策略、过期时间等参数。

    这些设置可以帮助CDN更有效地缓存和分发内容,提高用户访问速度。

  4. 开启HTTPS

    为了保障网站的安全,建议开启HTTPS服务。在控制台中申请SSL证书,并将证书部署到CDN节点上。

  5. 测试与验证
    配置完成后,通过清除DNS缓存和浏览器缓存,确保用户请求能正确路由到CDN节点。

    使用ping命令或者在线工具检查域名是否已经解析到CDN提供的IP地址,然后访问网站,确认内容加载无误且速度有所提升。

  6. 监控和优化
    CDN服务商大多数提供详细的监控和分析工具,可以查看流量统计、命中率、访问速度等数据。根据这些数据,你可以调整缓存策略、优化内容分发规则,进一步提升用户体验。

    根据这些数据,可以进一步优化CDN配置,提高用户访问速度和网站性能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tableau学习2.0版——复习

官网下载链接:https://www.tableau.com/zh-cn/support/releases 学生账户申请链接:https://www.tableau.com/zh-cn/academic/students。直接去学信网下载学籍在线验证作为申请证明。 目录 1、可视化原理 2、基础图表制作 2.1 对比分析(比…

@游戏行业er!MongoDB广州线下沙龙邀您报名!

随着游戏和应用程序的发展,数据变得越来越重要。在为您的下一个游戏选择数据库时,数据库管理者常常会面对灵活性、可扩展性、可靠性、运营效率等问题或挑战。 MongoDB在游戏开发领域有着广泛的应用,灵活数据模型可以存储和处理各种类型的数据…

JPA ENTITY EXTEND

1. Overview Relational databases don’t have a straightforward way to map class hierarchies onto database tables. To address this, the JPA specification provides several strategies: MappedSuperclass – the parent classes, can’t be entitiesSingle Table …

webpack处理js和css模块化导入导出示例:

webpack默认并不能处理js模块化的导入和导出,依赖于ts-loader和babel-loader webpack.config,js module.exports {entry: ./src/index.ts,output: {filename: main.js,},mode: development, // 或者 productionmodule: {rules: [{test: /\.ts/,exclude: /(node_modules)/,use:…

二维平移矩阵 (2D translate matrix)

2D translate matrix 推荐阅读正文推荐阅读 矢量旋转矩阵 正文 之前我们介绍了矢量旋转矩阵的形式,这里我们来介绍一下平移矩阵的形式。比如,我们我们有一个点,其坐标为 (0,1)。那么我们如何操作才能够将这个点沿着 x 轴正方向平移 1 个单位长度呢? 这里我们以向右移动…

vj题单 P4552 [Poetize6] IncDec Sequence

思路: 一次操作:选一个区间[l, r],把这个区间的数都加1或者都减1,可以将求该数列的差分数组b然后来进行该操作 一次操作的两种种情况:(l可以等于r) 1.b[l]1 b[r1]-1 2.b[l]-1 b[r1]1 Q1:…

PHP 提取数组中的特定的值

需求: 前端展示: (1)之前的页面: (2)修改后的页面: 之前接口返回的数据 : 解决办法:提取tags 中的 ’约 的数组 添加到一个新的数组中去 1:一开…

【CPP】多线程并发—— Mutex 和 Lock

#include <iostream> #include <thread> #include <mutex> #include "my_utils.h"std::mutex mtx; // 全局互斥锁 int shared_data 0; // 共享数据 void increment() { for (int i 0; i < 10; i) { std::cout <<"incre…

2024年去除视频水印的5种方法

如果你从事电影剪辑或者视频编辑工作&#xff0c;你经常需要从优酷、抖音、TikTok下载各种视频片段……。 通常这些视频带有水印和字幕。一些免费软件如CapCut、canva、Filmora也会给你制作的视频打上水印&#xff0c;这些水印嵌入在视频内部。 2024年去除视频水印的5种方法 …

Mysql-用户变量的声明与使用

#声明变量 #1.标识符不能以数字开头 #2.只能使用_或$符号&#xff0c;不能使用其他符号 #3.不能使用系统关键字 setuserName刘德华; select userName:刘青云;#将赋值与查询结合 #查询变量、使用变量&#xff0c;匿名的时候建议加上as select userName as 读取到的userName变量…

Golang面向对象编程(二)

文章目录 封装基本介绍封装的实现工厂函数 继承基本介绍继承的实现字段和方法访问细节多继承 封装 基本介绍 基本介绍 封装&#xff08;Encapsulation&#xff09;是面向对象编程&#xff08;OOP&#xff09;中的一种重要概念&#xff0c;封装通过将数据和相关的方法组合在一起…

java JOptionPane 介绍

JOptionPane是Java Swing库中的一个类,用于创建对话框(Dialogs),以便与用户进行交互。它提供了一种简单的方式来显示消息、警告、错误、输入框等。 主要方法: showMessageDialog(Component parentComponent, Object message):显示一个包含消息的对话框。showInputDialog…

2024OD机试卷-手机App防沉迷系统 (java\python\c++)

题目:手机App防沉迷系统 题目描述 智能手机方便了我们生活的同时,也侵占了我们不少的时间。 “手机App防沉迷系统”能够让我们每天合理地规划手机App使用时间,在正确的时间做正确的事。 它的大概原理是这样的: 在一天24小时内,可以注册每个App的允许使用时段一个时间段只…

Java转Kotlin调用JNI方法异常

一、背景 Java调用JNI方法时没有任何问题&#xff0c;但是使用Java转Kotlin以后出现了崩溃异常&#xff1a;A java_vm_ext.cc:597] JNI DETECTED ERROR IN APPLICATION: jclass has wrong type: 校验参数后没有任何变化&#xff0c;经过分析验证找到解决方案 二、原因…

若依生成树表和下拉框选择树表结构(在其他页面使用该下拉框输入)

1.数据库表设计 生成树结构的主要列是id列和parent_id列&#xff0c;后者指向他的父级 2.来到前端代码生成器页面 导入你刚刚写出该格式的数据库表 3.点击编辑&#xff0c;来到字段 祖籍列表是为了好找到直接父类&#xff0c;不属于代码生成器方法&#xff0c;需要后台编…

【XSRP软件无线电】基于软件无线电平台的QPSK频带通信系统设计

目录&#xff1a; 目录&#xff1a; 一、绪论 1.1 设计背景 1.2 设计目的 二、系统总体方案 2.1 专题调研题目 2.2 调研背景 2.3 设计任务解读 2.4 设计原理 2.4.1 原理框图 2.4.2 功能验证 三、软件设计 3.1 程序解读 3.2 程序设计 3.3 仿真结果&#xff1a; 四、程序代码分析…

网络基础-SSH协议(思科、华为、华三)

SSH&#xff08;Secure Shell&#xff09;是一种用于安全远程访问和安全文件传输的协议。它提供了加密的通信通道&#xff0c;使得用户可以在不安全的网络上安全地远程登录到远程主机&#xff0c;并在远程主机上执行命令、访问文件以及传输文件&#xff0c;本篇主要讲解命令执行…

SpringAI集成本地AI大模型ollama(调用篇)非常简单!!

一&#xff0c;前提准备本地ai模型 1&#xff0c;首先需要去ollama官网下载开源ai到本地 网址&#xff1a;Ollama 直接下载到本地&#xff0c;然后启动ollama 启动完成后&#xff0c;我们可以在cmd中执行ollama可以看到相关命令行 2&#xff0c; 下载ai moudle 然后我们需要…

基于C#开发web网页模板流程-登录界面

前言&#xff0c;首先介绍一下本项目将要实现的功能 &#xff08;一&#xff09;登录界面 实现一个不算特别美观的登录窗口&#xff0c;当然这一步跟开发者本身的设计美学相关&#xff0c;像蒟蒻博主就没啥艺术细胞&#xff0c;勉强能用能看就行…… &#xff08;二&#xff09…

【vector】迭代器

Vector的基本数据结构 可以看到end指向的是数组的最后一个元素&#xff1b; 那么在使用函数遍历的时候就要注意这种清理&#xff1b; 比如计算一个数组前5个数字的最小值&#xff1b; vector<int> prices{2,1,4,2,0,52,12};auto iter_min min_element(prices.begin(),pr…