背景

  • 本来是为了深入了解 CDN 的,结果发现前置知识:IP、域名、DNS 都还不算特别熟,所以先写了他们
  • 现在终于来聊一聊 CDN 啦
  • 本文素材均出自:https://www.bilibili.com/video/BV12T4y1P7Fh,动画仍然满分

如何打开一个网站

前面说过了

  1. 浏览器访问域名
  2. DNS 负责解析域名,找到域名对应的 IP 地址
  3. 浏览器访问 IP 地址对应的服务器,渲染响应内容

存在两个问题

问题一

  • 服务器有地理位置
  • 无论是云服务器,还是传统服务器,它都有一个地理位置
  • 如果请求它的设备离它很远,那么它的请求时间肯定会更长
  • 假设同时有很多个设备同时请求,带宽有限的情况下,即使离服务器很近,那请求时间也会被拉长

问题二

  • 服务器稳定性,会小概率出现宕机
  • 假设原始服务器出现宕机问题,会导致网站无法正常访问
  • 如果是小公司,还没有专业的运维人员的话,那么宕机发生的时候可能会无法及时告警

CDN 介绍

全称

Content Delivery Network,内容分发网络

为什么会出现

就是为了解决上述两个问题:限于地理位置、服务器稳定性

场景类比

用过京东网购都知道,为什么京东物流能当天/隔日到?因为它有前置仓、区域仓的仓储配送机制

电商物流进化历程

  • 第一阶段:只有商家仓库,无论在哪购买,都从仓库发货,所以快递时间需要 3-10 天
  • 第二阶段:建立区域仓,在一些关键城市建立区域仓,然后从商家仓库囤点货,当下单购买后,会就近选择区域仓进行发货
  • 第三阶段:建立前置仓,就是京东那种,就在你家旁边建一个仓库,送货速度极快

CDN 其实就是类似第三阶段,让离你最近的服务器发送数据,这样无论在哪访问网站,速度都是杠杠的

CDN 实现原理

一开始已经复习了下是如何打开一个网站的,其实 CDN 跟 DNS 也是有关系的

前提:没有 CDN 的情况下

跟开头讲的顺序一样

  1. 浏览器查询 DNS 服务器域名对应 IP 地址是什么
  2. DNS 服务器返回 IP 地址
  3. 浏览器访问 IP 地址对应的服务器
  4. 服务器返回网站数据给浏览器

添加 CDN 专用解析记录

  • 在域名的 DNS 解析设置中,添加一条 CDN 专用的解析记录
  • 这条解析记录会让域名被解析之后, 会指向一个 CDN 网络专用的处理 DNS 服务器

CDN 专用的 DNS 服务器

  1. 浏览器发送 DNS 查询请求到 DNS 服务器
  2. DNS 服务器会返回 CDN 专用的处理 DNS 请求的服务器的 IP 地址给浏览器(上面说的 CDN 专用解析记录)
  3. 浏览器拿到 IP 地址后访问 CDN 专用 DNS 服务器
  4. 然后呢,CDN 专用 DNS 服务器就会返回 CDN 负载均衡服务器的 IP 地址
  5. 浏览器拿到 IP 地址后访问 CDN 负载均衡服务器
  6. CDN 负载均衡服务器会根据浏览器的网络地址,在 CDN 网络中返回最适合的 CDN 服务器的 IP 地址,可能是没什么人用的服务器,也可能是比较近的服务器

CDN 负载均衡服务器的作用

它会给请求设备分配合适的 CDN 服务器的 IP 地址

获取网站数据

  1. 浏览器拿到 CDN 服务器的 IP 地址之后,就会访问它
  2. 假设第一个 CDN 服务器没有需要的网站文件(缓存中没有),就会去 CDN 网络中的上层 CDN 服务器中拉取
  3. 如果上层 CDN 服务器没有还会继续往上层找
  4. 如果所有上层 CDN 服务器都没有找到,就会去源站中拉取
  5. 拉取成功之后,就会在刚刚经过的所有 CDN 服务器中缓存这些网站文件
  6. 最后第一个 CDN 服务器会将网络文件发送给浏览器

源站 IP

  • 浏览器需要访问的域名的网站服务器的 IP 地址
  • 在开通 CDN 的时候,就需要在 CDN 后台设置源站 IP
  • 网站的文件就是放在源站上的,比如静态资源文件、视频、音频

CDN 服务器的缓存机制

  • 通过 CDN 服务器的缓存机制,这样下次其他设备要去访问 www.bilibili.com 的时候,就能直接从 CDN 服务器的缓存中拉取到对应的网站文件了
  • 不需要访问源站的话,可以减少源站压力,还能加快请求速度

CDN 服务器的稳定性

  • CDN 的缓存机制除了能让用户快速打开一个网站,还可以提高网站的稳定性
  • 假设源站宕机,或者 CDN 服务器节点宕机了之后,CDN 网络中还有其他 CDN 服务器可用,这样访问网站就可以从可用的 CDN 服务器上拉取网站文件,不至于访问不了网站

待更新更深入的内容

 

