我想这个问题可以改成 CDN 在 DNS 层面是如何工作的,但我真正的问题是,我的公司在三大洲都有数据中心,我们必须有 europe.example.com us.example.com 和 asia.example.com
我认为 CDN 通常会根据您的 IP 地址将您发送到本地数据中心。这肯定是 DNS 问题,即您让美国的 DNS 服务器将您发送到美国数据中心进行相同的 example.com DNS 查找?
我错了吗?如果我错了,我该如何有效地做到这一点,并且如果可能的话,没有中央(非 DNS)服务器?
答案1
CDN 的问题在于,它们不会根据您自己的 IP 地址来引导您,而是根据 DNS 服务器的 IP 地址来引导您……这可能是完全错误的。请阅读Paul Vixie 的 ACM 文章,这真是太划算了。
无论如何,如果你已经region.example.com
设置好并运行了,你可以example.com
考虑根据客户端的 IP 地址,执行从 到相关网络服务器的 HTTP 重定向。
这几乎就是 Google 所做的,这就是我最终google.co.uk
输入的内容google.com
。
但也要确保为客户提供访问其他版本的方法。客户不喜欢被迫访问某个特定网站,无论是由于地理数据库的错误,还是仅仅因为他们实际上需要从另一个区域访问该网站。
答案2
较新的 CDN(Cloudflare、MaxCDN、fast.ly)对 DNS 和实际内容服务器都使用任播。这比尝试使用 DNS 查询的源 IP 和不断变化的映射数据库要好一些。
理论上,对 DNS 和内容服务器使用任播可以让网络本身找到距离客户端“最近”的服务器。实际上,这基本上是正确的,但由于 ISP 之间的对等关系不断变化,新加坡的用户会访问加利福尼亚的边缘服务器,而不是香港的边缘服务器,这种情况有些奇怪。
任播很难做好。
像 Akamai 和 Limelight 这样的老牌 CDN 通常使用任播将您带到最近的 DNS 服务器,然后采用基于源 IP 的猜测方法。根据我的经验,这种方法效果不佳,尤其是当客户端使用的 DNS 服务器在网络拓扑上实际上并不在附近时。但是,像 Akamai 这样的大型成熟 CDN 拥有数百个内容服务器位置,因此返回“足够接近”的答案会带来不错的用户体验。显然,拥有数百个站点非常昂贵,这就是为什么没有一个全任播 CDN 选择这种方式的原因。因此,它们也不会对基本相同的服务收取那么多费用。
答案3
有多种方法可以解决此问题,但归根结底都是找出 IP 地址的位置,并相应地指向它。例如,您可以指定一个北美 IP 范围和一个欧洲 IP 范围。如果请求信息的 IP(来自 DNS、您的网络服务器、您的内容服务器等)属于欧洲范围,那么您的欧洲服务器应该会收到请求。
答案4
如果您的网站托管在多个地区,则无需在 DNS 级别执行任何操作。您可以使用以下 API:http://ipinfo.io获取访问者的国家,然后将他们重定向到适当的 URL。
如果我们谈论的不是网站或处理重定向的任何协议,那么在 DNS 级别有几个选项。您可以执行相同的 IP 国家/地区查询,然后返回与区域匹配的记录(基于地理位置的 DNS),或者您可以拥有不同网络之间的延迟图,并返回代表用户最低延迟的记录(基于延迟的 DNS)。亚马逊的Route53 DNS 服务提供两者。