如何从 IP 地址的角度构建全球分布的网站

网络工程 路由 ip ipv4 ipv6 IP地址
2021-07-09 16:25:38

我想要一个可以从世界上任何一点快速加载的网站。根据我的理解,您需要利用 Google Cloud 或 AWS 等地方的数据中心“区域”。就我的理解而言。

缺少的是如何准确地实现它(这里是高/图表级别,而不是代码级别)。

例如,在针对特定“项目”的 Google Cloud 上,您可以选择 IPv4 或 IPv6、“Premium”与“Standard”(“流量穿过 Google 的高质量全球骨干网,在最接近于用户。”与“流量在最接近其目的地或起源的云区域的对等点进出 Google 网络。”),以及全球与区域。如果您选择 IPv6,则您只能使用高级版。如果您在 IPv4 上选择全局,则您只能使用高级版。我不确定这是如何工作的,不是在谷歌特定系统的详细程度,而是这里通常发生的事情。我看不出“全局”IP 地址如何比区域 IP 地址更好,因为区域 IP 地址更接近请求源。

在 AWS 上,他们没有“全局”选项,所有 IP 地址都是 IPv4,并且是区域性的。

这只是主要问题的一些背景。

我的问题是如何构建一个系统以利用区域数据中心一般而言,在 IP 级别。我想知道它是如何从我的域到区域 IP 地址的。或者,如果它就像 Google Cloud 的“全球”IP 地址,那么您如何将区域集成到其中。或者如果这是倒退,如何概念化这一点。我看到了下,但它只解释了一个域是如何映射到一个独立于区域的 IP 地址的。我没有看到区域是如何实际实施/发挥作用的。

在此处输入图片说明

基本上我想知道我应该如何组织我的 IP 地址和服务器以利用区域数据中心。到目前为止,我的想法是让不同地区的服务器拥有自己的数据副本。但后来我在考虑 IP 地址和域时迷失了方向。如果我使用 AWS 模型,似乎我为每个区域的每个入口点服务器保留了一个 IP。但是后来我看不到域名如何确定要选择的 IP/区域。如果我使用全局 Google Cloud 模型,则看不到如何添加区域服务器。

2个回答

你问的是所谓的任播基本上,您在世界各地的多个位置分配相同的地址,并且 Internet 路由协议 (BGP) 将了解所有这些地址,但它只会将具有最佳度量(最接近 Internet)的那个安装到路由表中路由器。

每个路由器维护自己的路由表。任播只是从多个地方广播同一个网络。接收到同一网络的多个广告的路由器将根据路由协议的度量选择将哪个广告放置在其路由表中。这导致路由器使用最近的(从路由协议度量的角度来看)目的地。

例如,BGP 通过 AS_PATH 属性中的 AS 数量确定多个目的地中的哪一个最接近的主要方式。如果路由器收到五个8.8.0.0/16网络通告,它将选择一个放置在其路由表中,然后将目的地为该8.8.8.8网络的流量路由如果具有该网络的站点出现故障,其路由表中的条目将被撤销,而下一个最近的目的地将被放置在其路由表中。

不同位置的不同路由器将各自独立确定哪个目的地最近。任播只是从多个站点向同一个网络做广告,并让每个路由器自行确定将流量发送到该网络的位置。

IPv4 和 IPv6 都可以使用任播,因为路由表和路由协议决定了将流量发送到哪里。

有几种方法可以实现“从世界任何地方都可以快速加载的网站”的目标

也许最简单和最常见的是拥有多个域名。当您的任何站点受到攻击时,请使用地理定位来确定 IP 地址的位置并将流量重定向到最近的区域站点。

这样做的好处是还可以让所有用户根据需要覆盖自动重定向,因为他们可以发送 cookie 或标志来告诉您“不,我真的想要英国版本”

您还可以为服务器端代码创建一个站点,同时让图像等内容离用户更近,并根据用户的地理位置使用不同的链接。

在 DNS 方面,有一种叫做anycast路由的东西,其中 dns 服务器知道它可以返回的多个可能的 IP 地址,并监控请求 IP 地址的最低 ping/最少跳数。但这确实有一些缺点,应谨慎使用。

例如。https://aws.amazon.com/blogs/aws/new-aws-global-accelerator-for-availability-and-performance/ 或。https://cloud.google.com/dns/

您还可以简单地对 DNS 进行编程,以根据 DNS 请求的来源返回不同的 IP。但是,您将看到用户 DNS 服务器的 IP 地址,而不是用户。