朴实的学习原因:京东实习生招聘条目上写了这些技术,那就给他学了!

参考 CDN知识详解

嗨嗨嗨,直接上菜!

1.CDN

CDN的全程是content delivery network,内容分发网络;说人话就是把网站产生的内容分发到各个用户请求的网络里去,具有 分布式 网络的特点!

1.1 前置声明

当代网络形势错综复杂,特别是视频、音频类网络服务的兴起,给互联网的贷款造成了很大的压力啊!

以之前很火的“延禧攻略”为例,当时曾经在某视频APP实现了1千万用户同时在线观看。如果大家观看的是1080p清晰度的视频(理论上需要4Mbps带宽),那么,累计需要的流量带宽是
$$
10,000,000×4Mbps=40,000,000Mbps=40Tbps
$$
这个数字老恐怖了!对于优酷、爱奇艺这样的互联网视频内容提供商来说,这无疑是非常巨大的流量压力。

如果按服务器用的10Gbps的万兆网卡来算,那也需要四千块万兆网卡才能顶得住这么大的流量消耗,更别提压根没有那么多地方给你插这么多网卡的事情了;

有这么一个说法:当用户打开一个页面,等待超过4秒,他就会关闭这个页面。也就是说,这个用户就会流失。用户流失对于公司来说可就是金钱流失!

所以,没有任何一家互联网服务提供商原因因为网络的问题而流失客户,那么我们就得像个办法来解决这种流量短时间暴发的问题!

而CDN,就是一项非常有效的缩短时延的技术。

1.2 技术主体

CDN缩短用户延时的办法也非常“简单”,其实就是将云服务部署到用户身边。在访问的时候,根据DNS的多线解析能力(即为不同地区提供不同的IP解析)选择离用户最近的服务器来为用户提供服务。

image-20230827105913951

因为这样,CDN就在内容层面上进行了一定的筛选和分发,所以他就叫内容分发网络;

具体来说,CDN就是采用更多的缓存服务器(CDN边缘节点),布放在用户访问相对集中的地区或网络中。当用户访问网站时,利用全局负载技术,将用户的访问指向距离最近的缓存服务器上,由缓存服务器响应用户请求。(有点像电商的本地仓)

大家可能觉得,这个不就是“镜像服务器”嘛?其实不一样。镜像服务器是源内容服务器的完整复制。而CDN,是部分内容的缓存,智能程度更高。

确切地说,CDN=更智能的镜像+缓存+流量导流

而且还需要注意的是,CDN并不是只能缓存视频内容,它还可以对网站的静态资源(例如各类型图片、html、css、js等)进行分发,对移动应用APP的静态内容(例如安装包apk文件、APP内的图片视频等)进行分发。

CDN的具体工作流程。举个例子,如果某个用户想要访问优酷的视频点播内容,那么:

img

具体步骤如下

  1. 当用户点击对应资源内容,应用根据域名地址到底层触发DNS请求;
  2. 先是请求的本地运营商的DNS,再转发到CDN域名服务的DNS;
  3. CDN域名服务的DNS会将CDN的全局均衡负载服务器的IP地址返回给用户;
  4. 用户向CDN的负载均衡设备发起URL的访问请求;
  5. CDN的负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域(离用户越近越好)的缓存服务器
  6. 负载均衡设备告诉用户这台缓存服务器的IP地址,让用户向所选择的缓存服务器发起请求;
  7. 用户向缓存服务器发起请求,缓存服务器响应,将用户请求内容发送给用户
  8. 如果这台服务器上没有用户想要的内容,那就根据CDN设置的回源服务器(又称源站)来请求该URL
  9. 缓存服务器从源站拉取内容缓存到本地,并传输给用户;并根据用户设置的缓存策略来判断是否需要保留该资源到本地,是则进行缓存。

在CDN工作的整个流程中,源站的服务器IP是对用户不可见的;CDN服务在实现了一定的资源访问加速的基础上,还附带了隐藏源站IP的功能,避免源站直接遭受火力打击(指服务器被攻击)

1.3 静态加速

所谓静态加速,是只加速源站所提供服务中的静态资源,包括js、html、css、图片、音视频等不会出现变动的资源文件。将这些资源在CDN云服务器内进行缓存,用户访问静态资源的时候从CDN传输给用户,访问asp、php、jsp等动态资源的时候,从源站抓取,既保证了数据的及时性,又提高了静态资源的加载速度。

