CDN是什么?CDN能为我们做什么?

CDN 概念

CDN,全称为 Content Delivery Network,意为内容分发网络,是一种通过在全球各地部署服务器节点来加速内容传输的网络架构。

传统上,当用户访问一个网站或应用时,请求会直接发送到托管网站的服务器。但是,由于网络延迟和带宽限制等因素,用户可能会面临加载速度慢的问题,尤其是当用户与服务器之间的物理距离较远时。

要解决这个问题,可以将服务器备份多个到世界各地,但这也有一个问题,部署/维护服务器的成本是十分高昂的。在现实生活中,有一些服务商就会在世界各地部署节点服务器,这些服务器就形成了一种虚拟网络,这个网络就是CDN-内容分发网络。

在这个网络中会有多台边缘服务器为用户服务,这里的边缘的服务器是指离用户最近的服务器,CDN的作用就是帮服务器近距离向用户分发网页的内容

CDN 负责分发网页上的内容,这些内容可以分为静态内容动态内容

静态内容:

静态内容指的是在服务器上保存的固定不变的文件,如图片、CSS 文件、JavaScript 文件、HTML 页面等。这些文件在被访问时不需要进行任何处理或计算,只需要直接传输给用户即可。静态内容一般由网站开发者提前准备好,并存储在服务器上的特定位置。

动态内容:

动态内容则是根据用户的请求或其他条件在服务器上实时生成的内容。例如,用户登录后显示的个人信息、评论内容、购物车信息等属于动态内容。动态内容通常需要从数据库或其他资源中获取相关数据,并进行一些计算或处理后才能生成最终的响应。

CDN 主要用于加速静态内容的传输,通过将静态文件缓存在全球各地的节点上,在用户请求时直接从最近的节点获取内容,提高访问速度。对于动态内容,由于其实时生成的特性,无法像静态内容一样进行缓存和分发。因此,CDN 通常只用于加速静态资源的传输,而动态内容的传输仍然依赖于原始服务器的处理能力和网络延迟。

当然静态内容也不是一直保存在 CDN 里面,源服务器发送文件给 CDN 时可以在HTTP头部的cache-control中设置文件的缓存形式,这样 CDN 就知道哪些文件要缓存,缓存多久。

CDN 分发的流程

CDN 中没有是网页的源内容的,所以需要源服务器提前把网页的源内容发给CDN ,这一步叫 Push,这样当世界各地的用户访问网页的时候,就近的 CDN 服务器就会把静态内容提供给用户,不需要每次都去向源服务器发送请求。

如果源服务器没有提前把网页的内容发给 CDN ,那么当用户访问网页时,CDN 就得向源服务器索取对应的静态内容,这一步叫 Pull,源服务器还可以让 CDN 做备份,CDN 得到内容后再提供给用户。因为有了备份,其他同时做出请求的用户也可以马上拿到网页内容。

CDN 的存在相当于在用户和源服务器中间增加了一道墙,用户发送请求不再直接发送给源服务器了,而是必须通过 CDN 来进行沟通,这样一来,源服务器就不用担心DDos攻击了。

现在源服务器是不用担心攻击的问题了,但是如果CDN承受不了攻击宕机了怎么办?

为了避免这个问题,CDN 服务商会部署多台 CDN 服务器在各个地方,然后监控这些服务器的负载情况,如果某一台服务器超载了,就会把用户的请求转移到没有超载的 CDN 服务器,目的是为了平均分配网络的流量,也叫负载均衡,这里用到了任播这一技术。

除了上述所说的防护措施,CDN 还会采用TLS/SSL证书来给网站进行保护。

CDN 的加速功能

