CDN,内容分发网络,是大多数互联网业务里必不可少的部分,但大多数互联网从业人员不是特别清楚CDN究竟是什么,以及它可以为我们做哪些事情。

我们还是从之前介绍的《不同的人看到的直播为什么不一样?》这篇文章切入,讲讲CDN是什么。

从直播说起

 
图片发自简书App

还记得这个图吧,直播的主播通过自己的手机把“视频图”发给了观众,观众收到后,在APP里把每个图显示出来,形成了视频。现实的情况是,一个主播不可能只为一个观众服务,可能有很多个观众需要观看,如果是3个观众,那么就会是这样了:

 
图片发自简书App

图里的方式是主播把相同的数据同时传给3个不同的观众,这当然是非常愚蠢的方式,同样的数据被传了3次,主播端的瓶颈非常明显,比如有1000个观众同时观看的时候,主播端根本无法承担这么多的数据传输。

第一台服务器出现了

所以呢,很容易想到的方法是,主播把数据传给一个中间服务器,由服务器充当把数据发给不同用户的角色,也就是这样(图片1-6我们先用“数据”代替了):

 
图片发自简书App

这样的话,就用了性能强大的服务器来代替了主播传输数据的工作,给服务器提出的要求是:

第一,能够接收来自主播的传输数据;第二,能够把数据下发到观众APP.于是,服务器这时候便被定义了两个身份,第一,推流节点(接收来自主播端的上行推流);第二,分发节点(把视频流分发给不同的观众)。这就是简单的推流和分发概念。

由于服务器的强大能力,它不甘心只把数据接收过来再分发下去,而是要干更多的事情。比如说,给主播的脸上做个特效、给直播画面上加上公司的logo水印、或者是担心有主播直播违(hao)禁(kan)的画面,在服务器上做个鉴黄等等吧。这时候,服务器的定义有发生了改变,它被称为了“流媒体处理中心”。

观众数进一步增大会怎样?

服务器也是有瓶颈的,例如,通常服务器的网卡是1G的,一路直播视频的带宽需求是1M左右,不考虑别的因素,一台服务器的网卡最多可以同时分发1000路直播就达到瓶颈了。那么,如果有3000个观众观看的时候,怎么办?

当然,我们可以放3个服务器嘛,每个服务器分发1000路,总共就3000路了。于是就变成了这样:

 
图片发自简书App

又发现问题了,主播又要向服务器1、2、3分别发送3份数据了,按照之前的思路,我们可以这么来优化:在服务器1、2、3之前,放一个服务器-0,它的作用是接收主播推流,再把数据交给服务器1、2、3.由于服务器1、2、3给1000名观众分发的数据都是一样的,所以呢,他们就把数据在自己服务器上存储了一份。

 
图片发自简书App

概念:负载均衡、CDN缓存、回源、就近原则

在这样的架构下,会延伸出这样的几个概念:

当观众人数不太多的时候,例如总共只有1000人,那么是选择让某一台服务器服务这1000人,还是3台服务器分担1000人,还是2台?机器也会有新旧之分,老机器只能抗800数量,那要怎么来分配呢?等等问题。这里就需要有一个策略来做资源的分配。这个策略叫做:负载均衡。

因为观众看到的数据都是一样的,所以呢,数据会在服务器1、2、3上都存储一份。这个概念叫做:CDN缓存。

当分配到服务器1的第一个观众进入时,服务器1是没有存储数据的,它会向服务器-0获取数据,这个过程叫做:回源;相应的,服务器-0被称为:源站;观众请求的数据如果由CDN缓存提供,叫做缓存命中,所有用户请求的缓存命中比例叫做缓存命中率,它是衡量CDN质量的关键指标。

一名新进入的观众会被分配到哪一台服务器上呢?理论上,这台服务器距离用户的网络链路越短、不跨网,数据的传输的稳定性就越好,这个叫做:就近原则。

跨地区、多运营商覆盖的CDN

由于就近原则的存在,为了满足全国甚至全世界不同地方的人,那我们就需要把服务器分布在不同的地区。又由于不同的网络运营商之间的网络传输会有稳定性问题,那么就需要在不同的网络运营商里也放置服务器,于是,一个CDN网络就成型了:

 
图片发自简书App

随着规模越来越大,例如现在的PP云,就变成了这样:

 
图片发自简书App

CDN,中文名称是内容分发网络,可以用来分发直播、点播、网页静态文件、小文件等等,几乎我们日常用到的互联网产品都是有CDN在背后提供支持。现在有很多公司在提供云服务,这是在CDN的基础上,提供了更丰富的一站式接入的云服务能力。例如PP云服务为客户提供直播、点播、静态文件、短视频等多种云服务和CDN加速能力。本文是用比较抽象的方式为大家介绍了CDN是什么,希望可以有所帮助。

