我们有一台服务器(4GB RAM,两个 4 核 Intel Xeon E5420)执行以下任务:
- 具有静态内容的网站(目前只是一些 CMS,我们计划添加缓存反向代理)
- 客户控制面板(基本上是数据库的网络界面)
- 我们桌面软件的后端脚本 - 一些 PHP 脚本,用于执行一些数据库查询/更新,但每个客户每 5 分钟就会执行一次
- 数据库存储上述两个数据
我们预计未来几周将有大量(多达数十万)用户涌入。我的上级担心我们当前的设置可能无法处理负载,并正在考虑转向云托管 - 但是,我并不确信这会有所帮助。根据我对云计算的理解,除非我们可以将工作负载分散到多台机器上(除非他们的单个服务器比我们的强大得多),否则虚拟化不会有太大帮助。他们提供 MySQL 集群,但是后端脚本只是在几行中读取/写入一些值,而不执行任何计算密集型 SQL 查询,因此我再次不确定 MySQL 集群与 Apache/PHP 开销 + MySQL 网络延迟相比会有多大区别。至于网站,我们还可以将大部分静态内容移动到 CDN,因为我们有一些视频剪辑可能会给我们的带宽带来压力。
那么,云托管会给我们带来任何好处吗?
答案1
可能,也可能不是。正如您所怀疑的那样,除非您可以轻松地将系统工作负载拆分为可通过网络通信的独立单元,否则在可扩展性方面,您不会看到使用“云”提供商的任何好处。有些“云”提供商确实提供更大的机器(无论如何从 RAM 角度来看——我怀疑您是否能从其中任何一个中获得相当于八个 E5420 核心的内存),但如果有必要,您也可以为现有服务器获得更多 RAM。
我会花时间查看系统的每个组件,评估每个组件的资源使用情况,并评估将其移到单独的机器上可以“节省”多少资源。然后,查看如何将每个组件(从资源最密集的组件开始)进行集群,以便将该组件的工作分配到多台机器上(这称为“水平可扩展性”)。一旦你对在预计的负载水平下可能使用接近一台机器的资源的所有组件都完成了上述操作,你就可以向上级提交一份计划以及将其全部拆分所需的工作量和成本估算。
这些都不是“云”特有的,只是对如何应对不断增加的用户负载的基本尽职调查。您可以开始利用“云”计算的优势的地方是,当您确实需要快速扩展时,您只需按一下按钮,然后就可以使用更多资源。不过,不要等到负载激增时才尝试——如果您非常重视正常运行时间,请始终运行至少两个可扩展组件,提前确定扩展触发阈值,监视它们,并尽快生成新实例。然后让系统承受巨大负载并测试一切是否按预期运行。
答案2
正如 Pauska 所指出的,虚拟化环境的价值很大一部分在于冗余和可用性,以及规模。您可能要考虑采用私有云式解决方案,例如 Rackspace 的解决方案,或者自行开发,前提是您拥有优秀的 VMWare 员工。然而,正如 womble 的出色帖子所指出的那样,这需要一些时间才能做好。
如果您面临紧迫的截止期限,而您又没有时间研究如何对应用程序进行分片,那么您可以考虑以下方法:
- 尝试将 Web 服务移至单独的服务器,以便 MySQL 可以拥有整个 8 核机器。这在 MS 环境中非常重要,但我确信它在 LAMP 堆栈中也具有价值。
- 为所有相关机器提供更多 RAM - RAM 很便宜。根据我的经验,研究它所花费的时间将比 RAM 花费更多,所以就这么做吧。
- 考虑反向缓存。在所有这些操作之前添加反向缓存可以减轻负载并提高规模,而不会带来任何复杂情况。
- 阅读 womble 的出色回复并遵循他的建议。