地理IP
example.com CDN 服务的入口点是支持 GeoIP 的 DNS 服务器。
AWS Route53 支持它,其他云供应商可能也有类似的东西。如果您想使用本地硬件执行此操作,PowerDNS 服务器支持 GeoIP:https://doc.powerdns.com/authoritative/backends/geoip.html。
对于每个区域,您需要提供一个由几个负载均衡器处理的服务端点。
服务端点上的 DNS 循环将确保负载在负载均衡器之间均匀分布,但它也确保了高可用性。服务端点还需要进行健康检查,以确保可能不健康的负载均衡器不会出现在该服务端点的 DNS 结果中。
清漆
您提到 Varnish 作为您的技术堆栈中的一个元素。 Varnish 恰好是私有 CDN 技术的绝佳候选者。
分层 Varnish 设置可以确保在成熟的私有 CDN 中正确卸载单个源。
在流量路由和交付热门内容方面,Varnish 的开源版本将助您一臂之力。
Varnish Enterprise 具有一些特定组件,可让您将私有 CDN 工作提升到另一个层次。尤其是Massive Storage Engine 是这里的关键。
MSE 是一种存储引擎,可在快速交付和存储大量对象之间取得完美平衡。它甚至提供磁盘持久性。
边缘层
在构建 CDN 时,第一个缓存层将是您的边缘层。可以使用负载均衡器访问这些缓存节点,但也可以使用具有健康检查功能的 DNS 循环选择它们。
这假设 GeoIP 部分已经为 example.com 处理,并且(例如)您到达了处理您在卢森堡的存在的 lu.example.com 端点。
在此层中,您将添加几个处理传入流量的节点。这可能是数百万个请求。它的责任是双重的:
- 凭记忆提供热门内容
- 将缓存未命中路由到正确的存储节点
使用Cache-Control 标头或VCL 代码,您可以定义缓存中对象的生命周期。根据对象获得的缓存命中次数,它将被视为“热”或“冷”。冷内容将从内存中删除,以便为其他更多请求的内容腾出空间。
sharding director in Varnish 将负责将缓存未命中发送到正确的存储服务器。由于分片方法,对同一资源的请求将始终访问同一存储服务器。
通过添加存储服务器和使用分片,您可以横向扩展您的存储。
存储层
存储层也是 CDN 的一部分,由具有更多对象存储的节点组成。这可以通过大量 RAM 或磁盘存储来完成。
磁盘存储通常被认为很慢,但Varnish Enterprise's MSE storage engine 有一个很好的解决方案。
即使到达存储层的请求是边缘层的缓存未命中,处理这些请求仍然会非常快。那是因为您仍在使用优化的缓存技术,例如 Varnish。
超过 70% 的流量会到达存储层是很现实的,但从最终用户的角度来看,这应该会导致任何延迟。
起源护盾层
第三个缓存层是原始屏蔽层。这一层 Varnish 缓存不应托管在您托管 CDN 节点的数据中心,而应托管在您的源 Web 服务器所在的数据中心。
这一层的主要重点是保护您的源网络服务器免受 CDN 节点重新验证。如果您的 CDN 很大,重新验证 CDN 节点的副作用可能会导致源端请求过多。
源保护层也负责安全,可以执行一系列 WAF 任务。
了解更多信息
今年早些时候,我出版了我的新 Varnish 书,这本书有专门的 CDN 章节。
您可以从https://info.varnish-software.com/resources/varnish-6-by-example-book下载PDF版本。
如果您想获取实体副本,可以通过https://www.amazon.com/Varnish-example-practical-acceleration-technology/dp/9189179978获取它