Web 服务 - 根据区域处理流量

Web Service - Handing Traffic based on region

我正在构建 RESTful Web 服务,该服务将 运行 在 AWS 上使用负载均衡器、自动缩放等...

但是,作为服务的一部分,我需要确保客户端请求延迟尽可能低。所以我希望美国的潜在用户访问美国的 EC2 实例,欧洲的用户访问欧洲的服务器。

实现此目标的最佳做法是什么?假设客户端只访问一些 API 端点(例如使用 curl),我该如何引导流量?

这是我的域名提供商的 DNS 设置吗?

或者我是否有一个可以重定向到适当的区域负载平衡器的初始负载平衡器? (有点违背目的?!)

或者我需要实现某种类型的客户端逻辑吗?

谢谢!

进行重定向的初始负载平衡器会特别慢——基本上每个请求都必须重复,并且会涉及两个不同的 SSL 连接……client-side 逻辑会是一个维护难题,并且不提供直接的故障转移机制。

Latency-Based Routing

If your application is hosted on Amazon EC2 instances in multiple Amazon EC2 regions, you can reduce latency for your users by serving their requests from the Amazon EC2 region for which network latency is lowest. Amazon Route 53 latency-based routing lets you use DNS to route user requests to the Amazon EC2 region that will give your users the fastest response.

http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html#routing-policy-latency

此外,您可以将 HTTP 健康检查集成到组合中,这样一来,如果 - 例如 - 英国服务器未通过健康检查,Route 53 会将它们排除在组合之外 return对那些会将他们发送到不同区域的客户端的响应,直到最近的区域恢复在线。

可选地,在 front-end 和 latency-based 上使用 CloudFront(禁用缓存,如果适用)路由到 back-end 上的服务器集群将有助于消除一些陷阱严格 DNS-based 负载平衡,这是一些 http 库不恰当地缓存 DNS 响应的时间太长——有时在第一次请求时解析地址并无限期地保留该初始值(直到重新启动)。这是错误的行为,但祝你好运,向你的服务用户解释问题出在他们身上,而不是你。 CloudFront 在很大程度上为您清理了这个问题,因为客户端会路由到最近的 CloudFront 边缘,然后根据当前的 DNS 响应 Route 53 通过 AWS 网络将请求转发到最近的(到该 CloudFront 边缘)集群提供。