分布式系统和选择最近的数据中心

Distributed systems and choosing the nearest datacenter

我想知道如何始终将请求定向到最近的数据中心。一开始我想创建一个基于 IP 地址计算区域的应用程序,但后来我意识到这没有用,因为我们仍然不知道如何调用最近的应用程序......负载均衡器仅用于路由请求负担最小的机器。

一种方法是在您的 DNS 服务器中使用 GoIP,例如,如果您想托管和维护自己的 DNS 服务器,您可以使用 powerdns

区域文档中的示例:

domains:
- domain: geo.example.com
  ttl: 30
  records:
    geo.example.com:
      - soa: ns1.example.com hostmaster.example.com 2014090125 7200 3600 1209600 3600
      - ns: ns1.example.com
      - ns: ns2.example.com
      - mx: 10 mx.example.com
    fin.eu.service.geo.example.com:
      - a: 192.0.2.1
      - txt: hello world
      - aaaa: 2001:DB8::12:34DE:3
  services:
    service.geo.example.com: '%co.%cn.service.geo.example.com'

它的工作方式是从发出请求的 IP 中找到国家代码(同时解析 geo.example.com),然后将定义的记录发送到该地区。

在示例中,如果您的用户在芬兰并尝试访问 geo.example.com,则返回的 IPv4 将为 192.0.2.1 和 IPv6 2001:DB8::12:34DE:3

如果您使用的是 AWS,则可以使用 route53 服务。

另一种方法是使用 CDN,例如,您可以尝试 Cloudflare Load Balancing 选项。

如果您只关心延迟,那么地理区域并不是影响到达服务器所产生的延迟的唯一因素。一种合理的方法是简单地尝试所有服务器,看看哪个响应最快。这会给你带来其他东西,包括在服务器宕机时切换服务器的能力。