在高流量网络开发中设计全球动作计数器



我们有一个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一样快(各种基准报告各种结果,具体取决于谁编写了报告),但是当您需要同意时,将数据合并在一起时肯定会更快。

相关内容

最新更新