相比于动态资源文件,静态资源,特别是图片,是访问过程中消耗流量较大的部分;使用静态资源加速能大大减轻源站的网络贷款和资源负载的压力,又减少了用户的加载速度,使得网络服务能更快的展现在用户面前;

1.4 动态加速

动态加速是指CDN的DNS解析中通过动态链路探测,监控网络环境的变化,监控各地网络延迟,寻找到一条最稳定、最高效、最快速的路径,回源动态资源,从而实现动态资源(如asp、php、jsp等)加速。然后构成链路列表,绑定到DNS解析上,更新到CDN的本地域名服务器上。简单架构见下图所示。

img

1.5 数据节点的更新和同步

CDN分为推拉两种方式

  • 推是服务器将内容推到CDN节点上;
  • 拉是CDN在第一次接受请求的时候从服务器拉取资源进行响应并保存;

当资源在CDN缓存之后,如果服务器上的资源发生变化,CDN节点是不会知道的,除非缓存时间到期重新拉取或者修改新资源的访问方式。

  • 动态资源的话,一般都是无延迟的,因为此时CDN只是负责动态链路解析,帮助找到一个最快的网络链路,减少网络延时(这一点可以参考博客里面的介绍);
  • 静态资源以 css 和 js 来说,建议在编译生成的阶段,为文件名加上时间戳。而且最好是在静态资源的文件名里面加时间戳,而不是 QueryString 里面加。这是最方便的方案,因为一旦发生了更新,每次去取的一定是新文件,不涉及缓存刷新的问题。

这个时间戳是啥意思呢,比如我们站点有一个static/style.css,此时CDN缓存的也是这个static/style.css文件,那如果这个css文件有更新,CDN节点是没有办法知道的,除非你设置了CDN的定时更新,那也需要等CDN的定时器时间到了,CDN服务器才回去源服务器拉取这个节点,此时出现用户访问时的滞后是在所难免的。

那如果用时间戳来命名这个文件,情况就不一样了。下面只是做个简单的示例,时间戳是瞎编的。假设我们完成了一个版本的css,此时可以根据当前本地时间戳,将这个css命名为static/style-100000.css,并在所有引用之处都用这个名字来命名。而未来该css文件有变动的时候,同样是修改文件的时间戳后缀,同时修改其他位置的引用static/style-200000.css,此时对于CDN而言,这就是俩不同的文件了,自然会去回源重新拉取,我们的目的也就达到了。

当然还有一种方式,就是网站静态资源有变动的时候,去CDN后台里面手动刷新缓存。

除了css和js之外,其他的诸如图片/视频等静态资源,是很少会出现需要缓存更新的情况的。比如本站博客就使用了CDN进行静态资源的加速,你看到的博客里面的图片资源,它们的URL中都是用图片的MD5进行命名的,在这种情况下,两个图片文件重复是不太可能的(除非人为将旧文件覆盖),所以并不需要对图片这类不会变动的资源进行时间戳命名。

1.6 CDN的好处

1.6.1 对服务商

采用CDN技术,最大的好处,就是加速了网站的访问——用户与内容之间的物理距离缩短,用户的等待时间也得以缩短。

而且,分发至不同线路的缓存服务器,也让跨运营商之间的访问得以加速。例如中国移动手机用户访问中国电信网络的内容源,可以通过在中国移动的线路中架设CDN服务器,进行加速。效果是非常明显的。

此外,CDN还有安全方面的好处。内容进行分发后,源服务器的IP被隐藏,受到攻击的概率会大幅下降。而且,当某个服务器故障时,系统会调用临近的健康服务器,进行服务,避免对用户造成影响。

正因为CDN的好处很多,所以,目前所有主流的互联网服务提供商,都采用了CDN技术。所有的云服务提供商,也都提供了CDN服务(价格,按流量计费)

1.6.2 对通信行业

  • 互联网服务提供商采用CDN,是以存储换时延。花钱购置CDN服务器或云计算服务,以此换取更好的用户体验。
  • 通信运营商也追捧CDN,但它们的目的,是以存储换带宽 ——通过服务“下沉”,减轻上层骨干网络的流量压力,避免硬件扩容,降低网络建设成本。

