我需要为大量并发用户运行Linux-Apache-PHP-MySQL应用程序(Moodle电子学习平台) - 我的目标是5000个用户。同时我的意思是5000人应该能够同时使用该应用程序。 “工作”不仅意味着数据库读取,也意味着写入。
应用程序不是很典型,因为它在数据库上进行了大量的插入/更新,因此缓存技术没有多大帮助。我们正在使用InnoDB存储引擎。此外,应用程序并未考虑性能。例如,一个Apache线程通常占用大约30-50 MB的RAM。
我非常了解需要哪些硬件来构建能够处理此类负载的可扩展配置。
我们现在正在使用两个HP DLG 380和两个4核处理器,它们能够处理更低的负载(通常为300-500个并发用户)。投资这种盒子并使用它们构建集群是否合理?或者更适合使用更高端的硬件?
我特别好奇
另一件事是如何将所有内容组合在一起,这就是最优化的架构。使用MySQL进行集群相当困难(人们抱怨MySQL Cluster,即使是在Stackoverflow上也是如此)。
答案 0 :(得分:2)
一旦你超过了几台物理机没有给你所需的峰值负载,你可能想要开始虚拟化。
对于LAMP堆栈,EC2可能是目前最灵活的解决方案。您可以将虚拟机设置为物理机,集群,在需要更多计算时间时将其旋转,在非高峰时间关闭它们,创建机器映像以便于系统测试...
有各种解决方案可用于负载平衡和自动启动。
如果您可以使您的应用程序合适,您也可以使用其非关系数据库引擎。在非常高的负载下,关系数据库(尤其是MySQL)无法有效扩展。 SimpleDB,BigTable和类似的非关系数据库的峰值负载可以在添加硬件时几乎线性扩展。
远离关系数据库是一个巨大的进步,我不能说我自己需要这样做。
答案 1 :(得分:0)
我不太了解硬件,但从软件的角度来看:
使用高效的数据层来缓存从数据库返回的对象和集合,然后我会说标准的主从配置可以正常工作。将所有写入路由到强大的主站,并将所有写入路由到从站,根据需要添加更多从站。
将数据缓存为从数据映射器/ ORM而不是HTML返回的对象,并使用Memcached作为缓存层。如果更新对象然后写入数据库并在memcached中更新,最好使用IdentityMap模式。您可能需要相当多的Memcached实例,尽管您可以在Web服务器上运行这些实例。
我们永远无法让MySQL群集正常工作。
小心你编写的SQL查询,你应该没问题。
答案 2 :(得分:0)
Piotr,你有没有试过在moodle.org问这个问题呢?有几个类似的范围安装,其工作人员目前回答。
另外,根据您的部署时间范围,您可能需要查看moodle 2.0系列而不是moodle 1.9系列,看起来有一些很好的解决方案可以解决moodle架构的一些问题。那个版本。
另外:memcached摇滚为此。 php加速岩石为此。尽管
,serverfault可能是这个问题的更好*交换网站