我正在 EC2 上构建基础设施,其中我将 nginx 作为 apache+php 服务器前面的负载均衡器。每个 apache 服务器都有一些虚拟主机。
我正在考虑当虚拟主机收到太多请求而无法处理时最好的扩展方法。
我想我可以限制每个虚拟主机的连接数,比如说 100 个,然后当连接数超过 100 个时,我会创建一个新实例(使用 ruby 和 fog gem)并在该实例上配置另一个虚拟主机,使用新实例的 IP 在 nginx 平衡器中添加另一个后端。
这是可行的方法吗?或者您有什么建议?
答案1
这就像扩展物理硬件时一样需要平衡。专注于单一指标来决定何时生成新实例可能毫无帮助。
任意限制 100 个连接可能远低于实例实际能够处理的数量,因此您将在计算能力上花费过多。另一方面,您的实例在达到该点之前可能会因 RAM/CPU 或 I/O 而阻塞。
您应该了解一下 AWS 自动扩展功能。这将允许您设置策略,这些策略将在指定的硬限制内并基于大量 Cloud Watch 指标自动扩展和收缩计算集群。您需要使用 API 设置适当的策略,然后根据负载和预算观察和调整它们。