阿里巴巴淘系技术
已认证的官方帐号
933 人赞同了该回答
淘宝的图片访问,有98%的流量都走了CDN缓存。只有2%会回源到源站,节省了大量的服务器资源。
但是,如果在用户访问高峰期,图片内容大批量发生变化,大量用户的访问就会穿透cdn,对源站造成巨大的压力。
结合阿里淘系2020年双11的淘宝实践,给大家分享下在图片业务里,我们是如何使用CDN以及如何解决挑战和困难。(点击头像关注我们,看更多阿里工程师干货)
———————————————————————————————————
CDN工作原理
内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。
CDN应用广泛,支持多种行业、多种场景内容加速,例如:图片小文件、大文件下载、视音频点播、直播流媒体、全站加速、安全加速。
借用阿里云官网的例子,来简单介绍CDN的工作原理。
假设通过CDN加速的域名为www.a.com
,接入CDN网络,开始使用加速服务后,当终端用户(北京)发起HTTP请求时,处理流程如下:
- 当终端用户(北京)向
www.a.com
下的指定资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求。 - LDNS检查缓存中是否有
www.a.com
的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。 - 当授权DNS解析
www.a.com
时,返回域名CNAMEwww.a.tbcdn.com
对应IP地址。 - 域名解析请求发送至阿里云DNS调度系统,并为请求分配最佳节点IP地址。
- LDNS获取DNS返回的解析IP地址。
- 用户获取解析IP地址。
- 用户向获取的IP地址发起对该资源的访问请求。
- 如果该IP地址对应的节点已缓存该资源,则会将数据直接返回给用户,例如,图中步骤7和8,请求结束。
- 如果该IP地址对应的节点未缓存该资源,则节点向源站发起对该资源的请求。获取资源后,结合用户自定义配置的缓存策略,将资源缓存至节点,例如,图中的北京节点,并返回给用户,请求结束。
从这个例子可以了解到:
(1)CDN的加速资源是跟域名绑定的。
(2)通过域名访问资源,首先是通过DNS分查找离用户最近的CDN节点(边缘服务器)的IP
(3)通过IP访问实际资源时,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样,用户下一次访问时,该CDN节点就会有对应资源的缓存了。
淘宝鹿班图片业务背景
商品的主图贯穿整个导购和交易链路,相比文字,图片更能吸引眼球,主图对消费者的购物决策有很大的影响。主图上表达的内容各式各样,但其中一定少不了的一定是价格的表达。
长期以来,主图上的价格表达都是商家自己维护,商品价格发生变化后,手动去换图。这样做,会带来3个问题:
(1)价格的准确性:商家手动填写的图片价格,跟实际的购买价可能不一致,造成不好的用户体验。
(2)价格更新的及时性:有时候,由于优惠券/品类券的生效失效,会导致商品的价格变化会很频繁,商家根本来不及换图。
(3)商家的操作成本:手动修改图片的价格,成本还是很高的,需要通过ps等软件修改图片,重新上传,编辑商品。
今年双11,我们淘宝鹿班团队,试图通过技术手段来解决这些问题。当商品价格发生变化后,系统自动计算新的价格,自动合成图片,然后更新商品主图。
我们知道,淘宝网有上亿的商品,光大促商品就有几千万,因此,价格变化导致的图片变化频率非常高。最高的就是在双11的0点,全部大促商品的价格都会由日常价格变成大促价格。
这就意味着,大促高峰期,有上千万的图片刚生成就会被用户访问。那这个情况会产生什么问题呢,让我们先了解下淘宝的图片空间和CDN的架构,就清楚了。
淘宝图片空间和CDN的架构
淘宝整个图片的访问链路有三级缓存(客户端本地、CDN L1、CDN L2),所有图片都持久化的存储到OSS中。真正处理图片的是img-picasso系统,它的功能比较复杂,包括从OSS读取文件,对图片尺寸进行缩放,编解码,所以机器成本比较高。
CDN的缓存分成2级,合理的分配L1和L2的比例,一方面,可以通过一致性hash的手段,在同等资源的情况下,缓存更多内容,提升整体缓存命中率;另一方面,可以平衡计算和IO,充分利用不同配置的机器的能力。
用户访问图片的过程如下:
(1)用户通过手机淘宝来搜索商品或者查看宝贝详情。
(2)详情/搜索/推荐通过调用商品中心返回商品的图片URL。
(3)客户端本地如果有该图片的缓存,则直接渲染图片,否则执行下一步。
(4)从CDN L1回源图片,如果L1有该图片的缓存,则客户端渲染图片,同时缓存到本地,如果L1没有缓存,则执行下一步。
(5)从CDN L2回源图片,如果L2有该图片的缓存,则客户端渲染图片,同时CDN L1及客户端缓存图片内容,如果CDN L2没有缓存该图片,则执行下一步。
(6)从图片空间回源图片,图片空间会从OSS拉取图片源文件,按要求进行尺寸缩放,然后执行编解码,返回客户端能够支持的图片内容,之后客户端就可以渲染图片,同时CDN的L1、L2以及客户端都会缓存图片内容。
频繁换图带来的技术挑战
当商品的价格发生变化时,我们会使用新的价格重新合成图片,更新商品中心中存储的图片URL。
这样会带来2个问题:
(1)CDN及手机淘宝原本缓存的图片内容失效了,用户访问图片会全部回源到img-picasso。
(2)由于更改了商品的字段,交易的核心应用(购物车和商品中心)的缓存也失效了,用户浏览及购物时,对商品的访问会走到db。
源站img-picasso处理图片,以及查询商品DB,都是非常消耗资源的。CDN及商品的缓存命中率降低后,对源站img-picsasso以及db会产生巨大的压力。
拿CDN缓存为例,简单计算一下,CDN平时的命中率是98%,假设命中率降低1个点,对源站的压力就会增加1/3(原本承担2%的流量,现在需要承担3%的流量),意味着img-picasso需要扩容1/3。如果全网一半的图片都同时变化,cdn的命中率降到50%,对img-picasso的访问量就会增加25倍,这个扩容成本肯定没法接受。
解决这2个问题,对应的有2个办法:
(1)改图保持图片URL不变,可以避免商品链路的缓存失效。
(2)在访问高峰到来之前,提前预热图片到CDN,可以避免CDN缓存失效对源站的压力。
下面,介绍下我们具体是怎么做到这2点的。
频繁换图的应对方案
改图保持图片URL不变
图片内容发生变化时,执行下面2个操作:
(1)更新OSS内容:使用新的图片内容替换OSS中老的图片内容
(2)刷新CDN缓存:清除CDN之前缓存的图片内容
这样,用户再次访问图片时,发现CDN没有缓存,就会回源到img-picasso,从OSS拉取新的图片内容。
由于图片URL没有变化,就不必去更新商品中心的图片链接,这样商品链路的缓存可以保持不变。
在真正实施这个方案的过程中,遇到了几个问题,简单跟大家分享下:
OSS三地同步
淘宝的图片空间,承载了淘系所有图片的上下行稳定性保障,为了保障高可用,一份资源会存储到三地OSS。图片上传时,默认只上传一地,利用OSS的能力,自动同步到另外两地。
但是使用URL不变方案,CDN缓存已经清除完成后,如果另外2地的OSS还未同步完成,用户访问后,就会回源到旧的图片内容,发现图片内容没有变化。
针对该问题,我们将异步同步OSS软链的模式,改成三地同步建软链,三地都返回成功后,再去清除CDN缓存,这就保证了用户访问的图片一定是最新的内容。
图片尺寸收敛
同一张商品图片会用于不同的场景坑位展现,不同的坑位对图片的尺寸有不同的要求。为此,图片空间提供了一项功能,可以方便的生成不同尺寸的缩率图。只需要访问图片时,给图片增加不同的后缀,img-picasso源站就可以按要求进行图片进行缩放。
由于历史原因,之前对缩放的尺寸种类没有限制,导致CDN上的图片后缀格式多达2400种+,TOP6格式覆盖率46%,TOP15格式覆盖率64%。这意味着,一张图片,在cdn上最多可能有2400+个不同的url,当图片内容变化后,要把这些缓存全部清掉,才能保证所有用户看到的图片都是新内容。
为了解决这个问题,我们对域名格式进行了收敛。
图片空间对于图片质量压缩参数的规则如下:
* 图片质量参数常见有一下8种形式:Q90、Q75、Q50、Q30、q90、q75、q50、q30
* 图片锐化参数常见有一下3种形式:s100,s150,s200
我们重新将图片质量定义为高质量图片和低质量图片,收敛格式为 q90 和 p50s150
这样,就可以把2000多种格式收敛到6种主要格式,CDN清除缓存才变得可行。
多副本清除CDN缓存
通过图片尺寸收敛,每张图片只需要清除6个不同的url就可以了,那能不能进一步提升刷新效率呢?
为此,阿里云CDN为我们提供了多副本刷新的解决方案:每种不同后缀的图片,作为图片的一个副本,在CDN的swift层增加一层KV结构,存储url和不同副本的映射关系,清除缓存时,可以通过该结构找到所有副本,实现快速清除所有副本。这样,每张图片,我们只需要调用一次CDN清除缓存接口就可以了,极大提升了CDN缓存刷新效率。
图片域名收敛
淘系的图片域名有300多种,主要有下面2个原因:
(1)图片完整的链接太长,所以存储时经常只存最后一段,业务自己来拼域名,很多业务就自己申请了一个图片域名来拼。
(2)PC时代,浏览器对同一域名下的并发请求数是有限制的,不同浏览器不一样,一般6个左右。
为了突破该限制,一些业务就会申请多个域名,随机的拼不同的域名。
前面我们讲过,CDN的缓存是跟域名绑定的,不管是缓存命中还是缓存清除,都只能针对一个域名。
我们显然不可能改一张图,就去对300个域名调用CDN刷新。于是我们考虑对图片域名进行收敛,使得用户对图片的访问都路由到同一个域名,我们希望将所有的图片访问统一收敛到http://picasso.alicdn.com,具体实现方式如下:
(1)对于手淘和猫客客户端,图片访问都收口在图片库,我们推进图片库进行改造,符合一定规则的url,统一收敛到http://picasso.alicdn.com,实现了域名的一刀切。
(2)对于PC浏览器端,就比较麻烦了,没有统一收口的地方。我们只能退而求其次,针对访问最多的6大域名,在cdn上配置域名转发规则,重定向到picasso域名。
通过这种方式,我们实现了全网99%以上的图片访问流量都路由到picasso域名,图片内容发生变化时,通过清除picasso域名的cdn缓存,就能保证基本所有的场景都能看到新的图片内容。
客户端及浏览器缓存
通过多副本和图片域名收敛,cdn的缓存问题得到了解决。但在cdn之上,用户图片访问首先是来自客户端或者浏览器,这里也会有一层缓存。
大家知道,浏览器的缓存都遵循标准的http max-age协议,指定该header后,到了时间图片就会失效,访问到新的图片。所以我们可以在源站img-picasso回源给cdn时,添加max-age协议头,值为1分钟,cdn会原封不动的透给浏览器,这样浏览器就可以实现1分钟内图片缓存失效,重新到cdn拉新的图片资源。
对于手机淘宝客户端,我们在原有的LRU缓存机制之上,另外支持标准的http协议。这样,手机淘宝也实现了1分钟内图片缓存失效。
提前预热CDN图片
通过改图保持图片URL不变,我们解决了改图对商品链路缓存的影响。但是,图片变化时,虽然URL没有变,但我们清除了CDN缓存,导致用户访问时还是会回源到img-picasso源站,所以对图片源站的压力依然存在。
我们发现,商品的价格变化大部分发生在大促节奏变化的时刻,基于这个特点,我们通过提前合成图片,提前预热到CDN,可以实现图片切换瞬间生效,同时对源站没有压力。
具体方案如下:
(1)提前合成多波段图片:我们知道大促期间商家集中换图的时间点后,按这些时间点把图片的展示分成多个波段,每个波段图片提前合成,并提前将图片URL写入到商品中心扩展结构中。
(2)图片访问路由:营销系统根据配置的大促氛围切换计划,告诉鹿班图片二方包,当前是哪个波段,鹿班根据当前波段及场景,返回正确的图片URL给各个场景。
(3)图片渲染:各个场景拿到图片URL后,结合自身的业务逻辑,决定是否要展现该图片。
(4)CDN图片预热:为了避免图片集中切换时,把源站击垮,我们会在集中切换前把这些冷图片内容预热到CDN。
(5)波段内图片变化:提前合成各个波段图片后,商家可能会临时发券/改价,导致商品价格再次变化,对于这类换图需求,为了避免更新商品中心的图片URL,我们通过本文上一章节刷CDN缓存的方式实现。
总结和展望
CDN技术广泛应用于互联网的各个场景,如今的CDN服务商,都提供了非常简单的业务接入方式,而且CDN的费用每年都在降低,这一切使得CDN的接入和使用成本越来越低。
本文通过淘宝图片业务的例子,为大家阐述了使用CDN过程中可能遇到的问题和解决思路。
淘宝的图片业务除了访问量大,还会面临更新频繁的问题。图片的频繁更新,一方面会由于商品上的图片url变化,导致商品缓存失效,另一方面会大幅降低CDN的图片访问缓存命中率。
针对图片url变化导致商品缓存失效的问题,我们通过刷新cdn缓存,用户访问时重新回源的方式,实现了改图保持图片url不变,这个过程中了,我们解决了一些列的问题,包括:OSS三地同步更新、图片尺寸收敛、图片域名收敛、客户端及浏览器本地缓存。
针对改图降低CDN图片缓存命中率的问题,我们根据业务的特点,提前合成不同波段的图片,并预热到CDN,保障了源站的安全。
目前,淘宝上用户看到的图片,都是提前合成好的。未来,我们考虑在用户访问图片时,实时合成图片。通过这项技术,可以实时感知业务更多的实时信息,可以根据这些信息,在图片上合成当前用户或者环境更匹配的文案/元素等内容,给用户带来更多的惊喜。
当然,实时合图也会面临更多的挑战,如:计算能力、合图性能。此外,对于CDN而言,由于每次用户访问的内容是临时合成的,CDN的缓存策略也是一个很大的挑战。
技术来驱动业务!!!淘宝鹿班团队,长期聚焦在图片及视频领域,通过技术创新,提升商家的经营效率及用户的体验,如果你对图片或者视频技术感兴趣,或者希望接触到高并发的工程系统,希望通过code改变世界,欢迎加入我们!!! zhaoming.ywt@taobao.com
——————————————————————————————————————
阿里巴巴集团淘系技术部官方账号。淘系技术部是阿里巴巴新零售技术的王牌军,支撑淘宝、天猫核心电商以及淘宝直播、闲鱼、躺平、阿里汽车、阿里房产等创新业务,服务9亿用户,赋能各行业1000万商家。我们打造了全球领先的线上新零售技术平台,并作为核心技术团队保障了11次双十一购物狂欢节的成功。
点击此处关注我们,你将收获更多来自阿里一线工程师的技术实战技巧&成长经历心得。另,不定期更新最新岗位招聘信息和简历内推通道,欢迎各位以最短路径加入我们。
编辑于 2020-12-14
赞同 93333 条评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
青岚
公众号微博均是:人生冒险家青岚;知识星球:青岚支招;
315 人赞同了该回答
其实在这个提问下,很多大佬和机构号已经把这个问题解释的很清楚了,我如果也硬邦邦的班门弄斧一通,也基本上没什么意思。
但最近刚好有好几个小伙伴忽然跑来问我,如果说CDN的功效在于加速访问的话,那么它和网游加速器有什么区别?
坦白说,这并不是一个聪明的问题。
但对于绝大多数对于CDN完全不了解原理的,同时也没有精力和兴趣阅读以上那些大佬更精准回答的门外汉来说,这算得上一个好问题。
所以我今天,就尽量通俗易懂的给门外汉们塑料科普一下,CDN究竟是何方神圣。
我先讲个今年过年时候的事情。
除夕那天晚饭后,家里的长辈都凑在一起看春晚,而我和我这一辈的弟弟妹妹没有自虐的习惯,所以我就召集他们一起,拿电脑看了个电影,茱莉亚罗伯茨主演的《奇迹男孩》。
桌子那边有一个盛放各类坚果的筐,然后这几个孩子一会儿站起来一趟,伸着腰抓一把榛子放在自己眼前。
过一会儿又一个站起来,又抓一把搁在眼前,也不嫌累。
就这么一趟又一趟,如果放在我们小的时候,准会被家里的长辈说教一通。
我看不过去,转身到厨房拿来一个放水果的盘子,从筐里把坚果盛出一半,直接摆在他们眼前,他们抬头看了我一眼,于是这一席小家伙再没有一个人起身,从筐里抓坚果。
你如果问我CDN是什么,我会说“我把坚果从一个距离他们很远的筐里盛出来,放在距离他们很近的眼前,让他们不用一次次起身费劲的去抓,而是坐在那儿就能够到”的行为,就是CDN。
我再举个例子。
你在一个园区内工作,你直接访问网络的端口带宽被限定为了2M,这也就意味着你如果要下载一个蓝光资源,那基本是一个让人欲哭无泪的龟速,对吧。
但如果有一个特别热门的资源,比如说最近的《复联4》和《权游8》,园区网内部的缓存设备,如果发现很多人都在用2M的带宽龟速下载同一个热门的资源的话,它就会把它缓存下来,这样的好处是,每个人都可以用内网中远远高于2M的带宽来进行下载。
而且不用占用访问外网的带宽,同时目标网站的的服务器压力也小的多。
如果让我粗浅甚至不够准确的解释CDN的话,我更愿意用这样这样的更直接的方式来讲:
“如果我们把某种网络资源,看成是某种路途遥远又曲折的,很多人都喜欢吃的美食,CDN就是把他们一次性的空降到我们面前(并且假设可以共享且取之不尽),让我们轻而易举的大快朵颐”。
在我看来,CDN的本质是缓存,而内核中支撑它的互联网精神则是共享。
回到最开始小伙伴们问我的那个问题,CDN和网游加速器有什么区别?
这的确是一个容易外行产生幻觉的问题。
从效果上来看,无论是CDN还是网游加速器,都是让网络访问(视频,网页加载,直播,游戏等)变快了,但从原理上它们还是有区别的。
当我们玩游戏的时候,如果不打开加速器,是用户通过运营商直接访问游戏服务器,而中间所走的这条链路,我们可以把它看成是一条巨慢无比的乡道。
而打开了游戏加速器之后,用户走到游戏加速服务器将走的是一条高速,而游戏加速器访问游戏服务器的,将是另外一条高速。
两条高速路的里程或许会更长,但速度却要远远快于乡道。
所以说,CDN的本质上是将媒体资源,动静态图片(Flash),HTML,CSS,JS等等内容缓存到距离你更近的IDC,从而让用户进行共享资源,实现缩减站点间的响应时间等等需求,而网游加速器的本质则是通过建立高带宽机房,架设多节点服务器来为用户进行加速。
那么好,说清楚了CDN是什么之后,其实这个问题中的第二问的答案就很简单了,CDN的优势很简单,就是快。
但这里其实有一个问题,很多不了解这个行业的朋友可能会有误会,这几年高歌猛进的CDN厂商,比如说2018年发展的特别迅猛的京东云,似乎都是依托云服务的,但实际上,CDN的概念其实远远要早于云服务,只是这几年由于技术,创新和意识上,传统的CDN厂商的市场份额由于云服务厂商的杀进,而被大量蚕食掉了,才导致了这种错觉的产生。
所以,如果一定要说CDN的优势的话,我们不如与时俱进的简单聊一聊,基于云服务的CDN的优势到底是怎样的。
我们目前所处的这个时代,在互联网生活圈层里,视频和直播在数据上巨大的吞吐量,是区别于其他时代的一个明显的标志。
所以,一个基于云服务的,更智能的视频CDN3.0时代已经到来,这个确定性的前景面前,视频提供商对于CDN服务的需求也将与日俱增,以解决随之而来的诸如带宽费用高昂,画面卡顿,用户体验差等一系列棘手问题,而这些需求是传统CDN服务商无法解决的。
因为视频行业不光需要CDN和带宽,还需要一整套包括编码,转码,主机,存储,AI等等在不同场景下得到保障的解决方案,这件事只能由云服务厂商才能完成。
也就是说,变的更智能,是CDN在这个时代必须完成的进化。
还是拿京东云来举例子说,在去年十月工信部发布的“领取《中华人民共和国增值电信业务经营许可证》通知”中,京东云成为了获批全国CDN经营资质的14家公司之一,但这仅仅是一个基础。
京东作为一个服务全国2亿人的电商平台,关起门的杀手锏在于其自家的物流基础设施,而京东云则让中国社会化物流成本降低了70%,也就是说在CDN服务上,拥有全国经营资质当然很重要,但如何让CDN服务上云后变得更智能,其实更重要。
举个例子说,京东云独创Super HA服务架构可以提供全行业最靠谱的可用性保障,,同时已经经获得了云主机,云硬盘,云存储,主机镜像以及数据库等核心服务的全面支持,并且连续签下了奇虎360和爱奇艺两家视频类客户,在业内算是释放了一个高调杀入战阵的信号。
也就是说,当我们面对一个直播和短视频无处不在的时代,一个在以往任何时代都显得格外恐怖的数据吞吐量,CDN的优势必须插上云服务的,智能的翅膀。
这才是CDN为这个时代的互联网生活半径赋能时,真真切切体现出的优势。
编辑于 2019-05-10
予人玫瑰,手有余香
赞赏
还没有人赞赏,快来当第一个赞赏的人吧!
赞同 315添加评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
流年
Hello World
672 人赞同了该回答
这个问题的解答,需要分五步。
第一步,HTML的文件引用:
HTML的文件头(也有文件中,文件尾)那边常有其他文件引用,比如CSS以及JS的引用。
就以bootstrap常用的引用来举个栗子
你常见的引用可能会是这样的:
<head><title>Mushroom</title><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" /><meta http-equiv="X-UA-Compatible" content="IE=9" /><!-- 引入 Bootstrap --><link href="/css/bootstrap.min.css" rel="stylesheet"><!-- jQuery (Bootstrap 的 JavaScript 插件需要引入 jQuery) --><script src="/js/jquery.min.js"></script><!-- 包括所有已编译的插件 --><script src="/js/bootstrap.min.js"></script>
</head>
这之中,<script src="/js/bootstrap.min.js"></script> 这段就是外部脚本文件的一个链接,当前的这种链接是相对URL,指向站点内的文件,即你本项目里对应路径下面放置的文件。可以在 HTML <script> 标签的 src 属性 查看这个标签的具体属性。
属性值
值 描述
URL 外部脚本的 URL。可能的值有:•绝对 URL - 指向其他站点(比如 src="www.example.com/example.js")
•相对 URL - 指向站点内的文件(比如 src="/scripts/example.js")
通过查看可以得知,URL的引用有两种方式,绝对和相对,绝对的方式就是直接引用其他站点的js地址,比如我把上方的引用改为
<script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script>
这样即是引用其他站点的js。
CSS文件的引用与此类似:HTML <link> 标签的 href 属性
图片以及其他文件的引用也类似,不赘述。
第二步,系统的资源引用
在一个网站项目中,页面里经常会有许多js以及css的引用,接触过开发项目的一般都会了解,大部分界面里的脚本引用并不是像第一步里的那么精简,如果是直接引用项目内文件的话,他们可能是这样的:
<SCRIPT src="/iforums/templates/default/js/common.js" type=text/javascript></SCRIPT>
<SCRIPT src="/iforums/templates/default/js/ajax.js" type=text/javascript></SCRIPT>
<SCRIPT type=text/javascript src="/iforums/ueditor/third-party/jquery-1.10.2.min.js"></SCRIPT>
<SCRIPT type=text/javascript src="/iforums/ueditor/ueditor.config.js"></SCRIPT>
<SCRIPT type=text/javascript src="/iforums/ueditor/ueditor.parse.js"></SCRIPT>
<SCRIPT type=text/javascript src="/iforums/ueditor/ueditor.all.js"></SCRIPT>
可能甚至引用的更多,这样将资源文件与业务代码一锅炖的方式适用于小型的,应用服务器压力并不是太大的系统(并发、带宽、存储空间、资源等等)。这种方式的优点是开发省力,发布省力,对服务器要求小,省钱,没有具体公网接入需求。许多小型,内部使用型的网站系统往往采取这种形式放置资源文件。
第三步,系统访问量变高了,速度变慢了怎么办
怎么办?优化系统部署呗。
怎么优化?优化方式有很多,读写分离,负载均衡,这方面的东西可以讲上三天三夜。具体到本问题的范畴内,那就是资源服务器与应用服务器的分离。粗暴的理解方式就是,就是应用安在应用服务器(一台或者是集群),资源部署在资源服务器(单台或者是集群),这时候,js以及css的引用就需要更改为绝对URL,指向对应的资源服务器。
比如知乎的引用:
<link rel="apple-touch-icon-precomposed" href="http://static.zhihu.com/static/img/ios/zhihu(57px).png" />
<link rel="apple-touch-icon-precomposed" href="http://static.zhihu.com/static/img/ios/zhihu(72px).png" sizes="72x72" />
<link rel="apple-touch-icon-precomposed" href="http://static.zhihu.com/static/img/ios/zhihu(76px).png" sizes="76x76" />
<link rel="apple-touch-icon-precomposed" href="http://static.zhihu.com/static/img/ios/zhihu(114px).png" sizes="114x114" />
<link rel="apple-touch-icon-precomposed" href="http://static.zhihu.com/static/img/ios/zhihu(120px).png" sizes="120x120" />
<link rel="apple-touch-icon-precomposed" href="http://static.zhihu.com/static/img/ios/zhihu(152px).png" sizes="152x152" /><script src="http://static.zhihu.com/static/revved/js/-/vendor.min.5a2082ff.js"></script>
<script src="http://static.zhihu.com/static/revved/js/-/closure/app_core.fb4023ac.js"></script>
<script src="http://static.zhihu.com/static/revved/js/-/closure/sign.e0ca7b10.js"></script>
<script src="http://static.zhihu.com/static/revved/js/-/closure/app.9eaaec15.js"></script>
<script src="http://static.zhihu.com/static/revved/js/-/closure/rich_text_editor.3a07c473.js"></script>
有兴趣的话,你可以打开这个链接看看是什么页面:http://static.zhihu.com/
也可以打开这个看看:http://static.zhihu.com/static
第四步,网络方面的优化
网站的访问速度,只基于一点,那就是页面包含的内容传输到用户电脑的速度,服务器搭的再好再完美,如果用户到服务器的链路之间有一段比较缓慢的话,整体速度也会被拉的十分差劲。
想象一下,你给公司做了个运行于公司内网的网站,一切运行良好,分布式部署也已搭建完毕,一切都很完美。
后来,你公司运营良好,开了一个十分遥远的分公司(不要问为什么遥远,再问自绝经脉),你们的内网也同时连了过去(对,就是那种很直接的搭了几条网线就把两个局域网连成一个局域网的黑科技)。但是因为太远了线节点太多了,分公司访问公司的系统十分缓慢,这时候你就愁啊,这可咋办?那不行就在分公司那边部署一套内容缓存好了,内容进行同步,这样至少分公司的网页访问速度能提升很多,你也可以立功升职加薪了。
紧接着,因为你的出色表现,你们公司扩展十分厉害,在全国各地都建立了分公司,你又开始愁了,这不能每个分公司都搭一套啊,累得慌啊。思来想去,那就华东一套华北一套华南一套东北一套这样分吧,然后搭一些分发服务器,接入访问地址,然后跳转到就近的内容缓存服务器进行内容读取,OK,又到了升职加薪的时刻了~
对,到这里,你已经完成了一套简易CDN的建设。
第五步,CDN是什么?
你的搭建只是基于你公司的大型局域网,而现行的流行CDN则是基于地球搭建的超大型局域网--因特网。它的好处是什么呢?
比如你这么写:
<!-- 引入 Bootstrap --><link href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"><!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --><!--[if lt IE 9]><script src="http://apps.bdimg.com/libs/html5shiv/3.7/html5shiv.min.js"></script><script src="http://apps.bdimg.com/libs/respond.js/1.4.2/respond.min.js"></script><![endif]--><!-- jQuery (Bootstrap 的 JavaScript 插件需要引入 jQuery) --><script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><!-- 包括所有已编译的插件 --><script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script>
上面的地址是百度CDN的链接地址。
那么用户在读取网页内容的时候,就会去百度的就近服务器上掏这些js和css,而不是在你的服务器里捞。
好处呢,第一,一般来说,访问速度有保障,稳定性也有保障;第二,你可以省下资源服务器的一部分资源负担,节省空间节省流量,艰苦创业,能省则省啊。
这时候你会问了,为什么只有js和css呢?其他的图片啊html内容啊不能放进CDN吗?
能啊为啥不能,CDN服务就靠这赚钱呢为啥不能,非广告非广告非广告,你看:
CDN-Content Delivery Network-百度开放云
同类产品还有阿里云等等等等。。
你看的文章中的CDN,一般都是指js和css文件的CDN存储,而对于你的两个问题,遗憾的告诉你,不是,不能。
编辑于 2015-10-17
赞同 67238 条评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
视界云
已认证的官方帐号
232 人赞同了该回答
CDN
全称:Content Delivery Network或Content Ddistribute Network,即内容分发网络
基本思路:
尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
目的:
解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度和成功率。
控制时延无疑是现代信息科技的重要指标,CDN的意图就是尽可能的减少资源在转发、传输、链路抖动等情况下顺利保障信息的连贯性。
CDN就是扮演者护航者和加速者的角色,更快准狠的触发信息和触达每一个用户,带来更为极致的使用体验。
这里引入一个关键词:控制时延
无疑是现代信息科技的重要指标,CDN的意图就是尽可能的减少资源在转发、传输、链路抖动等情况下顺利保障信息的连贯性
根据论文《WAITING TIMES IN QUALITY OF EXPERIENCE FOR WEB BASED SERVICES》中提出的:
其指出基于人脑在等待不同时长的信息时,产生的不同意识行为,进而对信息获取产生的差别感官体验。
感知的持续时间 VS 客观持续时间
根据研究发现:
当人们获得Voice这类声音讯息时,好感度随时间流逝下降的最为迅速,仅需16分钟“评估意见等级”下降了70%,可见音像资源受缓冲时间的影响可见一斑
✫0.1 s: 用户几乎感觉不到系统是否不连贯性。
✫1.0 s: 用户明显注意到时延的发生,但是在该时间内思维依然是连贯的。
✫10 s: 超过该时间的时延会使用户失去等待意愿。
控制时延无疑是现代信息科技的重要指标,CDN的意图就是尽可能的减少资源在转发、传输、链路抖动等情况下顺利保障信息的连贯性。
再通俗点说就是在网速一定的前提下,CDN就像网络中快递员小哥
而且CDN这个快递员很是聪明
TA不是在用蛮力瞎跑、乱撞
TA还承建了很多家快递点,就近快递(缓存)
TA善于优化快递路径(调度)
还会对包裹进行更合理的重新打包(协议优化)
基础架构:
最简单的CDN网络由一个DNS服务器和几台缓存服务器组成:
- 当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器。
- CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回用户。
- 用户向CDN的全局负载均衡设备发起内容URL访问请求。
- CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
- 区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。
- 全局负载均衡设备把服务器的IP地址返回给用户。
- 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。
服务模式:
简单地说,CDN是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。
通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
举例说明:
国内访问量较高的网站、直播、视频平台,均使用CDN网络加速技术,虽然网站的访问巨大,但无论在什么地方访问都会感觉速度很快。而一般的网站如果服务器在网通,电信用户访问很慢,如果服务器在电信,网通用户访问又很慢。
通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的cache服务器内,通过DNS负载均衡的技术,判断用户来源就近访问cache服务器取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度,如同提供了多个分布在各地的加速器,以达到快速、可冗余的为多个网站加速的目的。
CDN服务最初用于确保快速可靠地分发静态内容,这些内容可以缓存,最适合在网速庞大的网络中存储和分发,该网络在几十多个国家的十几个网络中的覆盖CDN网络服务器。由于动态内容必须通过互联网来传输,因此要提供快速的网络体验。如今的CDN可谓是大文件、小文件、点播、直播、动静皆宜!
主要特点:
1、本地Cache加速,提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度,并大大提高以上性质站点的稳定性
2、镜像服务消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量。
3、远程加速 远程访问用户根据DNS负载均衡技术 智能自动选择Cache服务器,选择最快的Cache服务器,加快远程访问的速度
4、带宽优化 自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能。
5、集群抗攻击 广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种D.D.o.S攻击对网站的影响,同时保证较好的服务质量 。
关键技术:
内容发布:它借助于建立索引、缓存、流分裂、组播(Multicast)等技术
内容路由:它是整体性的网络负载均衡技术,通过内容路由器中的重定向(DNS)机制,在多个远程POP上均衡用户的请求,以使用户请求得到最近内容源的响应;
内容交换:它根据内容的可用性、服务器的可用性以及用户的背景,在POP的缓存服务器上,利用应用层交换、流分裂、重定向(ICP、WCCP)等技术,智能地平衡负载流量;
性能管理:它通过内部和外部监控系统,获取网络部件的状况信息,测量内容发布的端到端性能(如包丢失、延时、平均带宽、启动时间、帧速率等),保证网络处于最佳的运行状态。
Q & A
1.CDN加速是对网站所在服务器加速,还是对其域名加速?
CDN是只对网站的某一个具体的域名加速。如果同一个网站有多个域名,则访客访问加入CDN的域名获得加速效果,访问未加入CDN的域名,或者直接访问IP地址,则无法获得CDN效果。
2.CDN和镜像站点比较有何优势?
CDN对网站的访客完全透明,不需要访客手动选择要访问的镜像站点,保证了网站对访客的友好性。CDN对每个节点都有可用性检查,不合格的节点会第一时间剔出,从而保证了极高的可用率,而镜像站点无法实现这一点。CDN部署简单,对原站基本不做任何改动即可生效。
3.CDN和双线机房相比有何优势?
常见的双线机房只能解决网通和电信互相访问慢的问题,其它ISP(譬如教育网,移动网,铁通)互通的问题还是没得到解决。而CDN是访问者就近取数据,而CDN的节点遍布各ISP,从而保证了网站到任意ISP的访问速度。另外CDN因为其流量分流到各节点的原理,天然获得抵抗网络攻击的能力。
4.CDN使用后,原来的网站是否需要做修改,做什么修改?
一般而言,网站无需任何修改即可使用CDN获得加速效果。只是对需要判断访客IP程序,才需要做少量修改。
5.为什么我的网站更新后,通过CDN后看到网页还是旧网页,如何解决?
由于CDN采用各节点缓存的机制,网站的静态网页和图片修改后,如果CDN缓存没有做相应更新,则看到的还是旧的网页。为了解决这个问题,CDN管理面板中提供了URL推送服务,来通知CDN各节点刷新自己的缓存。在URL推送地址栏中,输入具体的网址或者图片地址,则各节点中的缓存内容即被统一删除,并且当即生效。如果需要推送的网址和图片太多,可以选择目录推送,输入 http://www.kkk.com/news 即可以对网站下news目录下所有网页和图片进行了刷新。
6.能不能让CDN不缓存某些即时性要求很高的网页和图片?
只需要使用动态页面,asp,php,jsp等动态技术做成的页面不被CDN缓存,无需每次都要刷新。或者采用一个网站两个域名,一个启用CDN,另外一个域名不用CDN,对即时性要求高的页面和图片放在不用CDN的域名下。
7.网站新增了不少网页和图片,这些需要使用URL推送吗?
后来增加的网页和图片,不需要使用URL推送,因为它们本来就不存在缓存中。
8.网站用CDN后,有些地区反映无法访问了,怎么办?
CDN启用后,访客不能访问网站有很多种可能,可能是CDN的问题,也可能是源站点出现故障或者源站点被关闭,还可能是访客自己所在的网络出现问题,甚至我们实际故障排除中,还出现过客户自己计算机中毒,导致无法访问网站。客户报告故障时,可随时联系我们24小时技术部进行处理。
9.哪些情况推荐使用CDN?
一般来说以资讯、内容等为主的网站,具有一定访问体量的网站
资讯网站、政府机构网站、行业平台网站、商城等以动态内容为主的网站
论坛、博客、交友、SNS、网络游戏、搜索/查询、金融等。提供http下载的网站
软件开发商、内容服务提供商、网络游戏运行商、源码下载等有大量流媒体点播应用的网站
拥有视频点播平台的电信运营商、内容服务提供商、体育频道、宽频频道、在线教育、视频博客等
10.哪些情况不适用于CDN?
此类极端状况不建议您使用CDN服务
推荐阅读:
CDN知识详解
直播、短视频平台如何选择合适的CDN?
编辑于 2018-09-20
赞同 2326 条评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
Aceyclee
相信理想主义的现实主义者
7 人赞同了该回答
目录
▎CDN 基本概念
▎CDN 的主要场景与架构
▎CDN 访问原理
▎为什么要用 CDN?
▎CDN 基本概念
CDN 是什么?使用 CDN 有什么优势?
Aceyclee的视频
· 1013 播放
CDN 即内容分发网络(Content Delivery Network),是现有 Internet 中增加的一层新的网络架构,由遍布全国的高性能加速节点构成。这些高性能的服务节点会按照一定的缓存策略存储业务内容,当用户向该业务内容发起请求时,请求会被调度至最接近用户的服务节点,直接由服务节点快速响应,有效降低用户访问延迟,提升可用性。
简单讲,CDN 就是通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容。CDN 主要解决这么些问题:
- 物理距离远,多次网络转发,延时高不稳定;
- 所在运营商不同,需运营商之间转发绕行;
- 网络带宽处理能力有限,海量请求时,响应速度与可用性降低。
▎CDN 的主要场景与架构
- 网站加速
- 下载加速
- 音视频加速
目前 CDN 发展到还有全站加速、安全加速等其他功能,具体以各厂商为准。
CDN 网站加速架构图(以腾讯云 CDN 为例)
▎CDN 访问原理
假设业务源站域名为 www.test.com
,域名接入 CDN 开始使用加速服务后,当用户发起 HTTP 请求时,实际的处理流程如下图所示:
- 用户向
www.test.com
下的某图片资源(如:1.jpg)发起请求,会先向 Local DNS 发起域名解析请求。 - 当 Local DNS 解析
www.test.com
时,会发现已经配置了 CNAMEwww.test.com.cdn.dnsv1.com
,解析请求会发送至 Tencent DNS(GSLB),GSLB 为腾讯云自主研发的调度体系,会为请求分配最佳节点 IP。 - Local DNS 获取 Tencent DNS 返回的解析 IP。
- 用户获取解析 IP。
- 用户向获取的 IP 发起对资源 1.jpg 的访问请求。
- 若该 IP 对应的节点缓存有 1.jpg,则会将数据直接返回给用户(10),此时请求结束。若该节点未缓存 1.jpg,则节点会向业务源站发起对 1.jpg 的请求(6、7、8),获取资源后,结合用户自定义配置的缓存策略,将资源缓存至节点(9),并返回给用户(10),此时请求结束。
▎为什么要用 CDN?
1. 提升客户体验
现在网站内容早已从传统的图文发展到以大量高清图片、流媒体为主(看知乎狂推视频内容就可见一斑…)。这样的网站对资源消耗是非常大的,对网络质量要求也很高。因而,当代的网站矛盾是网民希望内容越来越丰富,同时内容访问速度也要越来越快;
2. 减少源站成本
方才提到,网站内容的丰富度让源站承载能力受到很大挑战,如果采用传统的源站扩容或者考虑用户访问进行分布式部署,成本压力都非常大。而 CDN 目前来说是最具性价比的解决方案;
3. 网络安全防护
目前安全问题主要有各类网络攻击(DDoS 攻击等)以及内容安全问题。
历史上共出现 10 起超过 300 Gbps 的 DDoS 攻击,DDoS 攻击数量同比增长了 1 倍以上,原因主要是重复攻击和对同一目标的攻击次数增多。除了攻击,在内容安全上,很多盗版网站通过盗链之类的方式窃取内容,这些都是 CDN 解决问题的范畴。
内容分发网络 (CDN) 原理与实践
京东
¥ 109.27
去购买
相关回答:
什么是云计算?www.zhihu.com云计算是如何降低成本的?www.zhihu.com
编辑于 2020-12-09
真诚赞赏,手留余香
赞赏
还没有人赞赏,快来当第一个赞赏的人吧!
赞同 7添加评论目录
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
阿里云云栖号
已认证的官方帐号
453 人赞同了该回答
针对知乎上有关CDN热点问题:什么是CDN?为什么要用?适用哪些场景?常见名词有哪些?云栖社区特别邀请到阿里云视频服务运营美女:“樰篱”(发音:xue li),来为大家解读。
作者简介:阿里花名樰篱,阿里云视频服务产品运营
考虑到对CDN认知程度的各层小伙伴,开头有必要简单介绍下CDN原理(高年级同学可以直接跳过一):
一、CDN的基本原理和基础架构
CDN是将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。
(本章节部分内容摘引自:1.2 CDN的基本工作过程 - 51CTO.COM)
最简单的CDN网络由一个DNS服务器和几台缓存服务器组成:
- 当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器。
- CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回用户。
- 用户向CDN的全局负载均衡设备发起内容URL访问请求。
- CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
- 区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。
- 全局负载均衡设备把服务器的IP地址返回给用户。
- 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。
CDN关键组件
- LVS做四层均衡负载
DR模式
双LVS做Active-Active互备
负载均衡算法采用wrr
- Tengine做七层负载均衡
阿里基于Nginx开发的高性能HTTP服务器,已经开源,详细请了解:The Tengine Web Server
主动健康检查
SPDY v3支持
- Swift做HTTP缓存
高性能Cache
磁盘(SSD/SATA)
CDN基础架构
CDN部署架构
------------------------------------华丽的分割线------------------------------------
二、为什么要使用CDN?或者说CDN能解决什么问题?
如果你在经营一家网站,那你应该知道几点因素是你制胜的关键:
- 内容有吸引力
- 访问速度快
- 支持频繁的用户互动
- 可以在各处浏览无障碍
另外,你的网站必须能在复杂的网络环境下运行,考虑到全球的用户访问体验。你的网站也会随着使用越来越多的对象(如图片、帧、CSS及APIs)和形形色色的动作(分享、跟踪)而系统逐渐庞大。所以,系统变慢带来用户的流失。
Google及其它网站的研究表明,一个网站每慢一秒钟,就会丢失许多访客,甚至这些访客永远不会再次光顾这些网站。可以想像,如果网站是你的盈利渠道或是品牌窗口,那么网站速度慢将是一个致命的打击。
这就是你使用CDN的第一个也是最重要的原因:**为了加速网站的访问**
除此之外,CDN还有一些作用:
1. 为了实现跨运营商、跨地域的全网覆盖
互联不互通、区域ISP地域局限、出口带宽受限制等种种因素都造成了网站的区域性无法访问。CDN加速可以覆盖全球的线路,通过和运营商合作,部署IDC资源,在全国骨干节点商,合理部署CDN边缘分发存储节点,充分利用带宽资源,平衡源站流量。阿里云在国内有500+节点,海外300+节点,覆盖主流国家和地区不是问题,可以确保CDN服务的稳定和快速。
2. 为了保障你的网站安全
CDN的负载均衡和分布式存储技术,可以加强网站的可靠性,相当无无形中给你的网站添加了一把保护伞,应对绝大部分的互联网攻击事件。防攻击系统也能避免网站遭到恶意攻击。
3. 为了异地备援
当某个服务器发生意外故障时,系统将会调用其他临近的健康服务器节点进行服务,进而提供接近100%的可靠性,这就让你的网站可以做到永不宕机。
4. 为了节约成本投入
使用CDN加速可以实现网站的全国铺设,你根据不用考虑购买服务器与后续的托管运维,服务器之间镜像同步,也不用为了管理维护技术人员而烦恼,节省了人力、精力和财力。
5. 为了让你更专注业务本身
CDN加速厂商一般都会提供一站式服务,业务不仅限于CDN,还有配套的云存储、大数据服务、视频云服务等,而且一般会提供7x24运维监控支持,保证网络随时畅通,你可以放心使用。并且将更多的精力投入到发展自身的核心业务之上。
------------------------------------华丽的分割线------------------------------------
三、CDN适用哪些场景?
1、网站站点/应用加速
站点或者应用中大量静态资源的加速分发,建议将站点内容进行动静分离,动态文件可以结合云服务器ECS,静态资源如各类型图片、html、css、js文件等,建议结合 对象存储OSS 存储海量静态资源,可以有效加速内容加载速度,轻松搞定网站图片、短视频等内容分发
- 架构示意图
2、视音频点播/大文件下载分发加速
支持各类文件的下载、分发,支持在线点播加速业务,如mp4、flv视频文件或者平均单个文件大小在20M以上,主要的业务场景是视音频点播、大文件下载(如安装包下载)等,建议搭配对象存储OSS使用,可提升回源速度,节约近2/3回源带宽成本。
- 架构示意图
3、视频直播加速(内测中)
视频流媒体直播服务,支持媒资存储、切片转码、访问鉴权、内容分发加速一体化解决方案。结合弹性伸缩服务,及时调整服务器带宽,应对突发访问流量;结合媒体转码服务,享受高速稳定的并行转码,且任务规模无缝扩展。目前CDN直播加速已服务内部用户测试并优化,即将上线,敬请期待
- 架构示意图
4、移动应用加速
移动APP更新文件(apk文件)分发,移动APP内图片、页面、短视频、UGC等内容的优化加速分发。提供httpDNS服务,避免DNS劫持并获得实时精确的DNS解析结果,有效缩短用户访问时间,提升用户体验。
- 架构示意图
------------------------------------华丽的分割线------------------------------------
四、关于CDN的一些常见名词:
1、Origin Server源站
做 CDN 之前的客户真正的服务器。
2、User
访问者,也就是要访问网站的网民。
3、Last Mile
最后一公里,也就是网民到他所访问到的 CDN 服务器之间的路径。
4、域名
域名是Internet网络上的一个服务器或一个网络系统的名字,全世界,没有重复的域名。
5、CNAME记录
它是一个别名记录( Canonical Name );当 DNS 系统在查询 CNAME 左面的名称的时候,都会转向 CNAME 右面的名称再进行查询,一直追踪到最后的 PTR 或 A 名称,成功查询后才会做出回应,否则失败。
6、CNAME域名
CDN的域名加速需要用到CNAME记录,在阿里云控制台配置完成CDN加速后,您会得到一个加速后的域名,称之为CNAME域名(该域名一定是*.*http://kunlun.com), 用户需要将自己的域名作CNAME指向这个*.*http://kunlun.com的域名后,域名解析的工作就正式转向阿里云,该域名所有的请求都将转向阿里云CDN的节点。
7、DNS
DNS即Domain Name System,是域名解析服务的意思。它在互联网的作用是:把域名转换成为网络可以识别的ip地址。人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是一一对应的,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。
比如:上网时输入的百度一下,你就知道会自动转换成为220.181.112.143
8、边缘节点
也称CDN节点、Cache节点等;是相对于网络的复杂结构而提出的一个概念,指距离最终用户接入具有较少的中间环节的网络节点,对最终接入用户有较好的响应能力和连接速度。其作用是将访问量较大的网页内容和对象保存在服务器前端的专用cache设备上,以此来提高网站访问的速度和质量。
9、cache
cache高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。存储器的高速缓冲存储器存储了频繁访问的RAM位置的内容及这些数据项的存储地址。当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址。如果存有该地址,则将数据返回处理器;如果没有保存该地址,则进行常规的存储器访问。因为高速缓冲存储器总是比主RAM存储器速度快,所以当RAM的访问速度低于微处理器的速度时,常使用高速缓冲存储器。
编辑于 2017-12-31
赞同 45320 条评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
Xigang
腾讯交互设计师
173 人赞同了该回答
CDN主要功能是在不同的地点缓存内容,通过负载均衡技术,将用户的请求定向到最合适的缓存服务器上去获取内容,比如说,是北京的用户,我们让他访问北京的节点,深圳的用户,我们让他访问深圳的节点。通过就近访问,加速用户对网站的访问。解决Internet网络拥堵状况,提高用户访问网络的响应速度。
简单介绍下CDN与传统网站访问的区别:
传统访问访问:
使用了CDN的网站访问:
与传统访问方式不同,CDN网络则是在用户和服务器之间增加缓存层,将用户的访问请求引导到最优的缓存节点而不是服务器源站点,从而加速访问速度。
完整的CDN工作流程:
总结一下CDN的工作原理:通过权威DNS服务器来实现最优节点的选择,通过缓存来减少源站的压力。
CDN应用场景:
静态网页
图片小文件、博客
大文件下载
软件下载、视频点播或图片存储网站
动态加速
直播网站
应用加速
手机APP
最后看一下使用了CDN后的实际访问效果
上图数据来源于腾讯云CDN,对比用户的网站使用了CDN和没有使用CDN的效果,帮助大家更形象的理解CDN解决什么问题。
不用CDN时,访问请求导源站用的时间是1.27S。
而使用了腾讯云CDN后,会将这个访问时间缩短为0.29s,访问速度提高了5倍,而且可用性也可以得到很好的提升,原因是CDN的网络的链路质量都比较好。
编辑于 2016-09-08
赞同 1736 条评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
阿里云大学
云生态下的创新人才工场
7 人赞同了该回答
CDN工作原理
CDN的工作原理就是将您源站的资源缓存到位于全国各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、分担源站压力,保证用户访问资源的速度和体验。
"CDN加速网站访问”视频课程:http://click.aliyun.com/m/36977/
阿里云CDN使用说明:http://click.aliyun.com/m/27844/
为什么要使用CDN?
如果你在经营一家网站,那你应该知道几点因素是你制胜的关键:
- 内容有吸引力
- 访问速度快
- 支持频繁的用户互动
- 可以在各处浏览无障碍
另外,你的网站必须能在复杂的网络环境下运行,考虑到全球的用户访问体验。你的网站也会随着使用越来越多的对象(如图片、帧、CSS及APIs)和形形色色的动作(分享、跟踪)而系统逐渐庞大。所以,系统变慢带来用户的流失。
Google及其它网站的研究表明,一个网站每慢一秒钟,就会丢失许多访客,甚至这些访客永远不会再次光顾这些网站。可以想像,如果网站是你的盈利渠道或是品牌窗口,那么网站速度慢将是一个致命的打击。
这就是你使用CDN的第一个也是最重要的原因:为了加速网站的访问
除此之外,CDN还有一些作用:
1. 为了实现跨运营商、跨地域的全网覆盖
互联不互通、区域ISP地域局限、出口带宽受限制等种种因素都造成了网站的区域性无法访问。CDN加速可以覆盖全球的线路,通过和运营商合作,部署IDC资源,在全国骨干节点商,合理部署CDN边缘分发存储节点,充分利用带宽资源,平衡源站流量。阿里云在国内有500+节点,海外300+节点,覆盖主流国家和地区不是问题,可以确保CDN服务的稳定和快速。
2. 为了保障你的网站安全
CDN的负载均衡和分布式存储技术,可以加强网站的可靠性,相当无无形中给你的网站添加了一把保护伞,应对绝大部分的互联网攻击事件。防攻击系统也能避免网站遭到恶意攻击。
3. 为了异地备援
当某个服务器发生意外故障时,系统将会调用其他临近的健康服务器节点进行服务,进而提供接近100%的可靠性,这就让你的网站可以做到永不宕机。
4. 为了节约成本投入
使用CDN加速可以实现网站的全国铺设,你根据不用考虑购买服务器与后续的托管运维,服务器之间镜像同步,也不用为了管理维护技术人员而烦恼,节省了人力、精力和财力。
5. 为了让你更专注业务本身
CDN加速厂商一般都会提供一站式服务,业务不仅限于CDN,还有配套的云存储、大数据服务、视频云服务等,而且一般会提供7x24运维监控支持,保证网络随时畅通,你可以放心使用。并且将更多的精力投入到发展自身的核心业务之上。
使用CDN后的http请求处理流程
关于阿里云CDN
阿里云拥有 1000+ 国内节点,200+ 海外节点,80T 的带宽能力储备。海外节点覆盖全球六大洲 30 多个国家和地区,国内节点完整覆盖 34 个省级区域。大量节点位于省会等一线城市,骨干网络接入,全万兆网卡;且单节点存储容量大(40TB — 1.5PB),带宽负载大(40-200Gbps),可以很好地应对突发情况。
CDN使用教程:http://click.aliyun.com/m/36977/
编辑于 2018-01-15
赞同 7添加评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
终端研发部
公众号:【终端研发部】资深程序猿/持续干货输出/专业面试指导
3 人赞同了该回答
CDN是什么?
随着互联网的发展,用户在使用网络时对网站的浏览速度和效果愈加重视,但由于网民数量激增,网络访问路径过长,从而使用户的访问质量受到严重影响。特别是当用户与网站之间的链路被突发的大流量数据拥塞时,对于异地互联网用户急速增加的地区来说,访问质量不良更是一个急待解决的问题。如何才能让各地的用户都能够进行高质量的访问,并尽量减少由此而产生的费用和网站管理压力呢?内容发布网络(Content Delivery Network,CDN)诞生了。
CDN是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。
内容分发网络的总承载量可以比单一骨干最大的带宽还要大。这使得内容分发网络可以承载的用户数量比起传统单一服务器多。也就是说,若把有100Gbps处理能力的服务器放在只有10Gbps带宽的数据中心,则亦只能发挥出10Gbps的承载量。但如果放到十个有10Gbps的地点,整个系统的承载量就可以到10*10Gbps。同时,将服务器放到不同地点,可以减少互连的流量,进而降低带宽成本。而节点的实际数量就会影响CDN的效果,以阿里云为例,阿里云的CDN全国具有500多个节点,并且具有分布式系统架构和充足的带宽和存储资源,可以保证CDN服务的稳定和快速。
CDN工作原理
CDN的工作原理就是将您源站的资源缓存到位于全国各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、分担源站压力,保证用户访问资源的速度和体验。
CDN加速有什么优势?
内容分发网络的总承载量可以比单一骨干最大的带宽还要大。这使得内容分发网络可以承载的用户数量比起传统单一服务器多。也就是说,若把有100Gbps处理能力的服务器放在只有10Gbps带宽的数据中心,则亦只能发挥出10Gbps的承载量。但如果放到十个有10Gbps的地点,整个系统的承载量就可以到10*10Gbps。同时,将服务器放到不同地点,可以减少互连的流量,进而降低带宽成本。而节点的实际数量就会影响CDN的效果,以阿里云为例,阿里云的CDN全国具有500多个节点,并且具有分布式系统架构和充足的带宽和存储资源,可以保证CDN服务的稳定和快速。
内容分发网络另外一个好处在于有异地备援。当某个服务器故障时,系统将会调用其他邻近地区的服务器服务,进而提供接近100%的可靠度。
除此之外,内容分发网络提供给服务提供者更多的控制权。提供服务的人可以针对客户、地区,或是其他因子调整。另外就是,对于全国而言,南北方的网络运营商也不是一个,但是跨运营商的网络访问的速度就会大大降低。但是对于网站的运营者或者开发者而言,总不能让南北方的童鞋们访问自己的网站的速度有明显的差异吧,为了解决这个问题,使用CDN技术就是一个非常好的选择,刚才提到的阿里云CDN,就可以实现跨运营商、跨地域的全网覆盖。
你为什么要使用CDN?
如果你在经营一家网站,那你应该知道几点因素是你制胜的关键:
- 内容有吸引力
- 访问速度快
- 支持频繁的用户互动
- 可以在各处浏览无障碍
另外,你的网站必须能在复杂的网络环境下运行,考虑到全球的用户访问体验。你的网站也会随着使用越来越多的对象(如图片、帧、CSS及APIs)和形形×××的动作(分享、跟踪)而系统逐渐庞大。所以,系统变慢带来用户的流失。
Google及其它网站的研究表明,一个网站每慢一秒钟,就会丢失许多访客,甚至这些访客永远不会再次光顾这些网站。可以想像,如果网站是你的盈利渠道或是品牌窗口,那么网站速度慢将是一个致命的打击。
这就是你使用CDN的第一个也是最重要的原因:为了加速网站的访问
除此之外,CDN还有一些作用:
1. 为了实现跨运营商、跨地域的全网覆盖
互联不互通、区域ISP地域局限、出口带宽受限制等种种因素都造成了网站的区域性无法访问。CDN加速可以覆盖全球的线路,通过和运营商合作,部署IDC资源,在全国骨干节点商,合理部署CDN边缘分发存储节点,充分利用带宽资源,平衡源站流量。阿里云在国内有500+节点,海外300+节点,覆盖主流国家和地区不是问题,可以确保CDN服务的稳定和快速。
2. 为了保障你的网站安全
CDN的负载均衡和分布式存储技术,可以加强网站的可靠性,相当无无形中给你的网站添加了一把保护伞,应对绝大部分的互联网攻击事件。防攻击系统也能避免网站遭到恶意攻击。
3. 为了异地备援
当某个服务器发生意外故障时,系统将会调用其他临近的健康服务器节点进行服务,进而提供接近100%的可靠性,这就让你的网站可以做到永不宕机。
4. 为了节约成本投入
使用CDN加速可以实现网站的全国铺设,你根据不用考虑购买服务器与后续的托管运维,服务器之间镜像同步,也不用为了管理维护技术人员而烦恼,节省了人力、精力和财力。
5. 为了让你更专注业务本身
CDN加速厂商一般都会提供一站式服务,业务不仅限于CDN,还有配套的云存储、大数据服务、视频云服务等,而且一般会提供7x24运维监控支持,保证网络随时畅通,你可以放心使用。并且将更多的精力投入到发展自身的核心业务之上。
CDN适用哪些场景?
CDN是将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。今天为大家分享几个CDN的典型适用场景。
网站站点/应用加速
站点或者应用中大量静态资源的加速分发,建议将站点内容进行动静分离,动态文件可以结合云服务器ECS,静态资源如各类型图片、html、css、js文件等,建议结合 对象存储OSS 存储海量静态资源,可以有效加速内容加载速度,轻松搞定网站图片、短视频等内容分发
视音频点播/大文件下载分发加速
支持各类文件的下载、分发,支持在线点播加速业务,如mp4、flv视频文件或者平均单个文件大小在20M以上,主要的业务场景是视音频点播、大文件下载(如安装包下载)等,建议搭配对象存储OSS使用,可提升回源速度,节约近2/3回源带宽成本。
视频直播加速
阿里云一站式 视频直播服务 服务已正式上线发布!基于领先的内容接入与分发网络和大规模分布式实时转码技术打造的音视频直播平台,提供便捷接入、高清流畅、低延迟、高并发的音视频直播服务。支持多直播场景,全景数据统计,丰富角度分析;直播功能丰富,录制回放、实时封面、实时转码、连麦混流。
移动应用加速
移动APP更新文件(apk文件)分发,移动APP内图片、页面、短视频、UGC等内容的优化加速分发。提供httpDNS服务,避免DNS劫持并获得实时精确的DNS解析结果,有效缩短用户访问时间,提升用户体验。
CDN的基本工作过程
使用CDN会极大地简化网站的系统维护工作量,网站维护人员只需将网站内容注入CDN的系统,通过CDN部署在各个物理位置的服务器进行全网分发,就可以实现跨运营商、跨地域的用户覆盖。由于CDN将内容推送到网络边缘,大量的用户访问被分散在网络边缘,不再构成网站出口、互联互通点的资源挤占,也不再需要跨越长距离IP路由了。
CDN是如何工作的呢?先看看没有CDN服务时,一个网站是如何向用户提供服务的。
今天我们看到的网站系统基本上都是基于B/S架构的。B/S架构,即Browser-Server(浏览器 服务器)架构,是对传统C/S架构的一种变化或者改进架构。在这种架构下,用户只需使用通用浏览器,主要业务逻辑在服务器端实现。B/S架构,主要是利用了不断成熟的WWW浏览器技术,结合浏览器的多种Script语言(VBScript、JavaScript等)和ActiveX等技术,在通用浏览器上实现了C/S架构下需要复杂的软件才能实现的强大功能。
①用户在自己的浏览器中输入要访问的网站域名。
②浏览器向本地DNS服务器请求对该域名的解析。
③本地DNS服务器中如果缓存有这个域名的解析结果,则直接响应用户的解析请求。
④本地DNS服务器中如果没有关于这个域名的解析结果的缓存,则以递归或迭代方式向整个DNS系统请求解析,获得应答后将结果反馈给浏览器。
⑤浏览器得到域名解析结果,就是该域名相应的服务设备的IP地址。
⑥浏览器向服务器请求内容。
⑦服务器将用户请求内容传送给浏览器。
在网站和用户之间加入CDN以后,用户不会有任何与原来不同的感觉。最简单的CDN网络有一个DNS服务器和几台缓存服务器就可以运行了。一个典型的CDN用户访问调度流程如图1-3所示。
①当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器。
②CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回用户。
③用户向CDN的全局负载均衡设备发起内容URL访问请求。
④CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
⑤区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。
⑥全局负载均衡设备把服务器的IP地址返回给用户。
⑦用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。
DNS服务器根据用户IP地址,将域名解析成相应节点的缓存服务器IP地址,实现用户就近访问。使用CDN服务的网站,只需将其域名解析权交给CDN的GSLB设备,将需要分发的内容注入CDN,就可以实现内容加速了。
关于CDN那些名词,你知道吗?
Origin Server源站
做 CDN 之前的客户真正的服务器。
User
访问者,也就是要访问网站的网民。
Last Mile
最后一公里,也就是网民到他所访问到的 CDN 服务器之间的路径。
**域名 **
域名是Internet网络上的一个服务器或一个网络系统的名字,全世界,没有重复的域名。
CNAME记录
它是一个别名记录( Canonical Name );当 DNS 系统在查询 CNAME 左面的名称的时候,都会转向 CNAME 右面的名称再进行查询,一直追踪到最后的 PTR 或 A 名称,成功查询后才会做出回应,否则失败。
CNAME域名
CDN的域名加速需要用到CNAME记录,在阿里云控制台配置完成CDN加速后,您会得到一个加速后的域名,称之为CNAME域名(该域名一定是.http://kunlun.com), 用户需要将自己的域名作CNAME指向这个.http://kunlun.com的域名后,域名解析的工作就正式转向阿里云,该域名所有的请求都将转向阿里云CDN的节点。
DNS
DNS即Domain Name System,是域名解析服务的意思。它在互联网的作用是:把域名转换成为网络可以识别的ip地址。人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是一一对应的,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。
比如:上网时输入的www.baidu.com会自动转换成为220.181.112.143
边缘节点
也称CDN节点、Cache节点等;是相对于网络的复杂结构而提出的一个概念,指距离最终用户接入具有较少的中间环节的网络节点,对最终接入用户有较好的响应能力和连接速度。其作用是将访问量较大的网页内容和对象保存在服务器前端的专用cache设备上,以此来提高网站访问的速度和质量。
cache
cache高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。存储器的高速缓冲存储器存储了频繁访问的RAM位置的内容及这些数据项的存储地址。当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址。如果存有该地址,则将数据返回处理器;如果没有保存该地址,则进行常规的存储器访问。因为高速缓冲存储器总是比主RAM存储器速度快,所以当RAM的访问速度低于微处理器的速度时,常使用高速缓冲存储器。
参考链接:
https://blog.51cto.com/rainy0426/2057364
https://developer.aliyun.com/article/364241
发布于 01-03
赞同 3添加评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
森山
杭州奇麟正维环境技术有限公司 硬件总工程师
2 人赞同了该回答
CDN就是超级节点,服务器的影子。
主服务器A会把内容复制到各个地理区域的CDN服务器B、C、D、E、……N里,用户访问网站时,自动链接到就近的B或C或其他。
它有2个好处,我们以某视频网站做个例子:
1、用户访问体验更好,本来是中心化的访问,我们所有用户都是访问主服务器A,现在不需要了,我们分别访问就近的CDN服务器,由于距离近,不占用主干网,网速和效率提升,最直接的,用户打开视频很快。
2、对视频网站来说,主服务器A的压力大大减小,带宽费用大大降低。
发布于 2020-12-06
赞同 2添加评论
分享
收藏喜欢
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
framic
107 人赞同了该回答
传统网站访问类似于淘宝购物,使用了cdn的网站访问类似于京东购物。
例如:我们要买一个电子产品,在淘宝(这里指第三方卖家)买的话,发货地点一般就一个,假如发货地点是深圳,我们在上海,俩天左右可以送到,要是我们在乌鲁木齐,至少要一周。而在京东上买自营电子产品的话,它会根据我们的收货地点,在全国范围内找离我们最近、送达最快的仓库,不管我们在上海,还是乌鲁木齐,我们的收货时间会大大减少。京东建立的仓储系统,类似于cdn。
发布于 2016-10-13
赞同 1078 条评论
分享
收藏喜欢
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
华为云开发者社区
已认证的官方帐号
21 人赞同了该回答
楼主提的问题分解关注点主要两个:
1、CDN是什么?CDN有什么优势?
2、对于场景如纯内网的应用是否需要CDN?
小宅先对您最关切的问题2结论就是,对于您所说的纯内网软件开发部署场景不需要使用CDN,只有当您需要大规模对互联网对对公网发布的时候就需要考虑部署架构以及CDN服务的问题。(PS:也有内网需要用到CDN的场景的,比如电信IPTV,移动OTT,广电数字电视这种大内容应用,服务属于广域网了。)
下面回到问题1的话题,这个属于科普话题了,小宅就不重复前面一些营销号搞的那么高深莫测了,先简单介绍下CDN提出的背景要解决什么问题而提,然后再介绍CDN概念及有哪些好处,以及对于我们业务部署来说关注点是什么。
CDN缘起背景(本段摘自《CDN技术详解》一书)
1991年之后的近十年间,公众主要以拨号方式接入互联网,带宽低而且网民数量少,此时主要的瓶颈在最后一公里——用户接入带宽,而没有给提供内容的服务器和骨干传输网络带来太大的压力。随着互联技术的发展和网民数量的增加,给内容源服务器和传输骨干网络带来越来越大的压力,互联网瓶颈从接入段逐渐向骨干传输网络和服务器端转移。
1995年,麻省理工学院教授,互联网发明者之一Tim Berners-Lee发起的一项技术挑战造就了后来鼎鼎大名的CDN服务公司 Akamai。Berners-Lee博士预见到在不久的将来网络拥塞将成为互联网发展的最大障碍,于是他提出一个学术难题,要发明一种全新的、从根本上解决问题的方法来实现互联网内容的无拥塞分发,这项学术难题最终催生出一种革新性的互联网服务——CDN。当时Berners-Lee博士隔壁是 Tom Leighton教授的办公室,一位麻省理工学院应用数学教授,他被Berners-Lee的挑战激起了兴趣。Leighton博士意识到应用数学和运算学可以解决网络拥塞的问题,于是他请研究生Danny C. Lewin和其他几位顶级研究人员一起破解这个技术难题。随后另外几位计算机科学和数据网络方面的科学家也加入Leighton博士的队伍中来,他们开发了数学运算法则来处理内容的动态路由计算,并开始实施自己的商业计划,最终成立 Akamai公司。这些世界级的科学家开发出一套突破性的运算法则,用于在网络服务器所组成的大型网络中智能组织路由和复制内容。
这一段注意小宅加粗的关键词,这几个信息代表了CDN要解决的互联网访问关键问题点:1、“最后一公里”瓶颈(终端接入);2、“第一公里”瓶颈(服务端接入);3、解决长途骨干传输瓶颈;4、对等互链关口;另外还有一个关键信息Akamai世界上目前算CDN的鼻祖公司也是最牛逼公司诞生了(从过程看要让娃娃们学好数学,数学是科学技术第一生产要素啊!)。
看到这里是不是感觉这些词有那么点熟悉?对的,其实他跟我们现实生活的物流网一样样的,举个例子:以前在网上购物,买家付款之后,卖家确认发货。如果卖家是在北京,买家是在深圳,那么要把货从北京发到深圳,可能需要3-5天的时间,我记得08年的时候我购物从北京到深圳还要7~10天的样子。但是,如果卖家在深圳设立了一个物流转运中心,先把自己的货提前囤到深圳或者周边临近的广州、东莞的仓库,那么我们深圳的买家拍了一件商品,卖家不需要从北京发货,而是可以直接从深圳或者临近的仓库发货,可能就是一天的时候,买家就能收到货。京东,大家不陌生吧(最近很火),为什么京东自营或者物流的速度那么快,就是如此(在深圳有仓库,仓库里面有我们要买的货)。物流体系非常强,服务迅速,快就一个字!
好了有了上面的例子,在很大程度上能帮助大家理解CDN的概念了,CDN是什么?
度娘的解释,CDN的全称:CONTENT DELIVERY NETWORK,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息,将用户的请求重新导向离用户最近的服务节点上,这些就是边缘CDN节点,这些节点会跟源站节点进行内容预热存储起来,然后根据相关的调度为临近客户提供服务。
其目的是使用户可就近取得所需内容,解决INTERNET网络拥挤的状况,提高用户访问网站的响应速度,解决快就一个字的问题。
两张图(图片来自网络)给大家对比下CDN服务部署前后的区别:
部署前:
部署后:
从上面可以看到部署后,终端访问者就是从离TA最近的CDN服务器节点访问需要的内容,这就解决了长距离传输,跨对等网关访问,省去了源站的大量访问拥塞和带宽浪费的问题。
CDN的关键技术主要有内容路由技术、内容分发技术、内容存储技术、内容管理技术等。
关于具体技术这里就不展开讨论了。
那使用CDN有什么好处呢?
第一:有利于GOOGLE等搜索排名
GOOGLE已经把网站的打开速度当做一个重要的指标,所以网站的打开速度会影响排名。
使用CDN之后,网站由于打开速度变快,这样可以减少跳出率,也可以增加用户对网站的友好体验。
第二:有利于转化
毫无疑问,用户访问网站的时间提高了,跳出率减少了,当然会利于网站的转化率和销售量。
大家应该都没有耐心去等一个需要10秒才能打开的网站,这样的网站一开始就不友好,更别想提高网站的转化率了。
第三:网站不容易宕机
如果网站没有使用CDN,如果在同一时间涌入大量的流量,那么网站就会很可能会宕机。
使用CDN之后,可以减少网站宕机的情况,同时您的网站可以接收更多的流量。
第四:减少托管成本
很多网站使用VPS或自己购买服务器来托管网站,而很多VPS或服务器是有带宽限制的,使用CDN能减少成本。
使用CDN之后您的文件是被存储到不同的服务器上,所以能减少因为带宽而产生的费用。
可以这么说CDN主要服务于互联网业务,对于大部分企业和站长我们业务部署使用来说对CDN关注什么?
1、节点覆盖能力-》速度,节点数越多,用户可以享受到的加速效果越好
2、功能,功能越多越好
3、稳定,不稳定的CDN可不敢用
4、安全,不能出现安全问题。
5、对SEO好处越多越好。
好了,关于这篇科普答复就算答完了,总之CDN关键就是为了解决互联网访问瓶颈而生,所以CDN选择不“稳定”不看,不“快”不选,不“安全”不用,对于楼主的软件内网应用开发场景根本用不到CDN,后面如果公网部署的时候想用CDN可以参考后面,小宅会对市面CDN相关的产品厂商做相关的介绍。
编辑于 2018-09-04
赞同 216 条评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
Y2Nk4
Be Curious, Not Judgmental
7 人赞同了该回答
半年后的备注:
其实很多人应该没注意到,我一开始也认真去研究这个问题,其实我在这篇回答中是有不小心混淆掉CDN与对象存储(各家服务商上有不同的称呼,如OSS,COS等名字)这两个概念。
我个人的理解是,CDN更注重于分发,而OSS则注重于存储。
第一次看到自己会答的问题。鸡冻ꉂ(ˊᗜˋ*)
CDN,云分发网络的应用至今普遍大概有以下这几个应用:公开前端常用库,静态文件加速,全站加速,大文件下载分发,DDCC防御,以及新兴的直播/视频接入。
我的人感觉,七牛,又拍等这些CDN提供商的服务对于个人开发者,博客等没有太大经济,技术实力的站点而言也算是非常有用的。
为什么呢,我作为一个博主说下我的看法。
1.网络,响应速度,运维成本,技术要求
服务器网络可能有时候抽风,某条线路不能用,可能就要绕很远的路,多访问节点就能够避免这个问题,能够自动选着用户的最佳节点,有效提高访问响应速度,能够留下非常多的用户(想下你打开个网页都要几分钟,你还愿意继续看?(ㅍ_ㅍ))。
但是如果自己要建立多个访问节点,而且导致运维成本飙升(服务器价格不知道高到哪里去了,过几天你就倒闭了),而且还有技术上的,还有就是你买回来的服务器不一定线路比较好的,可能会几个节点性能参差不齐。再者就是一个人运维这么多节点好累的好伐。
2.DDCC防御
DDCC在当今作为一个暴力的,恶性的攻击,我们现阶段能做的也就拼下带宽跟服务器性能,但是作为一个普通开发者,博主,我们的经济实力一般不能说租到大防御的服务器(更何况是多个节点)。如果只有一台源服务器,被打掉就没有了,用户无法访问就会造成损失。
而cdn的优势就出来了,CDN提供商往往会有比较新的DDCC防御技术以及线路切换机制。云均衡负载加上多服务器节点使得DDCC流量能够被均衡分流而能够有效抵挡DDCC攻击,这是个人(一个源服务器)无法比拟的。
3.大文件云分发
有的时候,我们可能会放一些文件在自己博客/网站上供大家下载,但是如果下载用户多或者文件过大就会导致占用服务器带宽,服务器io,服务器硬盘,服务器流量。现在在售的大部分vps的带宽,硬盘和流量费用都比较贵,尚未到达随便浪无所谓的程度。这时候如果你是一台服务器(上下行100mbps[ps:这已经算是大带宽了],硬盘读写200mbps),如果有100个用户下载一个服务器上1Gb的文件,首先是服务器上占用了1Gb的空间,其次假设100个用户都是10mbs下载速度,不计算丢包,100个用户总计占用服务器1000mbps带宽,所以这时候有的用户就是无法下载或者速度很慢,这时候也一并拉着你网站的访问速度。再其次,如果这个月有1000个用户下载了你这个文件,那么这个月的流量已经高达1Tb了,除非你的服务器无限量,不然早就被停机了。
这个时候,你想说,我有钱,弄几台下载服务器不就行了嘛,还是那个问题,运维成本,技术支持。如果你是博客等个人网站,一两个月传几个几十m的文件到几个服务器倒没什么问题,但是想想要是下载站,资源分享站呢?让用户自己一个个手动传?想必不可能吧。
这时候,大文件云分发也就又显现出优势了,多节点,大带宽,自动分配最佳资源组,自动云分发,这些都是CDN服务的优势。而且,cdn流量相比服务器的流量更加便宜,速度更加好(注:如果云分发的文件被其他网站盗链/下载量很大时,将有可能带来高昂的流量费用,您需要配置好您的防盗链策略等,此处就不展开了)
4.公共前端常用库
这个就不必多说了,作为一个开发者,有的时候可能会懒得去把一些bootstrap,jQuery等一些常用js,css文件传到服务器上,相反,我们大多数更偏爱于直接调用,省下翻文件,上传等的功夫,而且选择版本方便,提高响应速度,也能避免需要加载墙外资源导致拖慢网站的问题(例如之前的谷歌字体[听说现在好了?没关注])。这里就不得不提下良心好用的BootCDN了。
5.直播/视频播放加速
七牛,又拍早已相继提供直播,视频加速服务,那么这里也就不得不提下了。
大体如第3条(大文件云分发)类似的流量,带宽,运维成本,线路的问题。
(直播/视频要求与大文件下载相比更苛刻,视频卡,直播卡谁想看)
6.静态文件加速(对象存储 - OSS)
众所周知,我们在访问网站时,图片等的加载是网页的瓶颈,这些文件比网页文件来大的多,直接拖慢网页响应速度。这个时候,除了lazyload,另外就是cdn加速了。
一般来说,一些刚起步的新人站长/新的域名没来得及(or懒得)备案,这就使得无法接入国内CDN服务(注:未在中国备案域名无法接入国内服务器),那么一种不同于传统的cdn加速的对象存储加速就这样诞生。
对象存储通过镜像您的站点的文件,然后通过网站插件/js代码将网页中的图片等静态资源用加速后的文件链接替换掉,既不影响访问,也提高响应速度。
这就是我个人认为云分发网络相比传统存储的优势,当然,大牛们可以在评论里指出错误/不足。第一次回答,*ฅ´ω`ฅ*大牛不要把我批判一番
最后
啊啊4点半了,手机撸了差不多一个小时了,睡不着啊。
无聊可以来看看我博客hhh
http://blog.y2nk4.com
编辑于 2020-12-03
赞同 74 条评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
自由职业之旅
重庆数字流网络科技有限公司 CEO
假设你的网站服务器在上海,如果川西的用户直接访问上海的数据,由于地理位置相对较远的原因,速度可能就会慢一点,但如果成都有个服务器节点,如果你开启了cdn,就会把数据同步到成都的机房,附近的用户就可以就近读取数据,肯定比每一次都去上海更快,大到每一个国家每一个洲都是如此。oss+预缓存+cdn,可以大幅度提升网站访问速度,并降低核心服务器的负担,因为很多静态的资源以及预生成的缓存页面都被放在了oss云存储上,并被分发到各个cdn节点服务器上,大幅度减少了直接进核心服务器读取和查询的流量和次数,减轻了数据库的运行压力,所以几乎所有的大型网站都必须走这条路,我今天也刚刚把自己的平台完全配置好,速度提升非常明显。
发布于 2020-12-06
赞同添加评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
月半
互联网
3 人赞同了该回答
以不久前华为新机Mate 20 系列的发布为例,来讲一讲CDN那点事。
10月26日,Mate20发布,华为商城交易金额8秒破亿。这一交易量意味着要能够支撑数十万级QPS(每秒的用户请求数),数百万级的用户同时抢购,同时需要极高的缓存命中率和CDN服务可用性。不仅如此,并发的稳定性、调度机制的准确性都是衡量CDN平台性能的重要指标。
那么,支撑华为商城这一需求的CDN,是什么样的呢?
与市场上的其它CDN相比,华为云CDN能够在距离用户最近的局域网建设节点,帮助企业将内容直达用户。此外,倚靠与运营商长久良好的合作关系,华为CDN与主导运营商合营建设海量节点,节点资源覆盖全球,带宽扩容没有任何瓶颈,运维小哥哥们不用再纠结新活动上线到底需要扩容多少带宽了。
华为云CDN可联动多项云服务如云主机、云存储、云安全等,为企业、合作伙伴、开发者提供全行业、全场景的加速服务,满足多种加速需求。面对市面上多家的CDN服务厂商,高可用的服务保障无疑是首要的选择,华为云CDN服务平台在Mate 20线上畅销活动中,可用性高达100%,同时华为云CDN承诺月度99.95%的服务可用性,高出业界承诺可用性0.05%。
互联网“流量”昂贵的今天,提高“流量”,增强粘性最需要的就是推广。而线上推广渠道良莠不齐,同时价格昂贵。华为CDN大客户可享受华为终端应用市场提供的APP推广支持,让您不仅给用户带来良好的使用体验的同时,还能借力平台拓展业务发展。
随着互联网经济的兴起,网络劫持现象无处不在。网络“薅羊毛“黑产,为了谋取自己的利益,通过网络流量劫持,在用户请求的网页中插入小广告或让用户访问其他广告页面。华为云CDN基于与运营商良好的合作关系,与运营商高效联动,能够在24小时内闭环常见劫持,比业界缩短48小时的劫持处理时间,高效快速地处理劫持问题。
发布于 2018-11-02
赞同 3添加评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
千锋HTML5学院
已认证的官方帐号
7 人赞同了该回答
回答较长,来一个阅读指南
- CDN是什么
- 案例说明
- CDN概念及意义
- CDN产品
- CDN工作原理
- 答疑
CDN是什么
我们一个简单的例子来说明CDN的含义:
假设我们要在线上部署一个叫【千锋课堂的Web应用】,我们将该项目的静态资源(如 图片、视频、html/css/js文件 等)放在位于北京的某台服务器上。
ok,成功部署上后,网站可以访问了。但是随着时间推移,流量增加,我们发现了以下问题:
- 用户反馈网站的资源加载速度较慢,严重影响了用户体验。并且我们进一步观察到,受网络传输距离影响,离北京越远,反馈的用户越多。
- 某段时间爆发了流量高峰期,受带宽影响,访问量超出一定数值后,出现了资源请求用时过长以至于请求失败的情况(请求超时)。
- 该服务器因物理原因(比如停电)故障, 网站就会挂掉。
毫无疑问,以上问题严重造成了客户的流失。
那么如何解决上述问题呢?
我们于是想到了一种方案,在各地部署多台服务器,每个服务器上都有项目资源的镜像。我们对用户流量进行分流——根据用户的ip地址加之一定的算法,让用户去访问距离其较近且较空闲的服务器上的资源。
这样一来,上述问题都能得以解决 —— 网站的资源访问速度明显提升了,高峰期也不会出现请求超时的情况,而某天部署在北京的那台服务器爆炸了,资源请求也会被导流到其他服务器,用户无感知。
这种方案,就是CDN。
CDN概念及意义
CDN,即内容分发网络(Content Delivery Network,简称CDN,是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。
我们通过一张图来说明CDN的含义:
其实由上述例子中,我们可以简单总结出来——CDN意义的关键词: 负载均衡、加速、稳定性。
CDN产品
当然,对于中小型公司来说,独立部署CDN的代价往往是巨大的——毫无疑问,用户地理覆盖范围越广,越密集,成本越高。
于是,基于互联网企业普遍对CDN的需求,就对应产生了相关产品的市场。
市面上代表卖家有 阿里云,腾讯云,华为云 等,友情提示,新用户及假节日大都有巨额优惠。
作为客户,我们只需砸一丢丢小钱,就可以让我们的网站享受到CDN服务。
CDN工作原理
我们借一张阿里云官网的图例说明:
如图所示:
- 用户访问了http://www.a.com这个地址,先查看LDNS(本地DNS域名解析)是否有解析记录,如果有,就直接拿到了IP,从而直接请求该ip的资源得到返回结果。
- 如果没有(比如第一次访问), 就向网站授权DNS查询ip地址。
- 承接2,得到的是http://www.a.tbcdn.com(该网站被绑定的CDN域名,这是因为购买的cdn资源要跟网站域名绑定才能生效)的对应ip。
- 承接3,向DNS调度系统请求http://www.a.tbcdn.com对应的ip;
- 承接4,DNS调度系统基于算法得出了较近较空闲的cdn节点服务器ip,从而返回给用户本地DNS解析器。
- 承接5,用户拿到了ip地址。并且该域名与ip的映射关系将在用户的LDNS留下记录,用户下次访问的话,就会直接走步骤1。
- 用户拿到了ip就直接去找对应CDN节点服务器访问请求资源。
- CDN节点服务器返回对应资源。 注意,这里做了一层兜底(容错处理), 如果节点没有对应资源内容,就把请求指向源站。
说白了CDN工作原理,就是加入了CDN分发的DNS解析过程。
答疑
关于CDN问题的相关答疑
- Q:CDN是什么?
A: 请仔细阅读文章!
- Q: CDN服务是必须的吗?
A:首先我们必须要明确一点: 脱离业务讲技术方案纯粹是耍流氓。 比较典型的像电商类的业务项目,面向的用户分布范围广,并且有流量高峰期,那么CDN服务相对比较重要;而如果仅仅是给自己搭个小小的日志博客来记录自己的生活点点滴滴,流量不大的情况下,必要性就不大了。当然,家里有矿你就随意的嘛。
总结来说,如果你的网站有 负载均衡、加速、 稳定性 相关的需求, 那么部署或者购买CDN服务是可以被考虑的方案。
- Q: 我的系统都是纯内网使用的,与Internet不连通,还需要CDN吗?
A: 这个问题其实和上个问题很相似,只是具体到了业务场景。如果你所在的公司很大——我举个例子啊比如阿里巴巴,全世界各地都有园区,内网用户分布极其广,并且用户量很大,那么CDN也是很需要的嘛。如果内网用户不大,并且只是局域网访问——那么基本是不太需要的。因为这种场景,并不对应负载均衡、加速、 稳定性这三点的需求。
发布于 2020-12-21
赞同 7添加评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
云智科技
已认证的官方帐号
CDN,即内容分发网络,在现有 Internet 中增加的一层新的网络架构,由遍布全球的高性能加速节点构成。这些高性能的服务节点都会按照一定的缓存策略存储您的业务内容,当您的用户向您的某一业务内容发起请求时,请求会被调度至最接近用户的服务节点,直接由服务节点快速响应,有效降低用户访问延迟,提升可用性。
假设您的业务源站域名为www.test.com
,域名接入 CDN 开始使用加速服务后,当您的用户发起 HTTP 请求时,实际的处理流程如下图所示:
详细说明如下:
- 用户向
www.test.com
下的某图片资源(如:1.jpg)发起请求,会先向 Local DNS 发起域名解析请求。 - 当 Local DNS 解析
www.test.com
时,会发现已经配置了 CNAMEwww.test.com.cdn.dnsv1.com
,解析请求会发送至 Tencent DNS(GSLB),GSLB 为腾讯云自主研发的调度体系,会为请求分配最佳节点 IP。 - Local DNS 获取 Tencent DNS 返回的解析 IP。
- 用户获取解析 IP。
- 用户向获取的 IP 发起对资源 1.jpg 的访问请求。
- 若该 IP 对应的节点缓存有 1.jpg,则会将数据直接返回给用户(10),此时请求结束。若该节点未缓存 1.jpg,则节点会向业务源站发起对 1.jpg 的请求(6、7、8),获取资源后,结合用户自定义配置的缓存策略(可参考产品文档中的缓存过期配置),将资源缓存至节点(9),并返回给用户(10),此时请求结束。
其实说白了,就一句话:把用户经常访问的、占用带宽较多的静态资源缓存至离用户最近的缓存节点(可以理解为存储节点),方便用户就近读取数据,对于未在该节点缓存的数据,则采取 回源 的方式,向业务部署服务器节点 查询 对应的数据,返回给用户的同时,缓存在该用户就近的节点。
CDN 有效地解决了目前互联网业务中网络层面的以下问题:
- 用户与业务服务器地域间物理距离较远,需要进行多次网络转发,传输延时较高且不稳定。
- 用户使用运营商与业务服务器所在运营商不同,请求需要运营商之间进行互联转发。
- 业务系统存在大量的图片、音视频等静态资源;业务服务器网络带宽、处理能力有限,当接收到海量用户请求时,会导致响应速度降低、可用性降低。
由此可见,CDN节点的数量、存储容量及带宽直接决定了CDN的效率!
根据题主的问题,纯内网应用需要使用CDN吗?
答案是:不用,CDN主要用于公网环境的下访问加速!
如果是公网业务,同时存在大量的图片、音视频等静态资源,那么建议配置CDN,来提高用户访问效率,降低整体带宽成本。
腾讯云的CDN最近正在进行特价促销活动,200TB只需19800元,每TB不足100块钱,有需要的朋友可以前往CDN活动页面购买:
腾讯云秒杀——CDN 200TB仅19800元cloud.tencent.com
本文部分内容转载自腾讯云 官方文档,原文地址:内容分发网络 产品概述 - 产品简介 - 文档中心 - 腾讯云 ,侵删