【发布时间】:2013-06-19 16:04:20
【问题描述】:
我需要构建一个简单的分析后端来捕获用户行为。这将通过网页上的 Javascript sn-p 捕获,就像 Google Analytics 或 Mixpanel 数据一样。
系统需要捕捉接近实时的浏览器数据(页面滚动位置、鼠标位置等),每5秒记录一次用户页面的状态。每次测量只有三个属性,但必须经常测量。
数据不一定需要每 5 秒发送一次,它可以不那么频繁地发送,但是当用户在页面上时我必须获取所有数据。即,我不能每分钟总线一次并且丢失 119 秒后离开的人的最后 59 秒数据。
如果可能的话,我想构建一个可在可预见的未来扩展的系统,这意味着它适用于 10,000 个站点,每个站点有 100 个并发访问者,即 100,000 个并发用户每 5 秒发送一个事件。
我不担心查询数据,这可以使用单独的系统完成。我最感兴趣的是如何处理数据本身的捕获。
要求
根据上述预算,系统每秒需要处理来自 100,000 个用户池的 20,000 个事件。
我想在 Heroku 上托管这项服务,但是虽然我已经使用 Rails 完成了很多工作,但我对高吞吐量系统完全陌生(除了知道您不使用 Rails 处理它们之外)。
问题
- 是否有适合执行此操作的商业系统(如 Pusher,但用于数据捕获和分发)?
- 我是否应该使用 HTTP 请求或 websocket 来执行此操作?
- node.js 是正确的选择还是只是时尚?
- 如果我选择基于套接字的解决方案,Heroku 上的测功机可以为每个 Web 服务器处理多少个套接字
- 在 Mongo / Reddis 等存储之间进行选择的相关注意事项是什么
- 这种类型的问题实际上需要两种解决方案吗?第一种是让您快速、廉价地达到合理的规模,第二种是通过较低的增量成本使您超越该规模,但需要更多的前期开发工作?
【问题讨论】:
-
建议两种解决方案是在煮熟它。查看 Rackspace 的 CTO 题为“扩展 Web 应用程序的 7 个阶段”slideshare.net/davemitz/7-stages-of-scaling-web-applications 的(简短)演示文稿
-
我的建议是考虑您的前 10 个站点并在尝试设计 10,000 个站点之前更多地了解问题域