18 CDN详解

1、理解CDN
1.CDN 和电商系统的分布式仓储系统一样,就近发货给客户(客户端),所以,必然是提前在仓库中存储了某些商品.
2.CDN最擅长的是缓存静态数据,比如电商系统的热点静态页面,秒杀场景的页面等.

问题:向生鲜这种东西,如果提前存储在了仓库中,没有人够吗咋整?

2、实现的过程
1.全球有这么多的数据中心,无论在哪里上网,临近不远的地方基本上都有数据中心。
  可以在这些数据中心里部署几台机器,形成一个缓存的集群来缓存部分数据,那么用户访问数据的时候,就可以就近访问了。
2.边缘节点:
  这些分布在各个地方的各个数据中心的节点,就称为边缘节点。
3.区域节点:
  边缘节点数目比较多,但是每个集群规模比较小,不可能缓存下来所有东西,因而可能无法命中,所以在边缘节点之上。设置了区域节点,区域节点规模更大,缓存的数据更多,命中的概率也会更大。
4.中心节点:
  在区域节点之上,规模更大,缓存数据更多。如果还不命中,就只好回源网站访问了。
3、CDN分发系统架构

在这里插入图片描述

1.CDN 系统的缓存,是一层一层的,能不访问后端真正的源,就不访问。这也是电商网站物流系统的思路
4、客户端如何找到相应的边缘节点?
1.CDN 分发网络也是一个分布在多个区域、多个运营商的分布式系统,用DNS域名解析的相同的思路来选择最合适的边缘节点。

在这里插入图片描述

1. 在没有CDN的情况下,权威DNS服务器解析后,会直接返回ip地址。
2. 有了CDN之后,你访问www.baidu.com的时候,在 .com 这个权威 DNS 服务器上,会设置一个 CNAME 别名,指向另外一个域名 www.baidu.cdn.com,返回给本地 DNS 服务器.
3. 当本地 DNS 服务器拿到这个新的域名时,需要继续解析这个新的域名,再访问的时候就是xx.cdn.com 的权威 DNS 服务器了,这是 CDN 自己的权威DNS 服务器。
4. 在这个服务器上,还是会设置一个 CNAME,指向另外一个域名,也即 CDN 网络的全局负载均衡器。
5. 本地 DNS 服务器去请求 CDN 的全局负载均衡器解析域名,全局负载均衡器会为用户选择一台合适的缓存服务器提供服务。
   选择的依据:
     根据用户 IP 地址,判断哪一台服务器距用户最近;
     用户所处的运营商
     根据用户所请求的 URL 中携带的内容名称,判断哪一台服务器上有用户所需的内容;
     查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。
   基于以上这些条件,进行综合分析之后,全局负载均衡器会返回一台缓存服务器的 IP 地址。
6. 本地 DNS 服务器缓存这个 IP 地址,然后将 IP 返回给客户端,客户端去访问这个边缘节点,下载资源。
   //缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地.

CDN 可以缓存的内容

像电商系统的仓储点,适合存储一些不易过期的日用品如纸,家具家电等,而不适合缓存一些生鲜类的产品,对应的就是一些静态页面,图片等。
在这里插入图片描述
从上图的接入层的缓存架构Varnish来看,我们将大部分静态资源的访问拦截在边缘,而CDN则是更厉害了,直接缓存在了离用户更新的地方.这样访问性能更好,时延越低。

特殊的CDN缓存:流媒体

  1. 流媒体往往是连续的,因而可以进行预先缓存的策略,是采取主动推送的方式,因为流媒体数据量大,如果出现回源,压力会比较大。所以,将热点数据主动推送到边缘节点
  2. 对于流媒体来讲,很多 CDN 还提供预处理服务,也即文件在分发之前,经过一定的处理。
    例如
    将视频转换为不同的码流,以适应不同的网络带宽的用户需求;就是我们常见的,超清、标清、流畅

防盗链问题
因为视频是要花大价钱买版权的,为了挣点钱,收点广告费,如果流媒体被其他的网站盗走,在人家的网站播放,那损失可就大了。
解决方案:HTTP 头的 refer 字段, 当浏览器发送请求的时候,一般会带上 referer,告诉服务器是从哪个页面链接过来的,服务器基于此可以获得一些信息用于处理。如果 refer 信息不是来自本站,就阻止访问或者跳到其它链接。
refer 的机制相对比较容易破解,所以还需要配合其他的机制

