我们有一个webapp,可以满足数百个同时登录的用户(在任何给定时间大约10K-30K用户)。该应用程序收集分析,特别是可能每秒发生几次的某些用户操作。
到目前为止,我们的应用程序设计已经相当分离(大量的memcache / redis与延迟的DB写入)并且我们避免锁定以确保没有任何“集中”。
管理层最终决定构建一个实时分析面板,该面板应在全局计数器中聚合这些操作(低至1秒粒度)。什么是拥有这些“全球”计数器的最佳方式?我们可以增加一些内存缓存密钥,但是我们有一个内存缓存集(EC2),所以迭代它们以计算密钥会延迟这个指标。 数据库是不可能的,因为我们在这方面有很多瓶颈,因此所有数据库写入都通过消息队列延迟(beanstalkd)
任何提示都将受到高度赞赏。
答案 0 :(得分:2)
这似乎适合于动作的NoSQL转储,并定期进行聚合。在EC2上,您可以在正确的位置访问所需的工具。
您可以完全避免现有的Web服务器基础结构,方法是设置辅助Web服务器来记录所有操作,并将其引入单独的数据库服务器。或者,如果不合适,请共享Web服务器,但仍然卸载到单独的NoSQL服务器。
然后,如果“实时”可以延迟一小段时间(几秒或几分钟),您可以使用清扫程序功能将NoSQL表格格式化为更适合分析系统的格式,然后泵入您的“实时”数据库并清除已处理的NoSQL数据。
或者,您可以直接从NoSQL获取统计数据吗?
NoSQL可能与使用Memcached一样快(各种基准测试报告各种结果,具体取决于编写报告的人),但是当你需要聚集时,将数据拉到一起肯定会更快。