关于CDN的一些理解

安全咨询 0 557

CDN(Content Delivery Network)内容分发网络。


       网站应用,静态资源占流量的多数。系统做了动静分离之后,就可以把静态资源通过CDN加速。这样,静态资源的请求大部分通过就近部署的CDN服务器提供服务,用户的延迟也会有明显的提升。网站服务器专注于服务动态流量,带宽压力会小很多。


       动静分离,部署时静态资源要给一个单独域名,这个域名是个CNAME(cname解析成另一个域名,而不是IP),cname映射到CDN服务厂商提供的DNS服务器,CDN DNS 服务器会根据请求的IP地址所在区域和资源内容,返回就近的CDN缓存服务器ip,后续用户对这个DNS的请求都会转到这个IP上来。


       可以利用CDN加速,我认为是动静分离最大的意义。这对于大型网站尤其必要,但对于非公有云网站应用,如果流量没那么大,静态资源的量不是很大(相对于知名的大厂可以做比较),那没有任何必要用CDN,也没有必要动静分离部署。非公有云网站,有一种情况可以考虑CDN:将需要安装到前端的体积比较大的客户端放到CDN,用户下载这个客户端可以选择从CDN下载,这样来解决下载大客户端的性能问题。


da7b189d82c54e7ea98f8eeba95afe01.png

 借用阿里云官网的例子,来简单介绍CDN的工作原理。


        假设通过CDN加速的域名为www.a.com,接入CDN网络,开始使用加速服务后,当终端用户(北京)发起HTTP请求时,处理流程如下:

       1.当终端用户(北京)向www.a.com下的指定资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求。

       2.LDNS检查缓存中是否有www.a.com的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。

        3.当授权DNS解析www.a.com时,返回域名CNAME www.a.tbcdn.com对应IP地址。

        4.域名解析请求发送至阿里云DNS调度系统,并为请求分配最佳节点IP地址。

        5.LDNS获取DNS返回的解析IP地址。

       6.用户获取解析IP地址。

       7.用户向获取的IP地址发起对该资源的访问请求。

       如果该IP地址对应的节点已缓存该资源,则会将数据直接返回给用户,例如,图中步骤7、8,请求结束。

       如果该IP地址对应的节点未缓存该资源,则节点向源站发起对该资源的请求。获取资源后,结合用户自定义配置的缓存策略,将资源缓存至节点,例如,图中的北京节点,并返回给用户,请求结束。


       从这个例子可以了解到:


(1)CDN的加速资源是跟域名绑定的。

(2)通过域名访问资源,首先是通过DNS分查找离用户最近的CDN节点(边缘服务器)的IP

(3)通过IP访问实际资源时,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样,用户下一次访问时,该CDN节点就会有对应资源的缓存了。

       以淘宝商品图片数据为例,长期以来,主图上的价格表达都是商家自己维护,商品价格发生变化后,手动去换图。这样做,会带来3个问题:


(1)价格的准确性:商家手动填写的图片价格,跟实际的购买价可能不一致,造成不好的用户体验。

(2)价格更新的及时性:有时候,由于优惠券/品类券的生效失效,会导致商品的价格变化会很频繁,商家根本来不及换图。

(3)商家的操作成本:手动修改图片的价格,成本还是很高的,需要通过ps等软件修改图片,重新上传,编辑商品。

43f16e0f97e34197bdaad3f4e5949927.png


 用户访问图片的过程如下:

(1)用户通过手机淘宝来搜索商品或者查看宝贝详情。

(2)详情/搜索/推荐通过调用商品中心返回商品的图片URL。

(3)客户端本地如果有该图片的缓存,则直接渲染图片,否则执行下一步。

(4)从CDN L1回源图片,如果L1有该图片的缓存,则客户端渲染图片,同时缓存到本地,如果L1没有缓存,则执行下一步。

(5)从CDN L2回源图片,如果L2有该图片的缓存,则客户端渲染图片,同时CDN L1及客户端缓存图片内容,如果CDN L2没有缓存该图片,则执行下一步。

(6)从图片空间回源图片,图片空间会从OSS拉取图片源文件,按要求进行尺寸缩放,然后执行编解码,返回客户端能够支持的图片内容,之后客户端就可以渲染图片,同时CDN的L1、L2以及客户端都会缓存图片内容。


也许您对下面的内容还感兴趣:

留言0

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。