CDN 的加速功能主要通过以下几个原理来实现:

  • 内容缓存: CDN 会将静态内容(如图片、CSS 文件、JavaScript 文件等)缓存到分布在全球各地的服务器节点上。当用户请求这些内容时,CDN 会尽可能地从离用户更近的节点获取内容,减少了网络传输的时间和延迟。
  • 就近访问: CDN 会根据用户的地理位置,选择离用户最近的服务器节点来响应请求。这样一来,用户可以从距离更近的节点获取内容,减少了数据传输的距离和网络延迟。
  • 负载均衡: CDN 可以根据服务器节点的负载情况和用户请求的流量分布,动态地将用户请求分配到不同的节点上,从而减轻了单个服务器的压力,提高了整体的响应速度。
  • 预加载和预热: 针对热门内容或即将大量请求的内容,CDN 可以提前将这些内容预先加载到服务器节点上,以便在用户请求到来时能够立即响应,减少了获取内容的时间。

除了上面提到几种实现加速的方法,CDN 还有一种实现加速的方法,因为网络请求的内容无非就是各种文件,根据这一点,CDN 会帮你把文件最小化或者压缩文档 。

例如这一段代码,可以看到为了方便程序员阅读和维护,代码里面夹杂了很多的空格。

function printTest () {
    return "Hello World"
}

CDN 会帮你把代码文件中的空格去掉,以节省文件的大小,去掉空格的代码如下。

function printTest () {return "Hello World"}

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

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

相关文章

[前端][死循环]问题发现[easyui]

文章目录 问题描述问题细节 解决思路综合分析 解决办法 问题描述 页面点击按钮跳转弹窗页面回显出数据 此弹窗页面中有年份,类型等,当选中年份/类型会重新触发回显方法(onSelect 中调用方法),回显对应年份/类型得数据 问题细节 最开始调试…

linux小记(1)

基本概念:不依靠扩展名来区分文件类型 好处:除了文本文件其他所有windows文件都无法在Linux下运行,包括病毒木马。 坏处:所有的软件都需要对linux单独开发 习惯用后缀来区分文件,方便管理。 -压缩包:*.…

Springboot配置MySQL数据库

Springboot配置MySQL数据库 一、创建springboot项目&#xff0c;并添加如下依赖 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope> </dependency>二、在applica…

从事测绘地信,你需要这些插件、软件、小工具、图源...

特别声明&#xff0c;本篇是来自公众号GIS前沿的资源&#xff0c;看着比较好&#xff0c;特别给大家推荐。加粗样式 今天&#xff0c;我们又来汇总了一些工作中实用的插件、小工具、数据等等&#xff0c;小助手又来帮你提高工作效率了****。 因为小助手每年都会总结一次&…

【网站项目】308学生档案管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

UOS 20 安装redis 7.0.11 安装redis 7.0.11时 make命令 报错 /bin/sh: cc: command not found

UOS 20 安装redis 7.0.11 1、下载redis 7.0.112、安装redis 7.0.113、启动停止redis 7.0.114、安装过程问题记录 UOS 20 安装redis 7.0.11 安装redis 7.0.11时 make命令 报错 /bin/sh: cc: command not found、zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such fil…

cuda python torch 虚拟环境配置

以下是Pytorch和CUDA对应的版本 以下是Pytorch和Python对应的版本 检查cuda与Python版本是否匹配 import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.empty(3,4,devicecuda))cuda 删除cuda conda uninstall cudatoolkit --forceconda u…

MySQL的初学者教程—Navicat的基本操作方法

MySQL的初学者教程—Navicat的基本操作方法 1、运行Navicat 双击桌面的Navicat 12 for MySQL。 2、新建MySQL连接 点击【测试连接】。 zyyMySQL的连接创建成功&#xff01; 3、新建数据库 4、新建表 点击【保存】 表【usermanage】建好了。 点【usermanage】的鼠标右键&#…

基于springboot实现流浪动物救助网站系统项目【项目源码+论文说明】

基于springboot实现流浪动物救助网站系统演示 摘要 然而随着生活的加快&#xff0c;也使很多潜在的危险日益突显出来&#xff0c;比如在各种地方会发现很多无家可归的、伤痕累累的、可怜兮兮的动物&#xff0c;当碰到这种情况&#xff0c;是否会立马伸出双手去帮助、救助它们&…

