『CDN』让你的网站访问起来更加柔顺丝滑
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。
当你在访问淘宝、京东准备剁手的时候,虽然进入页面的时候有很多的图片、很多的内容,但是加载起来确很快,让你剁手的动作如水般丝滑。嗖的一下好看的商品图片就出来了,嗖的一下就付款了。当然图片算是比较小的资源了,那些视频网站呢,每一个视频好几百M、好几个G,同时有好多的请求过来,就算服务器能抗住,带宽能跟的上吗?
难道就是靠大厂背后充足的服务器、宽带资源以及过硬的优化技术外吗?当然了,这肯定是必要的条件,除此之外就靠我们今天要说的 CDN 技术了。
什么是 CDN
CDN即内容分发网络(Content Delivery Network)的简称,是建立在承载网基础上的虚拟分布式网络,能够将源站内容(包括各类动静态资源)智能缓存到全球各节点服务器上。这样不仅方便了用户就近获取内容,提高了资源的访问速度,也分担了源站压力。
CDN(Content Delivery Network)是指内容分发网络,也称为内容传送网络,这个概念始于1996年,是美国麻省理工学院的一个研究小组为改善互联网的服务质量而提出的。为了能在传统IP网上发布丰富的宽带媒体内容,他们提出在现有互联网基础上建立一个内容分发平台专门为网站提供服务,并于1999年成立了专门的CDN服务公司,为Yahoo提供专业服务。由于CDN是为加快网络访问速度而被优化的网络覆盖层,因此被形象地称为“网络加速器”。
CDN 的核心就是加快网络访问速度,看下面这张图,不同地方的终端用户会访问到最近的 CDN 服务器,而 CDN 服务器上的内容是源服务器集群上的,不管是通过主动拉取还是被动接收的,总之数据内容是一致的,而且离用户最近,获取成本最小速度更快。
现在国内一些比较有实力的大公司会自建 CDN 网络,用来提升服务性能,当然,成本也是很巨大的,想想看啊,方便用户就近获取内容就意味着要在各个地方建立内容节点服务器,就不说向全世界提供服务,就面向整个中国,就要有多少个节点吧。
好在现在很多国内云服务提供商都有 CDN 服务,可以大大降低自建 CDN 的成本。
使用场景
从 CDN 含义本身分析,内容分发网络嘛,肯定是需要快速获取内容的场景才需要 CDN。这些内容包括以下这些:
- 网站中的静态资源文件,比如图片、js 脚本、样式文件等小文件;
- 大文件,比如一些软件下载站、一些视频、图像资源下载站等;
- 在线音频、视频网站,比如网易云音乐、腾讯视频等;
比如我打开天猫商城看了一下,看到其中很多静态文件都来自于不同的域名,有很多域名中带着 CDN 字样,明显都是来自于 CDN 节点的。
那都是静态文件啊,动态内容能不能也放到 CDN 上呢?那这就变味儿了,CDN 只放静态内容可以快速简单的实现,如果加入动态内容,那不就成了多机房分布式部署了吗。倒也不是没有折中的办法,边缘计算就是这样一种策略,边缘节点既能做 CDN,也具备一些计算能力,可以有一些简单的动态执行能力。这就不在讨论的范围之内了。
如果你做过前端开发的话,可能用过一些 JavaScript 开发CDN,比如七牛云和又拍云等等。
原理
没有 CDN 的请求路径
在没有 CDN 的情况下,一次资源请求的路径是什么样子的呢。
1、首先用户在浏览器输入域名,比如进入天猫主页;
2、用户所在的电脑查询 hosts 中看是否有对应的 IP ,如果有就直接请求 IP;
3、如果没有在本地缓存,则向本地 DNS 发起请求,本地 DNS 查找域名对应的 IP(一般是 A 记录);
4、如果本地 DNS 没有找到,则向上级 DNS 服务器请求,一级一级的知道查到最顶级 DNS 服务器;
5、向找到的域名对应的 IP 发起请求;
6、资源所在的集群向客户端返回请求的资源,比如图片、样式文件、视频文件等;
有了 CDN 之后
当有了 CDN 接入之后,事情就稍微变得复杂了一点。
1、用户在浏览器输入域名,比如进入天猫主页;
2、用户所用的电脑向本地 DNS 服务器请求,查询域名的IP地址;
3、本地 DNS 服务器中如果缓存有这个域名的记录,则直接响应用户的解析请求,否则本地DNS向根DNS 查询域名的授权服务器;
4、根DNS将域名授权DNS记录返回给本地DNS;
5、本地 DNS 得到域名的授权DNS记录后,继续向域名授权DNS查询域名的IP地址;
6、域名授权DNS查询域名记录后(一般是CNAME),返回给本地DNS;
7、本地DNS得到域名记录后,向智能DNS查询域名的IP地址;
8、智能DNS根据一定的算法和策略(比如静态拓扑,容量等),将最合适的CDN节点IP地址返回给 本地DNS;
9、本地DNS将得到的域名IP地址,返回给用户终端;
10、用户得到域名IP地址后,访问站点服务器;
11、CDN节点服务器应答请求,将内容返回给客户端,CDN服务器同时在本地进行保存,以备下次使用。
下面的流程图画出了整个请求过程。
大致的流程就是上面的样子,真实情况下,智能 DNS 可能更加复杂一些。因为一个地区的 CDN 很可能不是单纯的一台机器或一个集群,而是一个小范围的分布式部署。
比如全国范围内是一个大的 CDN 网络,那智能 DNS 其实就是一个智能负载均衡器,它会根据一系列的指标,比如地理位置、线路等情况返回一个 IP 地址,这个地址可能并不是一个 CDN 服务器的 IP,而是一个小范围的智能负载均衡器地址,这个负载均衡器可能协调的某一个省的 CDN 节点,当定向到这个负载均衡器之后,又会根据一系列的指标,将返回一个最合适的 CDN 节点的 IP 给客户端。
CDN 核心部件
智能 DNS
智能调度DNS是CDN服务中的关键系统,当用户访问加入CDN服务的网站时,域名解析请求将最终由 “智能调度DNS”负责处理。它通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户可以得到快速的服务。同时它需要与分布在各地的CDN节点保持通信,跟踪各节点的健康状态、容量等信息,确保将用户的请求分配到就近可用的节点上。
缓存功能服务
负载均衡器
CDN 节点通常都是以集群或者区域集群的形式存在的,负载均衡器可以将请求分派到最合适的 CDN 服务器上。负载均衡器可能是硬件 F5,也可能是 LVS、HA、Nginx 等软件形式。
内容缓存服务器
CND 提供的就是内容加速,当然要有地方存内容了。如果是小的静态文件还好,如果是大的视频文件等,那对大容量的存储和高速读也是有一定要求的。
内容管理服务
最开始内容都是存储在源服务器中的,那总得想办法让内容存储到各个 CDN 节点上。那通过什么方式呢,最简单的办法就是当客户端访问的某个 CDN 之后,发现里面没有需要的内容,就到源服务器上去拉取。
内容传输可以有两种模式,一种推模式,一种拉模式。推模式是源服务器像各个 CDN 节点主动推送,这种方式就比较灵活了,但是实现比较复杂,假设有个管理控制台,管理员选择某些需要推送的文件,然后选择需要推送的 CDN 接点,点击推送按钮,将文件主动推送过去。
指标
通用指标
衡量 CDN 服务的性能有如下几个指标:
- 延时:指一个数据包从用户的计算机发送到网站服务器,然后再立即从网站服务器返回用户计算机的来回时间。延时越低,性能越好。
- 下载速度:指用户从网络上或者网络服务器上下载的数据时的传输速度。下载速度越快,性能越好。
- 打开速度:指用户打开网站的速度。打开速度越快,性能越好。
- 丢包率:指用户在网络传输中所丢失数据包数量占所发送数据组的比率。
- 回源率:回源率分为回源请求数比例及回源流量比例两种。
- 回源请求数比:指边缘节点对于没有缓存、缓存过期(可缓存)和不可缓存的请求占全部请求记录的比例。越低则性能越好。
- 回源流量比:回源流量是回源请求文件大小产生的流量和请求本身产生的流量。所以回源流量比=回源流量/(回源流量+用户请求访问的流量),比值越低,性能越好。
- 缓存命中率:指终端用户访问加速节点时,该节点已缓存了要被访问的数据的次数占全部访问次数的比例。缓存命中率越高,性能越好。
好处
1、本地Cache加速,提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度,并大大提高以上性质站点的稳定性;
2、镜像服务消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量;
3、远程访问用户根据DNS负载均衡技术,智能自动选择Cache服务器,选择最快的Cache服务器,加快远程访问的速度;
4、带宽优化:自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能;
5、集群抗攻击:广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种DDos攻击对网站的影响,同时保证较好的服务质量 。
壮士且慢,先给点个赞吧,总是被白嫖,身体吃不消!
公众号「古时的风筝」,Java 开发者,全栈工程师,bug 杀手,擅长解决问题。 一个兼具深度与广度的程序员鼓励师,本打算写诗却写起了代码的田园码农!坚持原创干货输出,你可选择现在就关注我,或者看看历史文章再关注也不迟。长按二维码关注,跟我一起变优秀!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
分布式搜索引擎Elasticsearch的架构分析
一、写在前面 ES(Elasticsearch下文统一称为ES)越来越多的企业在业务场景是使用ES存储自己的非结构化数据,例如电商业务实现商品站内搜索,数据指标分析,日志分析等,ES作为传统关系型数据库的补充,提供了关系型数据库不具备的一些能力。 ES最先进入大众视野的是其能够实现全文搜索的能力,也是由于基于Lucene的实现,内部有一种倒排索引的数据结构。 本文作者将介绍ES的分布式架构,以及ES的存储索引机制,本文不会详细介绍ES的API,会从整体架构层面进行分析,后续作者会有其他文章对ES的使用进行介绍。 二、什么是倒排索引 要讲明白什么是倒排索引,首先我们先梳理下什么索引,比如一本书,书的目录页,有章节,章节名称,我们想看哪个章节,我们通过目录页,查到对应章节和页码,就能定位到具体的章节内容,通过目录页的章节名称查到章节的页码,进而看到章节内容,这个过程就是一个索引的过程,那么什么是倒排索引呢? 比如查询《java编程思想》这本书的文章,翻开书本可以看到目录页,记录这个章节名字和章节地址页码,通过查询章节名字“继承”可以定位到“继承”这篇章节的具体地址,查看到文章的内容,我们可...
- 下一篇
极限编程中的计划游戏(Planning Game)怎么玩?
在极限编程中,计划游戏是研发团队与利益相关者举行的计划会议,包括两部分:发布计划和迭代计划。客户以及团队中的所有开发人员都要参加。计划游戏对团队有什么作用?快扫图片二维码观看吧。 视频地址:https://www.zentao.net/xp/planning-game-80295.html/?u=uplu&f=kyzg 极限编程的计划游戏与Scrum的计划会议大同小异,计划游戏的发布计划与迭代计划都分别包括了探索、承诺和指导3个阶段。 发布计划 在探索阶段,由客户整理用户故事,写在用户故事卡上。开发人员估算每个用户故事的所需工时,并将估算值写在故事卡上。如果个别用户故事无法估算,则由客户重新分解之后,再由开发人员进行估算。 在承诺阶段,客户根据商业价值来对用户故事进行分类排序,研发人员则按风险来对用户故事分类排序,并确认开发速度。 最后由客户选择在下个版本发布时,要完成的用户故事。在指导阶段,开发人员和客户可以调整、修改计划。比如用户故事的优先级可能会发生变化、估时可能存在偏差等。这是相应调整计划的机会 迭代计划 迭代计划是发布计划的进一步计划,在探索阶段,团队讨论每个用户故事...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)