什么时候开始向 Web 应用程序添加(或考虑添加)服务器才是合适的时机?从单台服务器(数据库和 Web)升级到多台服务器会遇到哪些困难?
例如:
最多您首先从一台用于 DB 和 Web 的服务器开始,然后将 DB/Web 拆分到不同的服务器上,然后转到多个 Web 服务器(这会产生会话问题),然后可能是用于 DB 的 NAS 等等。
答案1
什么时候是开始向您的 Web 应用程序添加(或考虑添加)服务器的正确时间?...(从一台服务器...到多台服务器)
想想吧: 从一开始就。
开始添加:当您第一次收到“服务器太忙”错误时。任何更早的优化都是过早的优化。
(除非您的 Web 应用程序是关键任务,在这种情况下您可能不会从头开始,也不需要调查 serverfault.com 社区。)
但说真的,对于现代消费者网络应用程序来说,“服务器太忙”实际上可能是一个好的事情。它肯定不会伤害 Facebook、Twitter 或 YouTube。过早添加服务器的危险在于,您的应用永远不会像您预期的那样受欢迎,而且您最终会浪费本可以用于功能开发的资金。
如果您是少数真正拥有热门网络资产的幸运儿之一,那么 (a) 恭喜您,并且 (b) 您将能够从日志文件中测量平均响应时间,并可以采用更加指标驱动的方法来添加服务器。
答案2
就我个人而言,我总是从与 DB 服务器分离的 Web 服务器开始。
(基于IIS6和SQL Server)
- 数据库只会消耗资源(RAM、磁盘、CPU)并与 Web 服务器竞争。这会使 Web 服务器看起来反应迟钝,数据库“变坏”
- 安全性。在“边缘”上设置比您需要的更多的东西并不是一个好主意。将数据库移到 DMZ 内部,并在防火墙上为 SQL 流量设置一个非标准漏洞(不是 1433)。
- 角色分离。现在您可以查看是数据库、IIS 还是应用程序占用了 CPU
但是,我们所有这一切都是在 vmware 服务器(实际上是 3 节点集群)上进行的,并且 Web 服务器和数据库服务器只有 1 个 vCPU 和 1GB RAM。而且它们支持相当繁忙的网站套件(外部和内部网),且不费吹灰之力。
但我知道如果我的人气飙升(而且可能有一天会发生!)我可以快速为虚拟机重新配置更多的 RAM 和 CPU。
实用建议:随时监控自己的表现。跟踪变化并积极主动。
答案3
什么时候是开始添加(或考虑添加)服务器到您的 Web 应用程序的最佳时机?
当你设计应用程序时。我见过太多的应用程序没有设计为使用多个服务器,而后来的逆向工程可能会非常可怕。
确保在多台服务器上进行测试。再次强调。我见过许多应用程序在开发/测试中运行良好,但在生产中却失败了,因为它们无法处理负载平衡器或防火墙,没有考虑多播等。
当您的容量管理统计数据表明,在添加另一台服务器所需的时间内容量就会耗尽时,您就需要添加另一台服务器了。
你们在收集容量统计数据吗?没有?那么还有一件事需要与应用程序开发人员和基础设施管理人员讨论。
我不认为等到“服务器太忙”并惹恼用户时再开始是正确的做法。向生产环境添加新服务器可能是一个漫长的过程,等到出现错误后再开始并不是明智之举。
答案4
您应该做的一件事是对现有的单服务器应用程序进行负载测试,以查看它可以同时支持多少个会话和用户。了解之后,您可以随时间监控这些相同的指标。当您的数字开始接近已知限制时,就该开始准备新硬件进行部署了。您需要考虑额外服务器的准备时间,以便在现有系统达到极限之前进行部署。这是一个非常笼统的概述,John Allspaw 的《容量规划的艺术》一书中详细介绍了详细信息。
话虽如此,我会将数据库服务器和 Web 服务器拆分成各自的系统作为起点,然后对每个系统进行负载测试以确定理论负载。通常 Web 服务器会首先成为瓶颈,因此在编写应用程序时应考虑可扩展性。问题提到了会话,根据您使用的平台,有几种方法可以在服务器之间共享会话、将它们存储在中央数据库中或使用负载平衡硬件,除非由于某种原因服务器不可用,否则该硬件会将同一用户引导到同一服务器。
但要回答核心问题“我们什么时候知道什么时候做这件事”,这将完全取决于您收集的指标并将它们与通过负载测试得出的已知限制进行比较。