https://www.jianshu.com/p/57433bc34659

CDN是什么鬼的更多相关文章

  1. 什么是 CDN(超形象)

    原文地址:https://blog.csdn.net/lu_embedded/article/details/80519898 618电商节.双十一购物狂欢节,到底是什么在支撑数以万计的秒杀活动?这就 ...

  2. 【原】http缓存与cdn相关技术

    摘要:最近要做这个主题的组内分享,所以准备了一个星期,查了比较多的资料.准备的过程虽然很烦很耗时间,不过因为需要查很多的资料,因此整个过程下来,对这方面的知识影响更加深刻.来来来,接下来总结总结 一 ...

  3. cdn与http缓存

    http缓存与cdn相关技术   摘要:最近要做这个主题的组内分享,所以准备了一个星期,查了比较多的资料.准备的过程虽然很烦很耗时间,不过因为需要查很多的资料,因此整个过程下来,对这方面的知识影响更加 ...

  4. http缓存与cdn相关技术

    阅读目录 一 http缓存 二.Http缓存概念解析 三.cdn相关技术 摘要:最近要做这个主题的组内分享,所以准备了一个星期,查了比较多的资料.准备的过程虽然很烦很耗时间,不过因为需要查很多的资料, ...

  5. 预防cdn链接失效,无缝切换本地文件

    如今的前端项目追求的不仅仅是能用能看的程度,而是愈发追求项目的性能,对用户体验的影响.而现在的开发工具在性能优化方面也替我们做很大一部分的工作,想必大家对CDN的使用都是轻车熟路了,但是大家有没有考虑 ...

  6. HTTP缓存和CDN缓存

    一 http缓存 1.1缓存的分类: http中具有缓存功能的是:1.浏览器缓存.  2.缓存代理服务器. 1.2 什么是缓存: http缓存的是指:当Web请求抵达缓存时, 如果本地有“已缓存的”副 ...

  7. 阿里云 OSS 如何设置防盗链, 上个月图床流量耗费50G+,请求次数10W+,什么鬼?

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  8. 百度MIP移动页面加速——不只是CDN

    MIP是用CDN做加速的么?准确答案是:是,但不只是. MIP全称Mobile Instant Pages,移动网页加速器,是百度提出的页面加速解决方案.MIP从前端渲染和页面网络传输两方面进行优化, ...

  9. 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践

    提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...

随机推荐

  1. 编译seastar

    1. 下载代码 git clone https://github.com/scylladb/seastar.git cd seastar git submodule update --init --r ...

  2. Facebook的Libra “区块链”到底是如何运作的?

    本文深入研究了"关于Facebook Libra coin (以及更多)平台协议"的26页技术文档,并对其内容进行了分解说明.同时,我们对这53位作者表示衷心的钦佩! 以下为具体分 ...

  3. EL表达式和JSTL(一)

    一. 初始JavaBean 在软件开发时,有些数据时经常要用到的,为了方便进行移植,Sun公司提出了一种JavaBean技术,使用JavaBean对这些数据进行封装,做到一次编写,到处开发. Java ...

  4. Centos8无法安装screen的解决方法:使用epel安装screen

    选择了一个基础款的vps安装的镜像选了熟悉的centos的最新版centos8,但是在安装screen的时候,却安装不了,提示: No match for argument: screen 本来以为是 ...

  5. python爬取淘宝数据之遇到的问题

    1.chormedriver.exe驱动下载地址 https://npm.taobao.org/mirrors/chromedriver 2.跳转网页页面不稳定问题 添加智能等待时间 driver.i ...

  6. 非线性支持向量机SVM

    非线性支持向量机SVM 对于线性不可分的数据集, 我们引入了核(参考:核方法·核技巧·核函数) 线性支持向量机的算法如下: 将线性支持向量机转换成非线性支持向量机只需要将变为核函数即可: 非线性支持向 ...

  7. 2019年icpc上海网络赛 B Light bulbs (分块、差分)

    https://nanti.jisuanke.com/t/41399 题目大意: 有n个灯,m次操作,每次修改[l,r]内的灯,(off - on ,on - off),问最后有几盏灯亮着. 换种说法 ...

  8. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第十二天】(系统架构讲解、nginx)

    https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...

  9. Springboot配置注入

    springboot中如何将yml 配置文件中配置,在类中注入使用 ①第一种使用@value方式 ################## 配置文件 ######################### d ...

  10. Linux 使用rpm方式安装最新mysql(5.7)步骤以及常见问题解决

    第一步:下载rpm包 mysql官网下载:http://dev.mysql.com/downloads/mysql/ 但如果你的下载网速不好的话也可以点下面的链接下载自己想要的版本 http://mi ...