我们正在运行一个非常时间敏感的Web应用程序(响应时间必须低于100毫秒),有很多请求(峰值时每分钟大约有200万个请求)。架构非常简单:负载均衡器,多个Web服务器,运行apache和php,以及运行MySQL的数据库。
我们还需要能够根据这些请求生成统计数据。
大约一年前,当我们提供当前流量的十分之一时,我们开发了一些bash / python脚本来定期从mysql转储日志,将它们转移到另一台服务器,再次导入它们并在那里运行统计信息,我们的想法是让生产服务器尽可能少地工作,这样我们的响应时间就会很短。
正如您可能想象的那样,该解决方案的扩展性不是很好,而目前,统计服务器几乎没有跟上。我们需要一种实时生成统计数据的方法。
您对这种设置有什么经验吗?我们目前的想法是让Web服务器在每次请求时实时调用统计服务器。
两个主要问题是:
答案 0 :(得分:2)
为什么要使用数据库?在请求进入时,动态计算内存中的平均值和标准差。您不会有任何延迟,并且您可以使用MBean控制台访问值。
这只能在单个服务器上运行,而不能在群集上运行。
答案 1 :(得分:2)
1)单独的MySQL服务器 为什么不直接连接到另一台MySQL服务器并在那里写入统计数据?从这个时候开始,我会为每天创建一张桌子,这样我就可以在不需要的时候轻松移动旧桌子。这里的问题是缺乏水平可扩展性......
2)NoSQL 也许你应该使用MongoDB或Redis来做这样的事情?它们更快,因为它们基于内存并提供分片。
3)独立统计服务器 如果您正在提供HTML,您可以在远程服务器上添加javascript方法来调用脚本(以及带有URL的小img里面的标签,用于禁用javascript的用户),这可以从URL中给出的params写入统计信息。这将完全卸载应用程序服务器上的所有内容,您可以尝试#1或#2的建议......