我们有一个We应用程序,可以满足数百名同时登录的用户(任何给定时间大约10K-30K用户)的需求。该应用程序收集分析,特别是针对可能每秒发生几次的特定用户操作。
到目前为止,我们的应用程序设计已经相当解耦(有很多memcache/redis,数据库写入延迟),我们很好地避免了锁,以确保没有任何东西是“集中的”。
管理层最终决定构建一个实时分析面板,该面板应在全局计数器中聚合这些操作(粒度降至1秒)。拥有这些“全局”计数器的最好方法是什么?我们可以增加一些Memcache键,但是我们有一个Memcache簇(EC2),所以迭代所有的Memcache键会延迟这个指标。数据库是不可能的,因为我们在这方面遇到了很多瓶颈,所以所有的数据库写入都会通过消息队列(beanstalkd)来延迟
任何建议都将受到高度赞赏。
发布于 2012-11-09 12:37:28
这似乎适合动作的NoSQL转储,并定期聚合。在EC2上,您可以访问所需的工具。
您可以通过设置第二个You服务器来记录所有操作,并将其注入到单独的数据库服务器中,从而完全避免现有的You服务器基础设施。或者,如果不合适,则共享not服务器,但仍将负载卸载到单独的NoSQL服务器。
然后,如果“实时”可以延迟一小段时间(几秒或几分钟),您可以使用一个清理器函数将NoSQL表聚合为更适合分析系统的格式,并将其输入到“实时”数据库中,并清除已处理的NoSQL数据。
或者,您也可以直接从NoSQL获取统计数据?
NoSQL可能与使用Memcached一样快(不同的基准测试报告不同的结果,这取决于报告的作者),但当您需要聚合时,它肯定会更快地将数据集中在一起。
https://stackoverflow.com/questions/13301648
复制相似问题