【发布时间】:2010-04-16 22:24:52
【问题描述】:
我们已将 Rails 应用部署到 EC2。在我们的设置中,我们在循环 DNS 后面的小实例上有两个代理。它们运行 nginx 负载均衡器,用于动态增长和缩小的 Web 服务器群。每个 Web 服务器还运行带有 杂种集群的 nginx。这里的 nginx 负责静态内容和负载均衡。
无论如何,我们的流量大体上是 HTTPS。我们有 2 个代理负责 SSL。我注意到我们在这些实例上的网络吞吐量上限仅为 60 Mbps 左右。相比之下,在测试中,我能够通过常规 HTTP 在小型实例上始终获得 700+ Mbps。实际上,这与我在大型实例上可以获得的相同。类似于 Right Scale 家伙在 their testing 中得到的东西。 (亚马逊说小的获得“中等”网络 I/O,而大获得“高”。如果我不得不推测,我认为这只是他们说每个物理盒子有更多小实例共享一个网卡的方式.我不确定这是否意味着大型获得专用网络接口,但我会怀疑。)
在测试中,我能够让一个大型实例获得大约 250 Mbps 的 SSL。这对我说 CPU 或其他资源是瓶颈。但是,我们的监控图并没有显示我们代理上的 CPU 特别繁忙。
我的问题是:
- 我对 SSL 变慢的直觉是不是因为 CPU 正确而我们的监控图有误?或者其他资源是否会成为限制因素?
- 我们是否应该承担额外的成本并将代理放在高 CPU 实例上?还是只添加更多的小实例会更好?
- 我们是否应该将 SSL 终止卸载到 Web 服务器?但是,这又引入了一个问题:我们如何在应用程序中获取客户端 IP 地址?现在我们的代理将它设置在 X-FORWARDED-FOR 标头中,但如果它不解密 SSL,显然这是不可能的。
我很想听听任何类似的设置。我们对他们的 Elastic Load Balancer 进行了一些修改,但我认为这基本上使我们处于与上述 #3 相同的情况。有没有其他人改用 ELB 并觉得值得?
【问题讨论】:
标签: ruby-on-rails ssl amazon-ec2 nginx amazon-web-services