更快地处理多个请求

背景

我正在build立一个游戏,监视外部行为(微博,FB喜欢等),并定期更新用户更新的信息(每10秒左右通过AJAX)。 所有的用户在一定时间内都会被放入谷歌街景,而且他们需要四处寻找标记。 游戏的思想是标记被隐藏起来,直到用户靠近它们,因此,我们不能将它们存储在JS中(太容易查看源代码)。 所以,每当用户移动时,我们都会发送一个AJAX请求发送经纬度,以便我们可以显示标记,如果他们在正确的区域。

问题

我们有几百人一次玩这个游戏,期待更多。 响应时间约为10 / 20ms,我们正在使用APC,但是当我们打了几百个用户时,服务器的响应时间正在显着减慢(特别是当这些人在街景上跑来跑去时,提出请求或者两个,每一个,每一秒)。

我们正在使用4GB内存的LAMP堆栈(我们可以在云端进行更改),但是我想知道是否有更好,更具可扩展性的方式来处理这个问题。 我一直在阅读关于Nginx的许多内容,那么这对于我们的体系结构是否可以同时处理更多的请求? 其他人如何使用LAMP堆栈来处理这种types的轮询?

一般来说,有两种处理更多请求的观点,而且服务速度更快。 一种观点是编写非常有效的代码。 另一种观点是要有非常高效的服务(服务器)。 你可以尽力而为,但很难实现。 大多数网站位于这两个极端之间的某处。 对于这两种方法,我可以推荐完全切换到nginx,如果不是只提供静态文件的话,nginx在这两个方面的性能都比apache好一个数量级。 nginx是非阻塞服务器,并没有PHP的服务非PHP服务器的文件不像Apache的开销。

新的程序员和业余爱好者倾向于使用预制的框架和平台进行开发。 这些代码并不是最佳的,因为它们旨在为广大观众服务。 这一群人考虑到优化他们的服务(服务器),因为他们不能离开他们的框架,因此不能完全优化他们的代码。 在这种方法中,在linux上的nginx上下文中,你可以调整你的服务器来获得最大的性能:

  1. 你会想优化你的操作系统上的tcp堆栈。
  2. 增加打开文件描述符的数量。
  3. 您可能希望将您的www目录放在虚拟磁盘上。

  4. 如果你决定使用nginx,你会希望增加nginx中的worker连接和进程,以及worker的数量。

  5. 你可能会想要设置caching来弥补写得不好的代码。
  6. 您目前正在使用APC这是一个对象caching,您可能也想使用APC设置页面caching,这将再次提供一个数量级的改进。
  7. 您可能需要memcache数据库查询,这应该为数据库瓶颈提供空间。
  8. 在Web和数据库服务器上使用更大的缓冲区。

另一组是一般有经验的编程人员,他们从头开始编写自己的代码,或者可以在以后的某个时候设法编写自己的代码,尝试编写超高效的代码,并在服务器精简http响应的“devise”方面尽量简化它可以在任何堆栈上执行最佳操作。 我在这里没有提供任何build议,只是build议遵循各自领域的最佳做法。 虽然,我可以告诉你在这方面的Facebook的故事。

Facebook是从服务器优化到代码优化的标志性故事。 他们最初是使用apache构build在PHP上的,他们很快遇到了性能问题,此时他们开始大量优化服务器。 操作系统,PHP堆栈的一切都进行了优化。 不久,他们不得不开始使用memcache,这是我记忆中最近的。 但是一旦他们再次遇到服务中断, 在这一点上,因为他们不能进一步优化PHP本身,他们实际上编译成机器代码! 就改进而言,哪一方面是最终的。 现在他们只能添加更多的服务器。 除非他们改变他们的语言。 这也将停止在一个点的好处。

所以这是你前面的两个select。 做出明智的select!

最后,我可以补充一点,您应该遵循Yahoo Yslow和Google Pagespeed中的规则和准则来提高性能。 缩小你的JS,HTML,PHP,CSS,并相应地放置在顶部和底部。 使用CDN。 devise打火机页面等最好的运气!