本文介绍:如何加速物流仓配静态资源文件部署方式静态资源加速CDN技术解析过程中术语解释最终总结1.如何加速物流仓配先以购物为例生活。时间回到几年前,那时候在老家,如果在京东APP下单,至少要等上几天,商品才能送到你手上。因为当时他们的物流仓库中心还没有建在县城,一般可以从地市省会的物流仓库(算是区域仓库)里查到有没有库存。如果区域物流仓库还是没有库存,可能是北京的。物流仓库(可视为中央仓库)发货。中央仓库一旦缺货,就只能向厂家进货(视为货源站)。不过现在不一样了,不管是一线城市还是老家,在京东官网下单(默认以自营商品为主),基本上隔天就可以收到货,而且快递小哥送货效率是一样的。这是京东强大的物流优势。将物流仓库扩展到离老百姓最近的地方,大大提升了用户的购物体验。通过这个案例,我们了解了产品交付的加速过程。商品包括普通商品、大件商品等,这些商品最初都存放在中央物流仓库,可以说是最齐全的商品仓储中心。区域物流仓库建成后,这些货物可以提前入库到区域仓库,进一步提高货物的配送时间。县城建好仓库后,这些货物就可以提前存放在县城仓库。只要仓库离你越来越近,你下单后就不用那么费心了,从区域或中央仓库发货。可以到当地仓库的某个点,自己去取。如下图:县仓是距离用户最近的仓库,即通过在用户和中心仓之间增加多级中间仓,就近发货,加快发货速度,提升用户体验。2、静态资源文件部署方式那么,如果在互联网上,当你访问一个商场,点击进入商品详情页,你会看到里面会有大量的图片和广告视频,这些都是静态资源,那么这些静态资源用户是如何访问的呢?一开始我们考虑部署一个Nginx集群。这些静态资源将存储在每台机器上。文件可以通过服务上传到其中一台机器,然后通过rsync分发到其他Nginx机器。这适用于小型静态资产文件。但是对于图片和视频来说,这些资源可能从几M到几百M不等,所以不建议放在Nginx集群上,也不建议使用分布式缓存,分布式缓存本身也不推荐存储太大的Key。假设你是这样做的,在北京机房部署Nginx集群或者分布式缓存。用户访问这些资源时,会经过多个骨干网传输,导致网络延迟高,给你视觉上的感觉。就是图片加载不出来,视频播放卡顿的现象。在这一点上,我认为您不会有兴趣再等待了。对于电子商务网站,用户会流失。通常,我们可以使用Nginx集群作为小型静态资源文件的源站,使用单独的分布式存储作为流式音视频数据的源站。所谓源站就是你的静态数据最初存放的地方。为实现高可用和高稳定性,结合企业成本考虑,一般部署为BGP多线机房。BGP机房示意图如下:所谓BGP可以实现网站在各运营商线路之间的互联互通,让各互联网运营商的用户都能快速访问网站,选择最佳优质的网络链路与用户网络道路相结合。因此,BGP机房带宽成本较高。BGP机房的带宽成本一般在80~400元/M,所以假设每1M流量按100元计算,那么1G流量就是10万元。如果是几十、几百G的流量,成本可想而知。3、静态资源加速的CDN技术通过上面的案例我们知道,用户在访问静态资源时,会直接访问BGP源站,带宽成本是非常昂贵的。一个网站用户会分布在全国各地,甚至全世界,如何让用户更快的访问这些静态资源?我们也可以借鉴物流仓库的例子来理解,类似物流仓库,当然这些静态资源离用户越近,访问越快。于是,CDN技术应运而生。什么是CDN技术?CDN的全称是(ContentDeliveryNetwork/ContentDistributionNetwork),即内容分发网络。CDN解决的问题是在网络中增加一层CACHE(缓存)层,将源站的资源分发到距离用户最近的网络“边缘”节点,让用户就近访问内容,提高网站的响应速度,避免网络拥堵。这保证了用户访问资源的速度和体验。添加CDN节点后如下图所示:CDN分发架构:类比物流仓:中央仓物流相当于CDN中心节点,区域物流仓相当于CDN区域节点,县级物流仓中心相当于到CDN边缘节点。CDN分发架构示意图:目前CDN技术的应用非常普遍,有实力的公司也会建设自己的CDN,拥有自己的CDN研发团队,提供更稳定可靠的CDN服务。但是,大部分企业还是会选择专业的CDN厂商。如果你的服务部署在云端,可以选择阿里云和腾讯云提供的CDN服务。此外,还可以选择网速、蓝讯等老牌CDN厂商。CDN的工作原理那么用户如何访问最近的CDN节点呢?我们用一张图来整体理解一下,这样更直观:上图解决了两个问题:如何将访问域名映射到CDN地址如何找到离用户最近的CDN节点接下来我们就这个进行说明根据以上两个问题,结合图详细说明流程。1、如何将访问域名映射到CDN地址当你通过浏览器访问static.example.com域名时,假设这是一个静态域名,已经实现了CDN静态资源加速。1)首先会通过本地的DNS解析器检查本机的/etc/hosts文件中是否有该域名对应的IP。如果找到,直接使用IP发起请求。否则,转到步骤2)。2)由于本地DNS服务器的解析,如果在本地DNS缓存中找到该域名到某个IP,则直接使用该IP访问。否则,继续步骤3)。3)本地DNS服务器会向根域名服务器发起请求,根域名服务器会返回顶级DNS域名服务器的地址,让你在那里进行搜索。4)本地DNS服务器会向顶级DNS域名服务器发起请求,.com顶级域名服务器会返回权威DNS域名服务器的地址,让你在那里找到。5)本地DNS服务器继续向example.com的权威DNS域名服务器发起请求。权威的DNS域名服务器看这个域名,我就可以解析。发现CDN加速域名配置已经完成,将CNAME到static.xxx.example.cdn.com域名。至此,其实我们经过一番周折,终于通过访问静态域名static.example.com找到了CDN域名地址。如果不需要寻找离用户最近的节点,可以通过static.xxx.example.cdn.com域名找到正确的IP地址。2、如何找到距离用户最近的CDN节点结合上图,继续分析是否找到距离用户最近的CDN节点。1)本地DNS服务器会向一级GSLB全局负载均衡请求发送static.xxx.example.cdn.com,一级全局负载均衡会解析用户所在运营商的网络,如作为移动运营商,将CNAME返回到域名地址如static.yd.example.cdn.com。2)本地DNS服务器会继续向二级GSLB全局负载均衡器发起请求,二级全局负载均衡器根据DNS地理位置返回SLBCDN负载均衡器地址。3)本地DNS服务器可以从本地简单轮询??返回的多个CDN节点IP中选择一个CDNIP进行访问。此时,通过GSLB全局负载均衡最终找到的CDN节点就是距离用户最近的CDN节点。3.什么是GSLB?GSLB(GlobalServerLoadBalance),即全局负载均衡,是指在部署在不同地域的服务器之间进行负载均衡。一方面,它可以将流量均衡到它下面的服务器,另一方面,它可以根据地理位置找到离用户最近的服务器。如果找到离用户最近的CDN节点,则可能无法直接从CDN节点获取相应的资源。如果资源不存在,则继续从上级区域或中心CDN节点查找。如果它不存在,它最终会回到源头。从源站获取资源,然后设置CDN缓存过期时间。一般在源站存放一些小的静态资源文件,由CDN节点主动拉取访问。对于较大的音视频流媒体文件,可以通过CDN厂商提供的接口,预先将资源写入某个CDN节点,再通过CDN内部机制将资源分发到其他CDN节点。但是,即使主动同步资源,也存在延迟,最终可能导致回源,回源带宽成本非常高。所以我们在使用CDN的时候,需要关注CDN的命中率和源站的带宽。4、解析过程中名词解释CNAME(CanonicalName):可以将一个域名解析为另一个域名。例如:当你使用docs.example.com访问一些资源,你想通过docs-xyz.example.com访问同样的资源,你可以在DNS解析服务商添加一条CNAME记录,设置docs-xyz.example.com指向docs.example.com。添加后,所有访问docs-xyz.example.com的请求都会被转发到docs.example.com域名。CNAME域名:访问CDN时,在CDN厂商控制台添加加速域名后,您将获得CDN为您分配的CNAME域名。你需要给你的DNS解析服务商添加一条CNAME记录,将你自己的加速域名指向这个CNAME域名,这样所有对这个域名的请求都会转到CDN节点上,达到加速的效果。DNS(DomainNameSystem):域名解析服务。将域名解析为网络上可识别的IP地址。所有的服务器都识别IP,但是用户习惯于记忆域名,所以域名和IP地址是一对一的关系。它们之间的转换工作称为域名解析,域名解析由专门的解析器完成,如上图的DNS解析过程可以看出。5.最后的总结作为一名工程师,你可能会觉得你离上述的CDN技术还很遥远。忽略CDN技术的重要性,貌似是运维的问题,与我无关。这个想法是错误的。我们的思想不要太局限。如果你做一些直播和视频相关的技术,你或多或少都会接触到这个技术。你有没有考虑过?对抖音和快手的整个过程?A市用户上传视频后,经过转码分发,B市用户可以很快观看,视频播放也很流畅。这也是得益于CDN分发技术的应用。本文通过介绍物流仓库的例子来类比CDN技术,对CDN分发架构有一个感性的认识。同时进一步分析了CDN解析的工作原理。下面通过CDN工作原理分析图来理解。其中包含了DNS解析的详细过程,以及DNSGSLB如何找到离用户最近的节点。CDN是各大系统的门面,更擅长缓存静态数据、图片、流媒体数据。CDN作为一种特殊的缓存,同样需要关注其命中率和高可用。
