它已经出现了一段时间,但现在亚马逊已经发布了弹性负载平衡(ELB),您对为高流量 Web 应用程序部署此解决方案有何想法?
我们应该替换HAProxy还是将 ELB 作为 HAProxy 前面的免费服务?
我已经在一个每天获得大约 100,000 次访问的网站上运行 ELB 而不是 HAProxy 大约一个月了,我对结果非常满意。
不过有个问题(更新,这个问题已经被亚马逊 AWS修复了,见下面的评论):
http://mysite.com
到http://www.mysite.com
。除此之外,我对 AWS ELB 产品的评价还不够高。我也在使用 Cloudwatch 监控和自动缩放。哦,别忘了它比运行一个小型EC2实例便宜(每小时 0.025 美元而不是 0.10 美元)。
ELB 对 DNS CNAME 记录间接的依赖对于需要非常快的 Web 服务来说是相当严重的。在我们的例子中,我们需要有非常好的响应时间。在快速性能测试中,使用 ELB 将 HTTP 请求的平均延迟增加了近 2 倍。这主要是因为 CNAME 查找的 TTL 为零。因此,所有查找都涉及访问两个不同域的名称服务器,因此名称解析要慢得多。(我担心击败 DNS 中的缓存只是对系统的滥用。)在我们的案例中,ELB 的唯一希望是通过让 Amazon 支持弹性 IP 作为负载均衡器实例的地址来摆脱 CNAME 记录。
另一个问题是获取客户端 IP 地址。对于常规 HTTP,这可以正常工作,因为 ELB 设置了 X-FORWARDED-FOR 标头。但是对于 HTTPS,这是不可能的,因为它是在 TCP 层转发的。希望有一天ELB会终止SSL。
亚马逊论坛上有关于 ELB 可靠性的投诉。我建议你去那里搜索ELB,在这方面形成你自己的看法。
我们想使用 ELB 来负载平衡 Web 服务请求,但是我们有很多外部调用者,其中一些会发送 100-Continue HTTP 消息。不幸的是,ELB 不理解 HTTP 协议的那一部分,所以在解决这个问题之前,我们无法超越概念验证。
2013 更新
根据 AWS 论坛帖子,现在支持 HTTP 100-Continue。
对于许多使用 ELB 的用户来说,一个主要问题是它不支持粘性,这是许多 Web 应用程序的杀手锏。
然而,根据亚马逊 AWS开发人员的说法,它应该会出现在下一个版本中。