【问题标题】:How do server nodes distribute content to all CDN nodes in a quick manner?服务器节点如何快速将内容分发到所有 CDN 节点?
【发布时间】:2021-12-19 04:44:10
【问题描述】:

假设我们有一个处理用户上传内容的主服务器。

主服务器接收文件并将其发送到 CDN。 CDN 如何如此迅速地将新文件分发到全球所有节点?将内容单独发送到每个节点不是需要几分钟吗?

【问题讨论】:

  • “将内容单独发送到每个节点不会需要几分钟” 这个陈述基于什么假设?为什么你认为这是事实?我们在谈论什么文件?这需要几秒钟,具体取决于几个 mig 的路线,如果我们谈论的是 600GB 的 zip 文件,则需要几个小时。
  • 另外,您通常不会上传到 CDN(如果我们谈论的是 cloudflare 之类的东西)。您的内容只是在您的服务器上,当为新用户提供服务时,由于用户通过 Cloudflare 连接到您的网站,CDN 从您那里获取资源并在将其提供给用户时将其缓存。这样,来自同一区域的下一个用户将从缓存的内容中获得服务。 (这是一个非常简单的模型,并不完全是 CF 所做的,但它给了你一个思路)
  • @user206904 假设这是一个 200 mb 的文件。它必须经过每个 CDN 节点,以便世界各地的所有用户都可以从他们的本地节点访问它。转会期间会发生什么?用户如何获取内容?
  • 不,它不必到处走。正如我所说,根据请求,在服务时,节点会保留一个副本(第一个连接),如果节点已经有一个副本,它会直接为它提供服务,而无需连接到您的主服务器。如果您的网站从未被中国人访问过,您的文件将不会缓存在为中国服务的节点上。你真的没有提供任何细节。每家公司都可以(并且确实)按照他们想要的方式实施事情,没有独特的公式。另外,像 DG 和 CF 这样的服务不会缓存你的 200MB 文件,它们主要缓存 CSS、JS、图像等
  • 我真的很惊讶这个问题由于“缺乏澄清”而仍未结束。您没有指定任何详细信息,以便我们给出答案

标签: cdn


【解决方案1】:

第 1 部分:复制(节点间分布)

问题:你有多个服务器,一个“主”,一个是“副本”/“从”,如何避免手动上传内容到每个服务器?

案例1:如果你的内容是静态的,html/js或者其他文件(没有DB):

您的网络服务器(nginx 或 apache 或其他)指向服务器上的某个位置,对吗?

我们将使用 2 个工具,rsync 和 cron 调度程序。 Rsync 允许您在 2 个服务器之间同步目录,因此如果服务器 A(源)中的文件夹被修改,这些修改将被复制到目标服务器 B。 同步命令示例:

rsync -rtu --delete /var/my/source/web/server root@x.x.x.x:/var/my/destin/web/server

其中x.x.x.x是目标机器IP。

您可以阅读 rsync 手册或任何教程以了解更多信息。

现在这个命令只会同步一次,所以每次主服务器有修改时都需要运行它,我们不会手动执行。所以你可以在 crontab 中添加这个命令。为此:

crontab -e

然后只需输入频率(每小时?每分钟?每周)和命令: 每十分钟运行一个命令的示例:

*/10 * * * * rsync....

同样,您可以阅读有关 cron 的更多信息并根据需要设置频率。

案例2.如果需要复制DB:

只需对 Web 服务器执行相同的操作即可复制文件,并且根据您的数据库引擎,您必须进行数据库复制。以下是一些示例:

https://www.techrepublic.com/article/how-to-set-up-database-replication-with-mariadb/ https://dba.stackexchange.com/questions/65351/sync-two-mysql-databases-in-two-different-locations 由您来解决这个问题,或者就数据库复制提出一个单独的问题。

在所有服务器上,您的 Web 服务器应该具有相同的配置,并且它们都应该具有相同域的虚拟主机和相同的 SSL 证书。

第 2 部分:访问者的访问权限:

这就是棘手的地方,既然您已经准备好所有服务器,那么如何将访问者重定向到不同的服务器?

最简单的,如果您希望它们被随机重定向,您可以使用所谓的“循环 DNS”

为同一个域添加多个 A 名称记录,但每个记录将具有不同的 IP。用户通常会根据路由被定向到他们最近的节点,但他们也可能被重定向到离他们有点远的节点,这取决于路由和各种网络因素。

更高级一点的方法,您可以使用(付费)负载均衡解决方案,带有一些地理特征/最近节点策略,这将简化事情(但这有点像作弊),例如:scaleway 的负载均衡服务.

或者如果您想自己做:使用高级(付费)地理 DNS 服务

GeoDNS 获取查询所在的地理位置 来自并回答该查询,具体取决于该查询的所有者 域已为该特定用户的位置预设。 -星座 因此,作为域所有者,您可以根据(GeoProximity - 基于位置的 DNS)的策略定义将哪个区域重定向到您的哪个服务器

https://constellix.com/news/everything-you-need-to-know-about-geodns https://easydns.com/features/geo-dns/

结论:

这显然不是一个简单的 1 小时任务,而且自己实施也不便宜。永远记住要在廉价(临时)服务器上进行试验,而不是在您的生产服务器上进行试验。

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 2014-03-31
    • 2021-10-04
    • 2020-06-14
    • 1970-01-01
    • 2021-04-14
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多