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