6 nginx tornado amazon-s3 amazon-ec2 amazon-web-services
我正在构建一个异步RESTful Web服务,我正在试图找出最具扩展性和高性能的解决方案.最初,我计划使用FriendFeed配置,使用一台运行nginx的计算机来托管静态内容,充当负载均衡器,并充当运行Tornado Web服务器的四台机器的反向代理,用于动态内容.建议在单核计算机上运行nginx,在单核计算机上运行每个Tornado服务器.亚马逊网络服务(AWS)似乎是最经济,最灵活的托管服务提供商,所以这里有我的问题:
1a.)在AWS上,我只能找到c1.medium(双核CPU和1.7 GB内存)实例类型.那么这是否意味着我应该在c1.medium上运行一个nginx实例,在m1.small(单核CPU和1.7 GB内存)实例上运行两个Tornado服务器?
1b.)如果我需要扩展,我如何将这三个实例链接到同一配置中的另外三个实例?
2a.)在S3存储桶中托管静态内容更有意义.nginx还会托管这些文件吗?
2b.)如果没有,性能会因为没有nginx托管它们而受到影响吗?
2c.)如果nginx不会托管静态内容,它实际上只是作为负载均衡器.有一个伟大的纸在这里,用于比较不同的云配置的性能,并说这对负载平衡器:"在7层两个HAProxy的和Nginx的转发流量,所以他们是因为SSL终止和SSL重新协商的少可扩展相比之下,摇滚前锋没有SSL处理开销的第4层流量." 您是否建议将nginx替换为在第4层上运行的负载均衡器,或者亚马逊的Elastic Load Balancer是否具有足够高的性能?
1a) Nginx 是异步服务器(基于事件),具有单个工作进程本身,它们可以处理大量同时连接(max_clients = worker_processes * worker_connections/4
参考)并且仍然表现良好。我自己在 c1.medium 类型的盒子(不在 aws 中)上测试了大约 20K 的并发连接。在这里,您将工作线程设置为 2 个(每个 cpu 一个)并运行 4 个后端(您甚至可以使用更多后端进行测试,看看它在哪里损坏)。仅当这给您带来更多问题时,才再进行一个类似的设置并通过弹性负载平衡器将它们链接起来
1b)如(1a)中所述使用弹性负载平衡器。看到有人测试了 ELB的 20K 请求/秒,这不是极限,因为他们失去了兴趣,他放弃了。
2a) 在cloudfront及其 CDN中托管静态内容,这正是为此目的(比 S3 更便宜、更快,并且它可以从 s3 存储桶或您自己的服务器中提取内容)。其高度可扩展。
2b) 显然,当 nginx 提供静态文件时,它现在必须向相同数量的用户提供更多请求。消除该负载将减少接受连接和发送文件的工作(减少带宽使用)。
2c)。完全避免使用 nginx 看起来是一个不错的解决方案(少一个中间人)。弹性负载均衡器将处理 SSL 终止并减少后端服务器上的 SSL 负载(这将提高后端的性能)。从上面的实验来看,它显示了大约 20K,并且由于它的弹性,它应该比软件 LB 拉伸更多(请参阅这个关于其工作的好文档)
归档时间: |
|
查看次数: |
3956 次 |
最近记录: |