阿里巴巴淘技术
已认证的官方账号
933 人们同意答案
98%的淘宝图片访问流量已经消失CDN缓存。只有2%会回到源站,节省大量服务器资源。
但是,如果图片内容在用户访问高峰期发生大量变化,大量用户访问将被渗透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节点将缓存相应的资源。
淘宝鹿班图业务背景
商品的主地图贯穿整个购物指南和交易链接。与文本相比,图片更引人注目,主地图对消费者的购物决策有很大的影响。主地图上有各种各样的内容,但必须是价格的表达。
长期以来,主图上的价格表达一直是商家自己维护的。商品价格发生变化后,手动更纸。这样做会带来三个问题: (1)价格准确性:商家手动填写的图片价格可能与实际购买价格不一致,导致用户体验不佳。 (2)价格更新的及时性:有时候,由于优惠券/优惠券的生效失效,商品的价格变化会非常频繁,商家根本没有时间换图。 (3)商家的运营成本:手动修改图片的价格,成本还是很高的,需要通过ps等软件修改图片,重新上传,编辑商品。
今年的双11,我们的淘宝鹿团队试图通过技术手段解决这些问题。当商品价格发生变化时,系统会自动计算新价格,自动合成图片,然后更新商品主图片。
众所周知,淘宝有上亿的商品,光大推广的商品就有几千万。所以价格变化导致图片变化频率很高。最高的是双110点,所有促销商品的价格都会从日价变成促销价格。
这意味着在促销高峰期,用户将访问数千万张图片。这种情况会发生什么问题?让我们先了解一下淘宝的图片空间和CDN结构清晰。
淘宝图片空间和CDN的架构
淘宝整个图片的访问链接有三级缓存(本地客户端,CDN L1、CDN L2)所有图片都持续存储到OSS中间。真正处理图片的是img-picasso该系统具有复杂的功能,包括从OSS读取文件,缩放图片尺寸,编解码,所以机器成本比较高。
CDN缓存分为二级,合理分配L1和L一方面,2的比例可以通过一致性来实现hash在同等资源的情况下,缓存更多内容,提高整体缓存命中率;另一方面,它可以平衡计算和计算IO,充分利用不同配置机器的能力。
访问图片的过程如下: (1)用户通过手机淘宝搜索商品或查看婴儿细节。 (2)通过调用商品中心返回商品的详细信息/搜索/推荐图片URL。 (3)如果客户端本地有图片缓存,直接渲染图片,否则执行下一步。 (4)从CDN L回源图片,如果L1有该图片的缓存,则客户端渲染图片,同时缓存到本地,如果L如果没有缓存,则执行下一步。 (5)从CDN L回源图片,如果L2有图片缓存,客户端同时渲染图片CDN L1.如果客户端缓存图片内容,CDN L如果图片没有缓存,则执行下一步。 (6)从图片空间回源图片,图片空间将从OSS拉取图片源文件,按要求缩放尺寸,然后编解码,返回客户端可以支持的图片内容,然后客户端可以同时渲染图片CDN的L1、L2.客户端将缓存图片内容。
频繁换图带来的技术挑战
当商品价格发生变化时,我们将使用新的价格重新合成图片,更新存储在商品中心的图片URL。
这将带来两个问题: (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对img-picasso访问量会增加25倍,扩容成本肯定是不可接受的。
有两种方法可以解决这两个问题: (1)改图保持图片URL不变,可避免商品链路缓存失效。 (2)在访问高峰到来之前提前预热图片CDN,可以避免CDN缓存失效对源站的压力。
下面介绍一下我们是如何做到这两点的。
频繁换图的应对方案
当图片内容发生变化时,执行以下两个操作: (1)更新OSS内容:用新的图片内容替换OSS中老图片内容 (2)刷新CDN缓存:清除CDN之前缓存的图片内容
这样,当用户再次访问图片时,就会发现CDN如果没有缓存,它将回归img-picasso,从OSS拉取新的图片内容。
由于图片URL没有变化,不需要更新商品中心的图片链接,这样商品链接的缓存就可以保持不变。 在实施这个计划的过程中,遇到了几个问题,简单分享一下:
淘宝的图片空间承载着淘宝系所有图片的上下稳定性保证。为了保证高可用性,三地将存储一个资源OSS。上传图片时,默认只上传一个地方,使用OSS能力,自动同步到另外两个地方。
但是使用URL不变方案,CDN如果另外两个地方的缓存已经清除,缓存已经清除OSS在同步完成之前,用户访问后,会回到旧的图片内容,发现图片内容没有变化。
针对这一问题,我们将异步同步OSS软链模式改为三地同步建软链,三地返回成功后,拆除CDN缓存确保用户访问的图片必须是最新内容。
同一商品图片将用于不同场景的坑显示,不同的坑对图片的大小有不同的要求。为此,图片空间提供了一个功能,可以方便地生成不同尺寸的缩率图。只需访问图片,添加不同的后缀,img-picasso源站可按要求缩放图片。
由于历史原因,以前对缩放的尺寸类型没有限制,导致CDN图片后缀格式多达2400种 ,TOP格式覆盖率为46%,TOP15格式覆盖率为64%。这意味着在cdn最多可能是24000 个不同的url,当图片内容发生变化时,请清除所有这些缓存,以确保所有用户看到的图片都是新内容。
为了解决这个问题,我们收敛了域名格式。
图片质量压缩参数的规则如下: * 常见的图片质量参数有八种形式:Q90、Q75、Q50、Q30、q90、q75、q50、q30 * 图片锐化参数有三种常见形式:s100,s150,s200
我们将图片质量定义为高质量图片和低质量图片,收敛格式为 q90 和 p50s150 这样,2000多种格式就可以收敛到6种主要格式,CD清除缓存才变得可行。
通过图片尺寸收敛,每张图片只需要清除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分钟内图片缓存失效。
通过改图保持图片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。
我再举个例子。
你在一个园区内工作,你直接访问网络的端口带宽被限定为了2M,这也就意味着你如果要下载一个蓝光资源,那基本是一个让人欲哭无泪的龟速,对吧。
但如果有一个特别热门的资源,比如说最近的《复联4》和《权游8》,园区网内部的缓存设备,如果发现很多人都在用2M的带宽龟速下载同一个热门的资源的话,它就会把它缓存下来,这样的好处是,每个人都可以用内网中远远高于2M的带宽来进行下载。
如果让我粗浅甚至不够准确的解释CDN的话,我更愿意用这样这样的更直接的方式来讲:
回到最开始小伙伴们问我的那个问题,CDN和网游加速器有什么区别?
这的确是一个容易外行产生幻觉的问题。
从效果上来看,无论是CDN还是网游加速器,都是让网络访问(视频,网页加载,直播,游戏等)变快了,但从原理上它们还是有区别的。
当我们玩游戏的时候,如果不打开加速器,是用户通过运营商直接访问游戏服务器,
而打开了游戏加速器之后,用户走到游戏加速服务器将走的是一条高速,而游戏加速器访问游戏服务器的,将是另外一条高速。
那么好,说清楚了CDN是什么之后,其实这个问题中的第二问的答案就很简单了,CDN的优势很简单,就是快。
但这里其实有一个问题,很多不了解这个行业的朋友可能会有误会,这几年高歌猛进的CDN厂商,比如说2018年发展的特别迅猛的京东云,似乎都是依托云服务的,但实际上,CDN的概念其实远远要早于云服务,只是这几年由于技术,创新和意识上,传统的CDN厂商的市场份额由于云服务厂商的杀进,而被大量蚕食掉了,才导致了这种错觉的产生。
所以,如果一定要说CDN的优势的话,我们不如与时俱进的简单聊一聊,基于云服务的CDN的优势到底是怎样的。
我们目前所处的这个时代,在互联网生活圈层里,视频和直播在数据上巨大的吞吐量,是区别于其他时代的一个明显的标志。
所以,一个基于云服务的,更智能的视频CDN3.0时代已经到来,这个确定性的前景面前,视频提供商对于CDN服务的需求也将与日俱增,以解决随之而来的诸如带宽费用高昂,画面卡顿,用户体验差等一系列棘手问题,而这些需求是传统CDN服务商无法解决的。
因为视频行业不光需要CDN和带宽,还需要一整套包括编码,转码,主机,存储,AI等等在不同场景下得到保障的解决方案,这件事只能由云服务厂商才能完成。
还是拿京东云来举例子说,在去年十月工信部发布的“领取《中华人民共和国增值电信业务经营许可证》通知”中,京东云成为了获批全国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 人赞同了该回答
: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)等技术,智能地平衡负载流量;
性能管理:它通过内部和外部监控系统,获取网络部件的状况信息,测量内容发布的端到端性能(如包丢失、延时、平均带宽、启动时间、帧速率等),保证网络处于最佳的运行状态。
CDN是只对网站的某一个具体的域名加速。如果同一个网站有多个域名,则访客访问加入CDN的域名获得加速效果,访问未加入CDN的域名,或者直接访问IP地址,则无法获得CDN效果。 CDN对网站的访客完全透明,不需要访客手动选择要访问的镜像站点,保证了网站对访客的友好性。CDN对每个节点都有可用性检查,不合格的节点会第一时间剔出,从而保证了极高的可用率,而镜像站点无法实现这一点。CDN部署简单,对原站基本不做任何改动即可生效。 常见的双线机房只能解决网通和电信互相访问慢的问题,其它ISP(譬如教育网,移动网,铁通)互通的问题还是没得到解决。而CDN是访问者就近取数据,而CDN的节点遍布各ISP,从而保证了网站到任意ISP的访问速度。另外CDN因为其流量分流到各节点的原理,天然获得抵抗网络攻击的能力。 一般而言,网站无需任何修改即可使用CDN获得加速效果。只是对需要判断访客IP程序,才需要做少量修改。 由于CDN采用各节点缓存的机制,网站的静态网页和图片修改后,如果CDN缓存没有做相应更新,则看到的还是旧的网页。为了解决这个问题,CDN管理面板中提供了URL推送服务,来通知CDN各节点刷新自己的缓存。在URL推送地址栏中,输入具体的网址或者图片地址,则各节点中的缓存内容即被统一删除,并且当即生效。如果需要推送的网址和图片太多,可以选择目录推送,输入 http://www.kkk.com/news 即可以对网站下news目录下所有网页和图片进行了刷新。 只需要使用动态页面,asp,php,jsp等动态技术做成的页面不被CDN缓存,无需每次都要刷新。或者采用一个网站两个域名,一个启用CDN,另外一个域名不用CDN,对即时性要求高的页面和图片放在不用CDN的域名下。 后来增加的网页和图片,不需要使用URL推送,因为它们本来就不存在缓存中。 CDN启用后,访客不能访问网站有很多种可能,可能是CDN的问题,也可能是源站点出现故障或者源站点被关闭,还可能是访客自己所在的网络出现问题,甚至我们实际故障排除中,还出现过客户自己计算机中毒,导致无法访问网站。客户报告故障时,可随时联系我们24小时技术部进行处理。 一般来说以资讯、内容等为主的网站,具有一定访问体量的网站 资讯网站、政府机构网站、行业平台网站、商城等以动态内容为主的网站 论坛、博客、交友、SNS、网络游戏、搜索/查询、金融等。提供http下载的网站 软件开发商、内容服务提供商、网络游戏运行商、源码下载等有大量流媒体点播应用的网站 拥有视频点播平台的电信运营商、内容服务提供商、体育频道、宽频频道、在线教育、视频博客等 此类极端状况不建议您使用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 访问原理
假设业务源站域名为 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 目前来说是最具性价比的解决方案;
目前安全问题主要有各类网络攻击(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是将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。
(本章节部分内容摘引自: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关键组件
DR模式 双LVS做Active-Active互备 负载均衡算法采用wrr
阿里基于Nginx开发的高性能HTTP服务器,已经开源,详细请了解:The Tengine Web Server 主动健康检查 SPDY v3支持
高性能Cache 磁盘(SSD/SATA)
------------------------------------华丽的分割线------------------------------------
如果你在经营一家网站,那你应该知道几点因素是你制胜的关键:
- 内容有吸引力
- 访问速度快
- 支持频繁的用户互动
- 可以在各处浏览无障碍
另外,你的网站必须能在复杂的网络环境下运行,考虑到全球的用户访问体验。你的网站也会随着使用越来越多的对象(如图片、帧、CSS及APIs)和形形色色的动作(分享、跟踪)而系统逐渐庞大。所以,系统变慢带来用户的流失。
Google及其它网站的研究表明,一个网站每慢一秒钟,就会丢失许多访客,甚至这些访客永远不会再次光顾这些网站。可以想像,如果网站是你的盈利渠道或是品牌窗口,那么网站速度慢将是一个致命的打击。
这就是你使用CDN的第一个也是最重要的原因:****
除此之外,CDN还有一些作用:
互联不互通、区域ISP地域局限、出口带宽受限制等种种因素都造成了网站的区域性无法访问。CDN加速可以覆盖全球的线路,通过和运营商合作,部署IDC资源,在全国骨干节点商,合理部署CDN边缘分发存储节点,充分利用带宽资源,平衡源站流量。阿里云在国内有500+节点,海外300+节点,覆盖主流国家和地区不是问题,可以确保CDN服务的稳定和快速。
CDN的负载均衡和分布式存储技术,可以加强网站的可靠性,相当无无形中给你的网站添加了一把保护伞,应对绝大部分的互联网攻击事件。防攻击系统也能避免网站遭到恶意攻击。
当某个服务器发生意外故障时,系统将会调用其他临近的健康服务器节点进行服务,进而提供接近100%的可靠性,这就让你的网站可以做到永不宕机。
使用CDN加速可以实现网站的全国铺设,你根据不用考虑购买服务器与后续的托管运维,服务器之间镜像同步,也不用为了管理维护技术人员而烦恼,节省了人力、精力和财力。
CDN加速厂商一般都会提供一站式服务,业务不仅限于CDN,还有配套的云存储、大数据服务、视频云服务等,而且一般会提供7x24运维监控支持,保证网络随时畅通,你可以放心使用。并且将更多的精力投入到发展自身的核心业务之上。
------------------------------------华丽的分割线------------------------------------
站点或者应用中大量静态资源的加速分发,建议将站点内容进行动静分离,动态文件可以结合云服务器ECS,静态资源如各类型图片、html、css、js文件等,建议结合 对象存储OSS 存储海量静态资源,可以有效加速内容加载速度,轻松搞定网站图片、短视频等内容分发
- 架构示意图
支持各类文件的下载、分发,支持在线点播加速业务,如mp4、flv视频文件或者平均单个文件大小在20M以上,主要的业务场景是视音频点播、大文件下载(如安装包下载)等,建议搭配对象存储OSS使用,可提升回源速度,节约近2/3回源带宽成本。
- 架构示意图
视频流媒体直播服务,支持媒资存储、切片转码、访问鉴权、内容分发加速一体化解决方案。结合弹性伸缩服务,及时调整服务器带宽,应对突发访问流量;结合媒体转码服务,享受高速稳定的并行转码,且任务规模无缝扩展。目前CDN直播加速已服务内部用户测试并优化,即将上线,敬请期待
- 架构示意图
移动APP更新文件(apk文件)分发,移动APP内图片、页面、短视频、UGC等内容的优化加速分发。提供httpDNS服务,避免DNS劫持并获得实时精确的DNS解析结果,有效缩短用户访问时间,提升用户体验。
- 架构示意图
------------------------------------华丽的分割线------------------------------------
做 CDN 之前的客户真正的服务器。
访问者,也就是要访问网站的网民。
最后一公里,也就是网民到他所访问到的 CDN 服务器之间的路径。
域名是Internet网络上的一个服务器或一个网络系统的名字,全世界,没有重复的域名。
它是一个别名记录( Canonical Name );当 DNS 系统在查询 CNAME 左面的名称的时候,都会转向 CNAME 右面的名称再进行查询,一直追踪到最后的 PTR 或 A 名称,成功查询后才会做出回应,否则失败。
CDN的域名加速需要用到CNAME记录,在阿里云控制台配置完成CDN加速后,您会得到一个加速后的域名,称之为CNAME域名(该域名一定是*.*http://kunlun.com), 用户需要将自己的域名作CNAME指向这个*.*http://kunlun.com的域名后,域名解析的工作就正式转向阿里云,该域名所有的请求都将转向阿里云CDN的节点。
DNS即Domain Name System,是域名解析服务的意思。它在互联网的作用是:把域名转换成为网络可以识别的ip地址。人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是一一对应的,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。
比如:上网时输入的百度一下,你就知道会自动转换成为220.181.112.143
也称CDN节点、Cache节点等;是相对于网络的复杂结构而提出的一个概念,指距离最终用户接入具有较