分布式系统和选择最近的数据中心
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 选项。
如果您只关心延迟,那么地理区域并不是影响到达服务器所产生的延迟的唯一因素。一种合理的方法是简单地尝试所有服务器,看看哪个响应最快。这会给你带来其他东西,包括在服务器宕机时切换服务器的能力。
我想知道如何始终将请求定向到最近的数据中心。一开始我想创建一个基于 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 选项。
如果您只关心延迟,那么地理区域并不是影响到达服务器所产生的延迟的唯一因素。一种合理的方法是简单地尝试所有服务器,看看哪个响应最快。这会给你带来其他东西,包括在服务器宕机时切换服务器的能力。