Golang 开发实战day02 - Print Formatting

Golang 教程02 - Print&#xff0c;Formatting Strings Go语言提供了丰富的格式化字符串功能&#xff0c;用于将数据格式化为特定格式的字符串。本课程将详细介绍Go语言中Print和Formatting Strings的用法&#xff0c;并提供代码示例供大家参考。 Print 类型及使用 1.Print …

⭐北邮复试刷题2369. 检查数组是否存在有效划分__DP (力扣每日一题)

2369. 检查数组是否存在有效划分 给你一个下标从 0 开始的整数数组 nums &#xff0c;你必须将数组划分为一个或多个 连续 子数组。 如果获得的这些子数组中每个都能满足下述条件 之一 &#xff0c;则可以称其为数组的一种 有效 划分&#xff1a; 子数组 恰 由 2 个相等元素…

基于Springboot的足球俱乐部管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的足球俱乐部管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍: 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff…

【JavaEE】_Spring MVC项目使用数组与集合传参

目录 1. 使用数组传参 1.2 传递单个参数 1.3 传递多个名称相同的参数 1.3.1 关于urlencode 2. 使用集合传参 1. 使用数组传参 创建一个Spring MVC项目&#xff0c;其中 .java文件内容如下&#xff1a; package com.example.demo.controller;import com.example.demo.Per…

【快速上手QT】07-对话框QDialog

QDialog 今天讲一个我们这个系列的第一篇就提到的东西&#xff1a;QDialog。 相信经过前几篇的学习&#xff0c;大家应该是能够通过QT助手来对QDialog有个初步的了解。 我们就直接来测试一下。 #include "Zhetu.h"#include <qdebug.h> #include <QPushBu…

MySQL从入门到实战

MySQL从入门到实战 1.连接数据库 在操作数据库之前&#xff0c;需要连接它&#xff0c;输入命令&#xff1a;mysql -u用户名 -p密码。 2.创建数据库 创建完数据库之后我们可以通过show databases;命令查看MySQL中已存在的数据库。[请注意&#xff1a;数据库名区分大小写。] 3…

异常-Exception

异常-Exception Java语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”。&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; 执行过程中所发生的异常事件可分为两大类 1&#xff09;Error(错误)&#xff1a;Java虚拟机无法解决的严重问题。如JVM系统…

2024.3.5每日一题

LeetCode 到达目的地的方案数 题目链接&#xff1a;1976. 到达目的地的方案数 - 力扣&#xff08;LeetCode&#xff09; 题目描述 你在一个城市里&#xff0c;城市由 n 个路口组成&#xff0c;路口编号为 0 到 n - 1 &#xff0c;某些路口之间有 双向 道路。输入保证你可以…

INFINI Labs 产品更新 | Easysearch 1.7.1发布

INFINI Labs 产品又更新啦~&#xff0c;包括 Console&#xff0c;Gateway&#xff0c;Agent 1.23.0 和 Easysearch 1.7.1。此次版本重点修复历史遗留 Bug 、网友们提的一些需求等。以下是本次更新的详细说明。 INFINI Console v1.23.0 INFINI Console 是一款非常轻量级的多集…

分享一个完全免费的GPT4站点,gpts也可以用

给大家分享一个完全免费的GPT4站点&#xff0c;gpts也可以用点击链接可用

低代码工具APEX的入门使用(未包含安装)

第一次使用APEX是2019年&#xff0c;这个技术成名已久只是我了解的比较晚。请看Oracle ACE的网站&#xff0c;这就是用APEX做的。实际上有一次我看O记的人操作他们的办公流程&#xff0c;都是用APEX做的。 那一年&#xff0c;我用APEX做了一个CMDB的管理系统。那时候还没有流行…