这些年前端工程领域利用CDN来实现网页资源优化加速的方案已非常普遍,除快速的资源分发外,CDN在高吞吐量访问、安全防护也起到非常大的作用,CDN +回源的架构已深入人心。今天小编就和大家一起来聊一聊在前端领域利用使用CDN和云存储构建的灵活的适应多种场景的方案实践经验。
下面云存储统一用OSS代替,OSS是阿里云的云存储服务,但是没有特殊说明CDN指的是阿里云CDN。固然,每家云服务厂商都有对应的CDN和云存储服务提供,服务基本是通用的。
公道的技术架构基本都会做到消息分离,对静态的场景,比如版本化管理的的资源文件(JS、CSS、图片)、周期性更新的页面都比较合适存储到OSS,然后通过CDN配置OSS为源站的方式来实现低保护本钱、高吞吐、快速访问的技术方案。
一、 缓存时间与缓存命中率
CDN缓存架构下,命中CDN缓存才能实现访问的加速,而缓存的命中率是资源的访问频率和缓存时间来共同决定的,访问次数越多、缓存时间越长,资源的缓存命中率就会越大,那末用户平均访问时长就会越短。对已版本化管理的资源来讲,资源的内容就是随版本肯定的,该资源的CDN缓存时间可以是无穷期的。无穷期缓存可以显著提高缓存命中率,但是访问频率非常低的资源,比如一天只有几次访问,或者会大几率触发回源。由于CDN本身是散布式缓存的节点,访问次数低意味着不一定每个节点都会有对应的资源缓存,还有一个缘由是CDN本身也不是无穷的存储空间,有一定的按热度淘汰的算法,访问次数越低的资源淘汰的几率越高。
对非版本化管理的资源,也就是覆盖式发布的资源文件,常见的比如页面的HTML、一段静态配置的数据。这类根据对应资源更新的频率来进行缓存,对这类覆盖式发布的场景,不建议缓存太长时间,以避免出现问题影响的时间比较长。如果不幸设置了比较长的缓存时间,CDN也有清除缓存的方法,清除缓存不合适大量资源的场景。CDN通常也会限制大范围的调用缓存失效的方法,避免大范围缓存失效造成流量大量要求源站。
二、全球资源加速
区分于CDN的散布式多节点,OSS有地域的概念,在国内的优良的网络基础设施下,OSS数据中心的网络接入通常是多线BGP网络,不同用户运营商访问都很流畅,不斟酌容灾,单个地域OSS通常能满足要求, 何况还有前置CDN的加持,对缓存命中率高的页面,回源时间可以疏忽。对命中率低的资源,即便是回源,OSS的访问速度也足够的快。
但是在国外的场景下,如果国外的CDN节点或者回源到国内的OSS数据中心,跨国网络访问的线路本身就很拥堵,如果没有专线的带宽保障,那末回源超时的问题就不可忽视了,专线的本钱是非常高的,很多国家还有数据本地存储的合规性的要求,所以当地的CDN节点回源到当地的OSS数据中心是一个更好的方案。
如果不是特别定制,CDN通常只支持配置单个源站,不支持依照地域解析到不同的源站,要做到当地的CDN节点回源到当地的OSS数据中心,需要让CDN特别的定制支持。对CDN的大客户来说,可能不是一个问题。但是对中小站点还有另外一个更自主的方案,就是利用支持地域解析的DNS,来做到根据CDN回源要求的源IP,解析到就近的OSS数据中心。OSS有一个限制是一个域名只能绑定在一个bucket上面。所以这里我们需要在OSS前面加一层网关接入层,来支持同一个域名在不同的地区解析到最近的OSS。
三、OSS多区域文件同步
解决了读取的问题,再来谈一谈多个区域的OSS资源如何同步的问题,OSS国外区域不支持自动同步,所以我们需要从逻辑上来保证用户访问数据的一致性。在我们实践的业务场景中,依照不同的业务类型,分为: 1、国内业务 2、国外业务,国外又会依照地理区域划分,比如东南亚、欧美。一个资源依照业务访问属性,可能只会在某一类地区被访问到,也会有一些全局的资源,每个地区都会被访问到。
最直接的方案是资源发布时,系统内部调用不同区域的OSS发布,全部成功才认为成功。这类方案能够保证所有区域的一致性,逻辑上也简单,但是存在几个问题: 1. 业务上不是每个资源都需要国外加速,全部同步造成资源浪费,也会影响发布时间。2. 如果某一个区域OSS出现问题,影响整体发布成功的判断。所以我们终究实现的是依照资源被访问的区域进行打标,如果资源属于国内业务,只同步国内OSS,如果资源属于国外特定区域使用,则只同步特定区域,如果资源确切所有区域都会被访问,则所有区域发布时同步。
当我们把大部份资源做到版本化管理时,利用OSS的镜像回源功能,发布又会简化很多。对版本化管理的资源来讲,一个资源一旦正式发布,肯定了唯一的版本号,该版本的内容就没法修改。OSS镜像回源的功能是,当要求在OSS没有找到文件,会自动到源站抓取对应文件保存到OSS,并将内容直接返回到。我们肯定一个中心区域的OSS,设置为其他区域的源站,当其他区域的OSS访问某一个资源不存在时,从中心来拉取并同步到该区域,下一次在该区域访问该资源时,资源就已存在,直接本区域返回。这样做的好处是资源发布测逻辑变得简单,只需要发布到中心OSS,保证中心OSS是全量的内容,不需要斟酌其他区域的同步、重试逻辑, 速度也会有保障。同时,资源做到依照访问区域按需同步,减少资源存储冗余。在新增一个区域部署的时候,也能够用这类方式快速同步新区域的资源。
以上就是全球资源加速方案CDN+OSS的经验分享,希望能帮助到大家。
TOP