详解 CDN 加速的更多相关文章

  1. 详解HTTPS加速原理

    HTTPS是什么? http叫超文本传输协议,使用TCP端口80,默认情况下数据是明文传送的,数据可以通过抓包工具捕获到,因此在interner上,有些比较重要的站点的http服务器需要使用PKI(公 ...

  2. PHP写在线视频直播技术详解

    2016年7月22日 22:26:45 交流QQ:903464207 本文会不断更新 废话一句,如果你要做高性能服务器服务,请去读底层的东西 http tcp/ip socket 了解基础协议,你对如 ...

  3. Signalr系列之虚拟目录详解与应用中的CDN加速实战

    目录 对SignalR不了解的人可以直接移步下面的目录 SignalR系列目录 前言 前段时间一直有人问我 在用SignalR 2.0开发客服系统[系列1:实现群发通讯]这篇文章中的"/Si ...

  4. 怎么看网站是否开启CDN加速?测试网站全国访问速度方法详解

    注意域名,动静分离的网站,只对静态文件的域名做了cdn 怎么看网站有没开启CDN? 要看一个网站是否开启CDN,方法很简单,只要在不同的地区ping网址就可以,比如在山东济南ping www.jb51 ...

  5. 《CDN技术详解》 - CDN知多少?

    开发时间久了,就会接触到性能和并发方面的问题,如果说,在自己还是菜鸟的时候完全不用理会这种问题或者说有其他的高手去处理这类问题,那么,随着经验的丰富起来,自己必须要独立去处理了.或者,知道思路也行,毕 ...

  6. CDN学习笔记二(技术详解)

    一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同 ...

  7. CDN技术详解及实现原理

    CDN技术详解 一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精 ...

  8. CDN技术详解笔记

    1.影响网络传输的四个因素(1)“第一公里”:网站服务器接入互联网的链路所能提供的带宽.(2)“最后一公里”:用户接入带宽.(3)对等互联关口:不同网络之间的互联互通带宽.(4)长途骨干传输:首先是长 ...

  9. 让 CDN 更省流量的 Brotli 算法详解

    早年,我还是学生的时候,时常会鼓捣自己的个人网站,其中最困扰我的问题就是源站服务器易崩溃.作为学生,一方面我没有足够的钱购买高质量的服务器,另一方面一年的流量费用算下来也挺贵的,要花掉我不少的生活费. ...

随机推荐

  1. 驰骋CCFlow开源工作流程引擎如何设置PDF打印

    前言 经常有驰骋CCFlow爱好者朋友提问关于打印相关问题.在这篇博文中大家介绍一下工作流引擎CCFlow的HTML打印和PDF打印,针对Java版本和.NET版本有不同的操作步骤,包括开关设置.水印 ...

  2. [bug] Nginx:src/os/unix/ngx_user.c:36:7: 错误:‘struct crypt_data’没有名为‘current_salt’的成员

    参考 https://blog.csdn.net/yu_pan_love_cat/article/details/103035513 https://www.cnblogs.com/hxlinux/p ...

  3. Linux 实验楼

    网络上的免费在线 Linux 实验系统 Wu Zhangjin 创作于 2014/01/12 打赏 by falcon of TinyLab.org 2014/01/12 这里收集各类可以直接在线访问 ...

  4. [Python] 命名空间&作用域

    Python的类语句不会创建实例 类会创建命名空间,通过对象访问类的属性和方法 类不会创建作用域,对方法和属性的引用必须加以限定(如在方法中必须通过self引用实例的属性) class My1(): ...

  5. Deepin/Uos系统更新源失败。提示:E: 仓库 “http://packages.chinauos.cn/uos eagle InRelease” 没有数字签名

    Deepin/Uos系统更新源失败.提示:E: 仓库 "http://packages.chinauos.cn/uos eagle InRelease" 没有数字签名 n大橘为重n ...

  6. 《SystemVerilog验证-测试平台编写指南》学习 - 第3章 过程语句和子程序

    <SystemVerilog验证-测试平台编写指南>学习 - 第3章 过程语句和子程序 3.1 过程语句 3.2 任务.函数以及void函数 3.3 任务和函数概述 3.4 子程序参数 3 ...

  7. Scala 中的可变(var)与不可变(val)

    引言 Scala 中定义变量分为 var(可变变量)和 val(不可变变量) Scala 中集合框架也分为可变集合和不可变集合.比如 List(列表) 和 Tuple(元组)本身就是不可变的,set ...

  8. 电路调试检测维修总结积累 20181015 板子:3060-A

    今天在检修一块3060-A电路板时 发现   3.3V烫 但是3.3V路上的电容并没有短路 于是拆单片机   拆RS232EN  拆  FM24V 最后发现  原来是  1117-3.3  处的33U ...

  9. 3.1 cat:合并文件或查看文件内容

    cat 命令 可以理解为英文单词concatenate的缩写,其功能是连接多个文件并且打印到屏幕输出,或者重定向到指定的文件中.此命令常用来显示单个文件内容,或者将几个文件内容连接起来一起显示,还可以 ...

  10. element-ui 的el-select如何不显示value,显示value对应的label值

    有时根据需要,我们根据v-model的值绑定option, 想要的效果: 实际的效果: 原因: value的格式存在问题,数据库读取到的数据不一定为number类型,需要手动转换. 第一种 <t ...