以上文提到的爱奇艺看视频的高带宽问题为例,如果不采用CDN,那就是巨大的流量流入同一个机房,这会导致这个机房入网/出网的线路被拥塞,影响其他业务的进行!

同样的,如果大量的业务流量数据在骨干网跑来跑去,骨干网肯定吃不消,要拼命扩容。如果这些业务流量数据在底层就被解决了,那么,骨干网的带宽压力自然就减轻了。

很多运营商已经将CDN下沉到地市级,以此减轻压力,同时可以提升用户体验!可谓是一举两得的美事!

img

2.PCDN

PCDN技术是P2P技术+CDN技术的集和,在认识PCDN之前,我们首先要简单了解一下P2P技术

2.1 P2P

P2P即Peer to Peer,是一种对等连接方式,纯P2P架构包含如下内容

  • 没有总是在线的服务器
  • 任意端之间直接通信
  • 对等方之间可以间断链接,并可以动态改变IP地址

实际的用例如下

  • 文件分发(BT下载)
  • 流媒体
  • VolP
  • 内网穿透式访问(建立P2P链接,直接和内网主机通信)

image

关于P2P想了解更多信息可以查看此文:详解P2P技术

2.2 PCDN

2.2.1 流程

前面提到了,PCDN是P2P+CDN,那么其是如何将P2P技术和CDN结合起来的呢?

在阿里云官网上可以看到对PCDN的介绍:一篇文章解读提速、降费黑科技:PCDN定义、功能、架构、场景和优势;本文是对这篇文章的个人理解。

PCDN产品是与传统CDN互补协作的关系,以P2P技术为核心的分布式PCDN系统可与传统CDN、云CDN无缝集成,形成互补协作,相对于CDN拥有成本更低、质量更好两方面的核心优势。

P2P 内容分发网络(英文名:P2P CDN,以下简称PCDN)是以P2P技术为基础,通过挖掘利用边缘网络海量碎片化闲置资源而构建的低成本高品质内容分发网络服务。你可以通过集成PCDN SDK(以下简称SDK)接入该服务后能获得等同(或略高于)CDN的分发质量,同时显著降低分发成本。适用于视频点播、直播、大文件下载等业务场景。

使用PCDN后的http请求处理流程如下图:

image-20230827133437729

P2P的加入,就是将一些数据预先留存在部分终端设备(比如家用路由器,个人电脑,个人NAS)等产品上,再通过P2P技术,从这些Peer做种端获取到一部分数据,以此为周边用户提供服务。

使用PCDN的SDK后,在请求DNS之后,还会去请求PCDN的调度系统,PCDN同时会返回可用的CDN服务器,和可用的P2P做种端,用户能同时从多端获取到数据(根据文件分块,从不同地方获取同一文件不同分块的数据,提高文件下载速度)

比如一个文件有1MB,那么使用PCDN,我们可能服务商的从CDN服务器拉取了500KB,再从上图中所示的两个peerid端获取到了500KB数据;

因为p2p使用的是个人的peer终端节点,不仅数量多,且分布比CDN服务器更广,理论上来说至少能获得等同于仅使用CDN技术的速度优势,如果用户可以连接到的peer较多,则速度就会大于仅使用CDN技术!

而这些作为peer的做种端,会定期从CDN缓存一部分热门数据到本地,并为其他与自己建立P2P链接的终端提供服务。

京东云路由器、迅雷的网心云、百度云盘PC客户端的闲时带宽上传,其实都是使用了PCDN技术的终端产品,其会在占用一小部分用户带宽的基础上,给用户提供京豆/现金奖励;
但是PCDN似乎和运营商的政策冲突,具体的就不了解了,本文只是来学习技术的。

2.2.2 优点

