我使用 NGINX、Rails 和 MySQL 创建了一个 Web 应用程序。目前它们都在单个 VPS(Slicehost)上运行。我遵循最佳实践,并维护了一个非常简约的“无共享架构”,这样一来,如果需要扩展,我只需增加几个切片即可满足需求。
考虑到我试图将成本保持在尽可能低的水平,那么在需要时引入额外切片的良好策略是什么?我最初的想法是运行 3 个 VPS。两个用于主/从配置中的数据库,一个用于 NGINX/Rails。随着负载的增加,根据需要增加其他 NGINX/Rails 服务器,而原始服务器负责处理与其他服务器的负载平衡。
你的想法是?
答案1
很多其他帖子都涉及了这个问题。一般来说:
1)使用 chef 或 puppet 等工具进行系统配置管理。
2)使用类似 fabric 或其他工具进行代码部署。
对于上述内容...这些不容小觑...以可重复的方式进行扩展是关键。
3)如果您不使用 CDN,您可能需要分离一台(或多台)服务器用于简单的静态服务(图像)。
4) 至于数据库与应用服务器,您知道您的应用程序瓶颈在哪里吗?如果不知道,请对其进行压力测试。找出几种不同常见情况下的瓶颈,并以此为基础进行容量规划。规划如何分片您的数据库(例如,基于密钥的多个副本)。规划如何分配/负载平衡您的传入流量。
为了节省成本,你可以在像 amazon 这样的网站上进行大量测试,这比像 Slicehost 这样的 VPS 便宜得多(支付数小时/天来扩展 DB 分片或应用程序服务器,而不是支付一个月的 VPS 费用,您可能不会经常使用)。
您甚至可以从 EC2 内部运行压力测试,以将流量成本降至最低。
答案2
除了 ironchef 的评论之外,我还要确保您的高可用性负载平衡基础设施运行良好前您需要它;这意味着要么从一开始就使用 Slicehost 提供的负载平衡(如果他们有类似的产品可用),要么从一开始就拥有两个“前端”切片,并在它们之间共享负载平衡器 HA。您确实需要不是当您受到流量冲击时,想要匆忙地启用负载均衡器,特别是因为看起来您对这类事情还没有特别的经验。