我们有一个WebApp,可以同时登录用户(在任何给定时间,大约有10k-30k用户)。该应用程序收集分析,特别是在某些可能每秒几次发生的用户操作上。
到目前为止,我们的应用程序设计已经相当脱钩(大量的memcache/redis和延迟的DB写入),我们很好地避免了锁,以确保没有任何"集中"。
管理层最终决定建立一个实时分析小组,该小组应该在全球计数器中汇总这些行动(降至1秒粒度)。拥有这些"全球"计数器的最佳方法是什么?我们可以增加一些memcache键,但是我们有一组memcaches(EC2),因此对所有键进行迭代以计算钥匙会延迟此指标。DB是不可能的,因为我们在这方面瓶装很多,因此所有DB写入都会延迟到消息队列(Beanstalkd)
任何提示都将不胜感激。
这看起来适合于该动作的NOSQL转储,并定期同意。在EC2上,您可以访问所需工具的正确位置。
您可以通过设置辅助Web服务器记录所有操作,泵入单独的数据库服务器,完全避免您现有的Web服务器基础架构。或者,如果不合适,请共享Web服务器,但仍会卸载到单独的NOSQL Server。
然后,如果"实时"可以延迟一小段(几秒钟或几分钟),则可以具有将NOSQL表格的清扫功能延迟到一个格式中,更适合分析系统,然后泵入您的"实时"数据库并清除已处理的NOSQL数据。
另外,您可以直接从NOSQL获取统计信息?
NOSQL可能与使用Memcached一样快(各种基准报告各种结果,具体取决于谁编写了报告),但是当您需要同意时,将数据合并在一起时肯定会更快。