以下优点来自阿里云那篇文章

  • 价格低:通过P2P技术可为客户提供更低成本的内容分发服务,(以峰值带宽计价)为云CDN价格的1/2,为传统CDN价格的1/4,可显著降低客户的分发成本;

    因为使用了更多P2P节点,减轻了CDN服务器、源站服务器的网络带宽压力,所以PCDN能在一定程度上起到降本增效的作用。

  • 质量好:通过CDN+P2P多级节点调度,一个请求可由CDN和多个P2P源同时提供内容,通过资源冗余提高了服务可用性,播放流畅率高于纯CDN,在大文件下载场景中更是能极大提高下载速度;通过调用海量分布式P2P节点, 平均播放流畅率 > 97%,平均首播时间小于1秒,用户体验得到有效提升。

  • 成熟稳定:多年为优酷土豆提供优质的视频播放、下载等加速服务,接入带宽超10T,经历了海量用户规模的长时间验证。拥有内网穿透、缓存处理、种子管理、传输策略等各方面的核心技术和专利;(这是阿里云给自己打的广告)

image-20230827135320425

2.3 常见名词

以下是PCDN中常见的名词;这里面漏了的一级节点指的应该是CDN服务器;

image-20230827134515066

由此可见,上文提到的京东云路由器、迅雷的网心云,这些客户端在用户的电脑启动后,其就是作为PCDN的三级节点接入整个PCDN的网络的,其提供的也是三级带宽;

2.4 基础架构

关键组件

  • index服务:全局调度,把用户请求调度到最佳的机房
  • ZooKeeper (Global&Local):服务活动情况汇报给调度服务,动态配置更新
  • Nignx Proxy:支持私有协议的nginx代理服务,针对不同文件一致性Hash到不同的Channel服务
  • Channel服务:记录文件和拥有文件的端点地址信息,为下载提供就近的端点地址
  • Realy服务:服务P2P建立连接和通讯
  • Hot服务:hot文件发现和推送

以下是PCDN技术的架构图

image-20230827135429913

整个技术的流程在上文已经讲解过了。这里的架构图阿里云的文章并没有提供更多的说明,具体的就得在真正需要开发PCDN的时候在公司内部深入学习了。

2.5 适用范围

PCDN产品适用于视频点播、直播、大文件下载等业务领域。

  • 视频点播:长视频点播,热度集中的短视频点播。
  • 视频直播:大型晚会赛事直播、地方网台直播、秀场互动直播。
  • 大文件下载:超过1MB且热度集中的的文件分发,如应用市场分发、在线音频分发。

3.SDN

SDN全称Software Defined Network,概念最早由斯坦福大学的Nick McKeown教授于2009年提出;谷歌于2010到2012年建立的数据中心网络B4是SDN的成功案例;

该技术学习于b站【408 计算机网络新增考点—软件定义网络SDN(字幕版)】

3.1 看看路由器的功能

路由器具备如下功能

  • 报文转发
  • 路由选择

在当前的路由器架构中,分为数据层面和控制层面。

  • 为了构建出自己的路由表,路由器必须要和周边的其他路由器定期通信,才能通过自己的路由算法设置出路由表,并选择正确的路由路径(这个耗时较长)
  • 在数据层面,路由器采用硬件,查表进行转发(耗时低)

image-20230827143545493

分组是网络专有名词。大多数计算机网络都不能连续地传送任意长的数据,所以实际上网络系统把数据分割成小块,然后逐块地发送,这种小块就称作分组(packet)。也有些书籍把分组定义为网络层的协议数据单元

说白了分组就是一个报文!

3.2 SDN核心思想

SDN这种新型网络体系结构的核心思想,是将网络的控制层和数据层面剥离,让控制层可以通过软件来控制数据层的较多设备

在SDN体系中,路由器的路由软件被剥离开,路由器之间也不再需要交换路由信息。

  • 控制层面:有一个逻辑上集中的远程控制器,对多个交换机进行控制;该远程控制器可以由多台物理主机组成(集群)

远程控制器会掌握各个主机整个网络体系的状态,并为每一个路由分组计算出最佳的路由,和生成正确的转发表,然后将转发表下发给路由设备;这时候,底层的路由器硬件就仅仅需要进行查表转发,而不需要进行耗时的路由表生产和算法计算了,大大减轻了底层交换机和路由器硬件的压力。

image-20230827145453526

3.3 OpenFlow协议

OpenFlow协议是一个受到高度认可的标准,其一般在SDN中进行使用,但SDN并不一定要用OpenFlow;

OpenFlow协议由开放网络基金会ONF负责指定,该基金会致力于SDN的发展和标准化;OpenFlow协议目前较为成熟的是1.3版本

