0

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

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

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

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

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

还是我需要实现某种类型的客户端逻辑?

谢谢!

4

1 回答 1

1

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

基于延迟的路由

如果您的应用程序托管在多个 Amazon EC2 区域中的 Amazon EC2 实例上,您可以通过处理来自网络延迟最低的 Amazon EC2 区域的用户请求来减少用户的延迟。Amazon Route 53 基于延迟的路由让您可以使用 DNS 将用户请求路由到 Amazon EC2 区域,从而为您的用户提供最快的响应。

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

此外,您可以将 HTTP 健康检查集成到组合中,这样如果——例如——英国服务器的健康检查失败,Route 53 会将它们从组合中移除,并将响应返回给那些将它们发送到的客户端一个不同的区域,直到最近的区域重新上线。

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

于 2016-01-08T04:10:11.507 回答