我们已将rails应用程序部署到EC2.在我们的设置中,我们在循环DNS后面的小实例上有两个代理.这些运行Nginx负载平衡器用于动态增长和缩小的Web服务器群.每个Web服务器还运行带有一组mongrels的Nginx.这里的Nginx处理静态内容并负载平衡杂种.
无论如何,我们的流量大小都是HTTPS.我们有2个代理人负责SSL.我注意到这些实例上的网络吞吐量仅为60 Mbps左右.相比之下,在测试中,我可以通过常规HTTP在小型实例上始终获得700 Mbps.实际上,这与我在大型实例上可以得到的相同.类似于Right Scale的人在their testing中得到的东西.(亚马逊说,一个小的网络I / O得到“温和”,而一个大的得到“高”.如果我不得不推测,我认为这只是他们说那里的方式每个物理盒共享一个网卡的实例更小.我不确定这是否意味着大型网络接口会有专用的网络接口,但我会怀疑它.)
在测试中,我能够获得一个大型实例来获得大约250 Mbps的SSL.这告诉我,cpu或其他资源是瓶颈.但是,我们的监控图表并未显示代理上的cpu特别繁忙.
我的问题是:
>由于cpu正确而我的监控图是错误的,我对SSL的直觉是否较慢?或者其他一些资源可能是限制因素?
>我们是否应该花费额外的成本并将代理放在高cpu实例上?或者只是添加更多小实例会更好吗?
>我们应该将SSL终端卸载到Web服务器吗?这引入了另外一个问题:我们如何在我们的应用程序中获取客户端IP地址?现在我们的代理将它设置在X-FORWARDED-FOR标头中,但显然如果它不解密SSL则不可能.
我很想知道任何类似的设置.我们对他们的弹性负载均衡器进行了修改,但我认为这基本上使我们处于与上面#3相同的情况.有没有其他人转向ELB并发现它值得吗?
您使用什么监视来确定您的cpu使用情况? SSL通常非常占用cpu.
我会将SSL代理保留为指定层,这样您就可以将协商ssl的成本与其他问题分开.