时间戳防盗链

  1. CDN 的管理员可以在配置界面上,和 CDN 厂商约定一个加密字
    符串。
  2. 客户端取出当前的时间戳,要访问的资源及其路径,连同加密字符串进行签名算法得到一个字符串,然后生成一个下载链接,带上这个签名字符串和截止时间戳去访问 CDN。
  3. CDN 服务端,根据取出过期时间,和当前 CDN 节点时间进行比较,确认请求是否过期。然后 CDN服务端有了资源及路径,时间戳,以及约定的加密字符串,根据相同的签名算法计算签名,如果匹配则一致,访问合法,才会将资源返回给客户。
5、动态 CDN

回到之前的仓库中无法缓存生鲜产品的问题,对应的就是动态数据
两种常用模式
(1)边缘计算模式:将动态数据的逻辑计算和存储,放在相应的边缘节点,定时从源数据同步存储数据,然后在边缘节点进行计算。
(2)路径优化模式:数据不是在边缘计算生成的,而是在源站生成的,但
是数据的下发则可以通过 CDN 的网络,对路径进行优化。因为 CDN 节点较多,能够找到离源站很近的边缘节点,也能找到离用户很近的边缘节点。中间的链路完全由 CDN 来规划,选择一个更加可靠的路径,使用类似专线的方式进行访问。

tcp优化

  1. 问题:常用的 TCP 连接,在公网上传输的时候经常会丢数据,导致 TCP 的窗口始终很小,发送速度上不去。
  2. 根据前面的 TCP 流量控制和拥塞控制的原理,在 CDN 加速网络中可以调整 TCP 的参数,使得TCP 可以更加激进地传输数据。
  3. 通过多个请求复用一个连接,保证每次动态请求到达时。连接都已经建立了,不必临时三次握手或者建立过多的连接,增加服务器的压力。另外,可以通过对传输数据进行压缩,增加传输效率。

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

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

相关文章

tqdm学习

from tqdm import tqdmepochs 10 epoch_bar tqdm(range(epochs)) count 0 for _ in epoch_bar:count count1print("count {}".format(count))print(_)每次就是一个epoch

磁盘空间占用巨大的meta.db-wal文件缓存(tracker-miner-fs索引服务)彻底清除办法

磁盘命令参考本博客linux磁盘空间满了怎么办. 问题: 磁盘空间被盗 今天瞄了一下我的Ubuntu系统盘, nftdiggernftdigger-Ubuntu:~$ df -h 文件系统 容量 已用 可用 已用% 挂载点 udev 16G 0 16G 0% /dev tmpfs 3.2G 1.9…

【今日文章】:如何用css 实现星空效果

【今日文章】:如何用css 实现星空效果 需求实现tips: 需求 用CSS 实现星空效果的需求: 屏幕上有“星星”,且向上移动。移动的时候,动画效果要连贯,不能出现闪一下的样子。 实现 这里我们需要知道,“星星”是…

简单剖析程序的翻译过程!

本文旨在讲解一段源程序如何翻译成机器所能识别的二进制的命令的,希望通过本文,能使读者对一段程序的翻译过程有进一步的认识! 这里首先要介绍的是一段程序从编写完成到执行需要经过以下几个步骤! 1.预处理 首先讲到的是预处理&…

UI设计软件有哪些好用和免费的吗?

在我们分享五个有用的原型工具之前,完成原型,将优化界面,这次是UI设计师的任务,UI设计软件对设计师非常重要,UI设计工具是否使用直接影响最终结果,然后有人会问:UI界面设计使用什么软件&#xf…

IP-guard WebServer RCE漏洞复现

0x01 产品简介 IP-guard是由溢信科技股份有限公司开发的一款终端安全管理软件,旨在帮助企业保护终端设备安全、数据安全、管理网络使用和简化IT系统管理。 0x02 漏洞概述 漏洞成因 在Web应用程序的实现中,参数的处理和验证是确保应用安全的关键环节…

大数据毕业设计选题推荐-设备环境监测平台-Hadoop-Spark-Hive

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

