1

我们正在运行一个对时间非常敏感的 Web 应用程序(响应时间必须低于 100 毫秒),有很多请求(峰值时每分钟大约 20 万个请求)。架构非常简单:一个负载均衡器、几个 Web 服务器、运行 apache 和 php,以及一个运行 MySQL 的数据库。

我们还需要能够根据这些请求生成统计信息。

大约一年前,当我们为当前流量的十分之一提供服务时,我们开发了一些 bash/python 脚本来定期从 mysql 转储日志,将它们传输到另一台服务器,再次导入它们并在那里运行统计信息,其想法是让生产服务器尽可能少地做,这样我们就可以有一个较短的响应时间。

正如您可能想象的那样,该解决方案的扩展性不是很好,目前,统计服务器几乎没有跟上。我们需要一种实时生成统计数据的方法。

你有这种设置的经验吗?我们目前的想法是让 Web 服务器在每个请求上实时调用统计服务器。

两个主要问题是:

  • 我们应该如何解决这个问题,以便响应时间不会增加太多
  • 统计服务器或服务器必须处理来自所有 webheads 的所有请求/或者它需要能够水平扩展。
4

2 回答 2

2

为什么要使用数据库?在请求进入时动态计算内存中的平均值和标准偏差。这样不会有任何延迟,并且可以使用 MBean 控制台访问值。

这只能在单个服务器上工作,而不是在集群上。

于 2012-04-18T20:21:53.450 回答
2

1) 独立的 MySQL 服务器 为什么不直接连接到另一个 MySQL 服务器并在那里写入统计信息?此时此刻,我会想到每天都创建一张桌子,这样我就可以在不需要时轻松地将旧桌子移出。这里的问题是缺乏水平可扩展性虽然......

2) NoSQL 也许你应该使用 MongoDB 或 Redis 来处理这样的事情?它们速度更快,因为它们基于内存并提供分片。

3) 独立的统计服务器如果您提供 HTML,您可以在远程服务器上添加 javascript 方法来调用脚本(以及带有 url 的小 img 标签,用于禁用 javascript 的用户),远程服务器可以从 URL 中给出的参数写入统计信息。这将完全从应用程序服务器上卸载所有内容,您可以在那里尝试建议 #1 或 #2 ...

于 2012-04-18T22:18:00.693 回答