1

我们有一个 webapp 可以满足数百个同时登录的用户(在任何给定时间大约 10K-30K 用户)。该应用程序收集分析,特别是每秒可能发生几次的某些用户操作。

到目前为止,我们的应用程序设计已经非常解耦(很多 memcache/redis 具有延迟的 DB 写入),并且我们很好地避免了锁以确保没有任何东西是“中心化的”。

管理层最终决定构建一个实时分析面板,该面板应将这些操作汇总到全局计数器中(低至 1 秒粒度)。拥有这些“全球”计数器的最佳方式是什么?我们可以增加一些 memcache 键,但我们有一个 memcache 集群(EC2),因此迭代所有它们以计算键会延迟这个指标。DB 是不可能的,因为我们在这方面遇到了很多瓶颈,所以所有 DB 写入都通过消息队列(beanstalkd)延迟

任何提示将不胜感激。

4

1 回答 1

2

这似乎适用于 NoSQL 转储操作,并定期聚合。在 EC2 上,您可以在正确的位置访问所需的工具。

您可以完全避免现有的网络服务器基础设施,方法是设置一个辅助网络服务器来记录所有操作,并注入一个单独的数据库服务器。或者,如果不合适,共享网络服务器,但仍卸载到单独的 NoSQL 服务器。

然后,如果“实时”可以延迟一小段时间(几秒钟或几分钟),您可以拥有一个清扫器功能,将 NoSQL 表聚合成更适合分析系统的格式,并注入您的“实时”数据库并清除已处理的 NoSQL 数据。

或者,您可以直接从 NoSQL 获取统计信息?

NoSQL 可能与使用 Memcached 一样快(各种基准测试报告各种结果,具体取决于谁编写了报告),但当您需要聚合时,它肯定会更快地将数据拉到一起。

于 2012-11-09T04:37:27.930 回答