我正在构建一个RESTful Web服务,该服务将使用Load Balancers,Auto-Scaling等在AWS上运行......
然而,作为服务的一部分,我需要确保客户端请求延迟尽可能低。因此,我希望美国的潜在用户能够访问美国的EC2实例和欧洲用户,以访问基于欧洲的服务器。
实现这一目标的最佳做法是什么?假设客户端只访问某个API端点(例如使用curl),如何引导流量?
这是我的域名提供商的DNS设置吗?
或者我是否有一个可以重定向到适当的区域负载均衡器的初始负载均衡器? (各种失败的目的?!)
或者我需要实现某种类型的客户端逻辑吗?
谢谢!
答案 0 :(得分: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边缘)集群。提供。