多用途节点对于扩展来说是一件好事吗?

多用途节点对于扩展来说是一件好事吗?

我有一个具有不同层的网络应用程序:

  • 持久性数据库
  • 一些 Web 服务器(mongrels)
  • 负载均衡器

现在所有程序都在同一台主机上运行。但是我如何添加另一台服务器来处理更高的负载?

在进一步扩展之前我是否应该分离角色(数据库和网络)?

PS,让我们简化这个问题并忽略该问题中的高可用性问题。

PPS 数据库目前不是瓶颈。我真的想添加更多 Web 服务器,请帮忙

答案1

@gotts:扩展小型网站的规范方式如下所示:

第一的:拆分为 2 个服务器,一个运行 HTTP 服务器和 Web 应用程序代码 (webapp),另一个用于数据库。数据库服务器应针对数据库工作负载进行优化,即大量 RAM、快速磁盘 I/O、快速 CPU。

然后:将静态文件服务从 Web 应用服务器卸载到其他服务器或内容分发网络。考虑在 Web 应用服务器上禁用 HTTP KeepAlive。

然后:转移到至少有 4 个服务器的设置:

  • 前端一个 HTTP 负载均衡器,使用基于源 IP 地址的一致性哈希算法。
  • HTTP 负载均衡器后面有 2 个 webapp 服务器。
  • 在webapps后面,有1个数据库服务器。

Brad Fitzpatrick 的演讲展示了典型的进展在第一页。如果这一切对你来说都是新的,也许你应该考虑雇佣一个曾经做过这件事的系统管理员…… :-)

答案2

现在所有程序都在同一台主机上运行

愚蠢的想法,还是?我的意思是 - 如果只有一台主机,那么负载平衡器在列表中到底起什么作用?这是对我来说完全没有意义的一件事。

  • 首先要区分角色。特别是因为需求有很大不同(较大的数据库需要更多的 IOPS,这意味着需要很多磁盘)。

  • 然后重新编程,以便多个 Web 服务器可以轻松共存。

  • 最后,如果需要,添加一个负载平衡器,或者使用 DNS 循环。

答案3

为了安全和性能,我倾向于将传入的 http 处理推入表示层(1 个或多个服务器)。静态内容可以在表示层中提供。此外,您的数据库/业务逻辑也不太容易受到攻击。

相关内容