我正在构建一个异步 RESTful Web 服务,并试图找出最具可扩展性和高性能的解决方案是什么。最初,我计划使用 FriendFeed 配置,使用一台运行 nginx 的机器来托管静态内容,充当负载均衡器,并充当运行 Tornado Web 服务器的四台机器的反向代理以获取动态内容。建议在四核机器上运行 nginx,在单核机器上运行每个 Tornado 服务器。Amazon Web Services (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 不托管静态内容,它实际上只是充当负载均衡器。这里有一篇很棒的论文比较了不同云配置的性能,并谈到了负载均衡器:“HaProxy 和 Nginx 在第 7 层转发流量,因此由于 SSL 终止和 SSL 重新协商,它们的可扩展性较差。相比之下,Rock forwards没有 SSL 处理开销的第 4 层流量。” 您是否建议将 nginx 作为负载均衡器替换为在第 4 层上运行的负载均衡器,或者亚马逊的弹性负载均衡器是否足够高性能?