OpenFlow协议是SDN体系结构中,控制层面和数据层面之间的通信接口,该协议可以允许控制层面的控制器对数据层面的物理设备进行直接的访问和控制。

image-20230827145816552

3.4 路由转发的区别

3.4.1 传统路由表

传统的路由转发是查询路由表,根据地址掩码计算目的网络,判断是否与当前条目匹配,如果匹配,则从对应的「下一条」中发送出去。

路由转发这部分内容在我的IP协议详解博客中有所涉及:点我

image-20230827150215508

3.4.2 SDN广义转发

SDN在这基础上新增了更多的内容,称为广义转发

  1. 进行匹配:能够对网络体系结构中的各层(数据链路层,网络层,传输层)首部中的字段进行匹配
  2. 执行动作:不仅转发分组,还可以实现负载均衡、重写IP首部(类似NAT中的路由地址转换)、人为阻挡或丢弃一些分组(类似防火墙)

在SDN广义转发中,完成这一操作的设备不再称为路由器,而是叫做OpenFlow交换机(或分组交换机),也可以简称为交换机。

3.4.3 流表

在SDN中替代 了传统路由表的是「流表(Flow Table)」

  • 一个流就是整个网络中的一组分组序列,在此序列中的每个分组都是共享分组首部某些字段的值,例如,某个流可以是共享相同的源IP和目的IP地址的一连串分组
  • OpenFlow交换机中的刘表是由SDN远程控制器来管理的,SDN远程控制器通过一个安全信道,通过OpenFlow协议来管理OpenFlow交换机中的流表

image-20230827150934738

  • 每个OpenFlow交换机必须有一个或者多个流表
  • 每一个流表包含多个流表项目
  • 每个流表项包含三个字段:首部字段值(匹配字段)、计数器、动作(类似下一跳)

OpenFlow的首部字段值跨越了三个层次的首部,既可以处理数据链路层的MAC帧,又可以处理IP报文,或者是TCP/UDP的端口

image-20230827151212669

计数器字段包含一组计数器

  • 记录已经与该流表项匹配的分组数量的计数器;
  • 记录该流表项上次更新到现在经历的时间的计数器

动作字段是一族动作,当分组匹配到某个流表项时,执行下方的一个或者多个动作

  • 把分组转发到指定的端口
  • 丢弃分组
  • 把分组进行复制后,从多个端口转发出去
  • 重写分组中的首部字段

3.4.4 VLAN

关于该报文中VLAN部分可以查看此博客:https://blog.csdn.net/LawssssCat/article/details/127204720

VLAN是一种用于进一步虚拟化划分局域网的方式,假如一台路由器有4个网口,其可以通过将LAN1和LAN2设置成VLAN10,LAN3和LAN4设置成VLAN20来模拟出两个局域网

image-20230827153454860

vlan(virtual lan)技术提供了一种灵活的解决方案;将交换机的接口根据业务需要添加到不同的vlan中,从而实现二层隔离。

  • 隔离广播域,即广播包只在本 vlan 中传播,从而在一定程度上可以提高整个网络的处理能力;
  • 提高安全性,一个 vlan 内的用户和其他 vlan 内的用户不能互访,提高了网络的安全性;
  • 增加带宽利用/降低延迟/管理作用

3.5 举例

3.5.1 简单转发

通过不同的流表项来设置转发路径和转发动作,动作中的转发(3)代表从该交换机的3号端口转发出去。端口号在图中有标注;

image-20230827151650945

3.5.2 负载均衡

第二个栗子是负载均衡的栗子,在下面的场景中,我们想要H3发送的分组通过S2-S1-S3-H5/H6,要H4发送的分组通过S2-S3-H5/H6;以达到负载均衡的目的。

image-20230827151718483

使用传统的源IP和目的IP的转发方式,无法实现这样的负载均衡。在传统场景下,当S2在数据链路层发现目的MAC地址是S3的MAC地址的时候,无论如何都会直接发送给S3,而不是从S1处绕路。

但在SDN场景中,就可以通过两个不同的流表项来规定不同转发动作,实现这样的负载均衡(这里的转发(4)代表从S2的4号端口转发出去)

image-20230827151948106

3.5.3 防火墙

如果我们想让S2主机只接收来自S1的数据而不接受S3的数据,就可以通过只设置S1的源IP地址的流表项,来丢弃S3发送的数据(匹配不上的数据就会被丢弃)

