【问题标题】:I'm trying to understand setup of DNS, CDN's and load balancers better我正在尝试更好地了解 DNS、CDN 和负载平衡器的设置
【发布时间】:2022-01-23 14:46:33
【问题描述】:

我正在尝试创建一个简单的带有地理位置的 CDN,以优化其他国家/地区的客户的速度,但了解它的设置理论是我目前正在努力解决的问题。我正在尝试创建一个站点,该站点可以自动将客户端发送到更近或更快的服务器,同时他们仍然可以获得所需的所有内容,同时运行(理论上)永不关闭的网络。我想这要么非常困难并且需要比我实际获得的更多的资源,要么在实践中是不可能的。尽管如此,我还是假设这一切都是可以掌握和可能的。

假设我的域名是example.com

我的 DNS 和负载平衡问题:
假设我有两台负载平衡服务器,一台在拉斯维加斯,另一台在卢森堡。我们还假设我在邻近城市有一堆 CDN 服务器,并且负载均衡器设置为选择最近的一个。

  1. 进入我的域example.com时,如何在两台负载均衡服务器之间进行DNS选择?他们都有不同的IP,据我所知,我只能使用一个A记录。
  2. 如果其中一个负载平衡器出现故障怎么办?我将如何确保我的 DNS 服务器知道这一点并且不会将流量定向到该特定服务器,而是回退到另一个服务器,仍然考虑客户端到服务器的地理位置?

多个 CDN 服务器的问题:
假设我已经准备好多个 CDN 并且已经设置好了。

  1. 如何在每个 CDN 上提供相同的内容?我是否只需将每台带有网络驱动器的服务器连接到实际文件,让他们将其下载到他们的磁盘并每 X 分钟/小时检查一次更新,然后就这样结束了吗?

在写这篇文章时,我回答了一些我自己的问题,并在最后一篇文章中省略了它们。
如果它完全相关,我正在使用 HAProxy、Nginx 和 Varnish。

【问题讨论】:

    标签: dns load-balancing cdn haproxy varnish


    【解决方案1】:

    地理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 端点。

    在此层中,您将添加几个处理传入流量的节点。这可能是数百万个请求。它的责任是双重的:

    1. 凭记忆提供热门内容
    2. 将缓存未命中路由到正确的存储节点

    使用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获取它

    【讨论】:

      猜你喜欢
      • 2018-08-20
      • 2017-01-20
      • 2019-11-22
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多