基于工业智能网关的汽车充电桩安全监测方案

近年来,我国新能源汽车产业得到快速发展,电动车产量和销量都在持续增长,不仅国内市场竞争激烈,而且也远销海外,成为新的经济增长点。但与此同时,充电设施的运营却面临着安全和效率的双重挑战。 当前的充电桩…

node插件MongoDB(四)—— 库mongoose 的文档操作使用

文章目录 前言(1)问题:安装的mongoose 库版本不应该过高导致的问题(2)重新安装低版本 一、插入文档1. 代码2. node终端效果3. 使用mongo.exe查询数据库的内容 二、删除文档1. 删除一条2. 批量删除3. 代码 前言 &#…

Python--列表及其应用场景

1.为什么需要列表 思考:有一个人的姓名(laowang)怎么书写存储程序? 用 变量。如:name laowang 但是,如果要记录很多人的名字,怎么办? 思考: 如果一个班级100位学生,每个人的…

Vue.js 学习总结(3)—— vite 打包图片时报错 Rollup failed to resolve import...

问题 图片依赖: Vite 打包前端项目时图片无法引入,报如下错误: ERROR [vite]: Rollup failed to resolve import "%7BlibeiDanmuKongmu%7D" from "D:/java/workspace/jeecgboot-vue3/src/views/funeral/tombInfo/area.vue?…

ros自定义消息包无法编译生成.h文件的问题解决

ros自定义消息包无法编译生成.h文件的问题解决 想要创建一个ROS功能包专门存放自己自定义的消息,想将这些消息都生成.h,可以由别的功能包来调用。 但是参照网上的诸多帖子未能解决,例如 https://blog.csdn.net/feidaji/article/details/10360…

yolov5 通过视频进行目标检测

打开yolov5-master文件夹,可以看到一个名为data的文件夹,在data中创建一个新的文件夹,命名为videos。 打开yolov5-master中的detect.py可以看到一行代码(大概在245行左右)为 parser.add_argument(--source, typestr,…

逐次变分模态分解(Sequential Variational Mode Decomposition,SVMD)(附代码)

代码原理 逐次变分模态分解(Sequential Variational Mode Decomposition,SVMD)是一种用于信号处理和数据分析的方法。它可以将复杂的信号分解为一系列模态函数,每个模态函数代表了信号中的一个特定频率成分。SVMD的主要目标是提取…

ZYNQ_project:key_breath

[Synth 8-327] inferring latch for variable led_breath_reg ["C:/Users/warrior/Desktop/ZYNQ/pl/key_breath/rtl/led_breath.v":66] 因为在组合逻辑中,用了非阻塞赋值的方式赋值信号。 组合逻辑自己给自己赋值会产生组合回环,输出不稳定。 …

Android 11.0 禁止弹出系统simlock的锁卡弹窗功能实现

1.前言 在11.0的系统rom产品定制化开发中,在关于定制sim卡定制机的一款产品中,需要实现simlock锁卡功能,在系统实现锁卡功能以后,在开机的过程中,或者是在插入sim卡 后,当系统检测到是禁用的sim卡后,就会弹出simlock锁卡弹窗,要求输入puk 解锁密码,功能需求禁用这个弹…

狮子鱼社区团购小程序V18.9全开源独立版+小程序前端 安装教程

狮子鱼社区团购商城系统小程序V18.9独立开源版,该系统一直开源本身也非常完善,此系统拿来即用非常方便,同上一版一样播播资源特别优化很多细节首页美化了下,如小程序端授权窗口美化了下,该版本用户授权接口正常。功能测…

Linux本地部署1Panel现代化运维管理面板并实现公网访问

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…

基于CLIP的图像分类、语义分割和目标检测

OpenAI CLIP模型是一个创造性的突破; 它以与文本相同的方式处理图像。 令人惊讶的是,如果进行大规模训练,效果非常好。 在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D…

kubernetes集群编排(9)

目录 helm 部署helm 封装chart包 上传chart到OCI仓库 部署wordpress博客系统 helm部署storageclass helm部署ingress-nginx helm部署metrics-server kubeapps 更新 helm 部署helm 官网: Helm | 快速入门指南 https://github.com/helm/helm/releases [rootk8s2 ~]# t…
最新文章