image-20230827152217555

3.6 SDN体系结构的特征

下图中包含了SDN的体系结构一览图和SDN的四个关键特征

  1. 基于流的转发
  2. 数据层面与控制层面分离
  3. 位于数据层面分组交换机之外的网络控制功能
  4. 可编程的网络

其中,SDN控制器是这个架构中最复杂的设备,其通过南向API控制底层的OpenFlow交换机,通过北向API接受其他网络控制器的策略配置。

image-20230827152358531

3.6.1 SDN控制器

SDN控制器可以分成三个层次

  • 其通信层通过OpenFlow协议与交换机通信
  • 中间间来根据各种策略管理各个交换机
  • 北向API接收来自其他控制策略发起端的配置

image-20230827152554869

这里使用的RESTful API是基于HTTP的API,也是我们较常见的API接口;

3.6.2 开源SDN控制器

常用的开源SDN控制器有OPEN DAYLIGHT和ONOS;

3.6.3 SDN的优势

原文链接:https://blog.csdn.net/as12138/article/details/131273381

SDN相比于传统网络架构,有许多优点和优势。

  1. 高度可编程性:SDN架构中的控制器负责管理交换机和路由器,使得网络更加可编程、可配置。管理员可以通过控制器实现灵活调整网络拓扑、管理流量和配置流调度策略,提升网络的可演变性、可定制化和可伸缩性。

  2. 网络智能集中化:在SDN中,网络智能被集中在控制器中,通过控制器进行集中式管理和控制。这种分离的模式避免了网络设备中任务的复杂,提升了网络的可管理性和可控制性。此外,集中化的管理方式也可以在网络中间件和应用中实现智能控制,如分布式存储、云计算等。

  3. 可扩展性:SDN中的网络设备是通用的硬件设备,不需要特定的功能区分,同时也不需要更新硬件,只需更新控制器即可实现拓扑可伸缩和灵活的网络管理。

  4. 自动化和提高效率:SDN中可以实现网络的自动化,通过控制器进行自动化的网络管理,可以避免手动管理网络的局限性和不确定性,从而提高网络的效率和稳定性,同时,自动化网络管理也可以降低网络维护的成本和时间。

  5. 安全可靠性提升:网络安全和可靠性是企业网络中最基本的需求。传统的网络安全往往需要通过一些特定设备和协议来实现。相比之下,SDN中的控制器可以根据网络实时状态自动优化管理策略,安全可靠的方式来提高网络的安全性。

总之,SDN的优势在于其灵活的可编程性、集中式智能管理、高效的自动化网络管理和增强网络安全性。以上优势也是SDN技术应用广泛的主要原因,越来越多的企业和组织将SDN技术应用到自己的网络架构中,以满足未来网络的需求和挑战。

3.6.4 SDN应用前景

SDN技术目前已经实现了基础网络配置、流控制、网络安全等功能。在未来,SDN技术还会面临更多的挑战和机遇。

  1. 5G时代:5G技术将会改变网络的面貌,加速物联网应用的普及。SDN作为架构灵活、可编程的网络方式,将会在5G网络中发挥重要作用,实现网络的自动化和智能化管理。

  2. IoT设备:物联网技术带来大量设备的连接,SDN技术的价值在于自动化了物联网设备的管理、安全和监控。未来,SDN技术将会成为物联网管理的重要工具。

  3. AI:随着人工智能的发展,SDN的业界应用已经开始大规模落地。这将加速智能交通、智能城市和自动驾驶等领域的发展。

  4. 集成新技术:SDN可以很容易地与其他技术相结合,例如NFV(网络功能虚拟化)和AI(人工智能),以提高网络的效率和适应性。

  5. 云计算:SDN技术的灵活性和可编程性,也使得SDN与云计算等新技术的结合变得更加自然。在未来,SDN技术将与云技术紧密结合,实现业务流程的自动化、快速应用部署和弹性云资源管理。

总而言之,SDN技术将为未来网络的发展和实现各种应用提供支撑。在日益增长的网络需求和复杂的网络技术背景下,SDN的灵活性和高可用性将会带来更大的发展空间和市场需求。SDN技术应当继续研究和发展,以满足更多的网络需求和挑战。

3.7 总结

image-20230827152810972