重负载LAMP应用的最佳硬件配置是什么?

3
我需要运行Linux-Apache-PHP-MySQL应用程序(Moodle在线学习平台),以支持大量的并发用户——我希望能够处理5000个用户。所谓的并发是指5000人应该能够同时使用该应用程序。“工作”不仅意味着进行数据库读取,还包括写入。
该应用程序不是非常典型,因为它在数据库上执行了许多插入/更新操作,因此缓存技术并不能提供太多帮助。我们正在使用InnoDB存储引擎。此外,该应用程序并没有考虑性能方面的问题。例如,一个Apache线程通常占用大约30-50 MB的RAM。
请告诉我需要什么样的硬件才能构建可扩展的配置来处理这种负载。我们现在使用两个HP DLG 380服务器,每个服务器有两个4核处理器,可以处理较低的负载(通常是300-500个并发用户)。是否值得投资于这种类型的服务器,并使用它们构建集群,或者更好地选择一些高端硬件?
我特别想知道:
- 需要多少台和多强大的服务器(处理器/核心数、RAM大小) - 应该使用什么网络设备(什么类型的交换机、网络卡) - 是否需要任何其他硬件,如特定的磁盘存储解决方案等
另一件事是如何组装所有内容,即什么是最优化的架构。使用MySQL进行集群化相当困难(人们在Stackoverflow上也抱怨MySQL Cluster)。

适合发布在ServerFault网站上。 - t0mm13b
我怀疑这不是一个 Stack Overflow 格式的问题。它更像是付费咨询主题。甚至是招聘经验丰富的人的主题。 - Your Common Sense
我只想学习人们如何解决类似应用程序的问题。 - Piotr Kochański
3个回答

2

一旦你的几台物理机无法满足你需要的最高负载,你可能想要开始虚拟化。

EC2 目前可能是 LAMP 堆栈最灵活的解决方案。您可以将它们的虚拟机设置为物理机一样,将它们集群化,按需启动它们以获取更多计算时间,在非高峰期间关闭它们,创建机器映像,使系统测试变得容易...

有各种可用于负载平衡和自动启动的解决方案。

如果您的应用程序适合,您也可以使用它们的非关系型数据库引擎。在非常高的负载下,关系型数据库(尤其是 MySQL)不会有效地扩展。SimpleDB、BigTable 和类似的非关系型数据库的最高负载几乎可以随着添加硬件而线性扩展。

然而,摆脱关系型数据库是一个巨大的步骤,我从来没有必要自己这样做过。


0
Piotr,你有没有尝试在moodle.org上提出这个问题?有几个类似的安装范围,其工作人员目前正在回答。
此外,根据您部署的时间表,您可能希望查看Moodle 2.0系列而不是Moodle 1.9系列,因为该版本似乎有一些针对Moodle架构中某些问题的良好修复程序。
另外:memcached非常适合此类问题。PHP加速器也非常适合此类问题。对于这个问题,Serverfault可能是更好的*交换站点。

0

我对硬件不是很确定,但从软件角度来看:

如果有一个高效的数据层,可以缓存从数据库返回的对象和集合,那么标准的主从配置应该可以正常工作。将所有写操作路由到一个强大的主服务器,将所有读操作路由到从服务器,并根据需要添加更多从服务器。

将数据作为从数据映射器/ORM返回的对象进行缓存,而不是HTML,并使用Memcached作为缓存层。如果更新对象,则先写入数据库并在Memcached中更新,最好使用IdentityMap模式。你可能需要相当多的Memcached实例,尽管你可以在Web服务器上运行这些实例。

我们无法使MySQL集群正常工作。

编写SQL查询时要小心,这样就应该没问题了。


我们从来没有成功地让MySQL集群正常工作过...你是指尝试使用MySQL Cluster本身,还是使用了MMM或DRBD等工具?你尝试了什么? - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接