我应该在每次操作的基础上向服务器POST高速率用户操作,还是在会话关闭后发送一批事件



我正在建立一个网站,用户可以在这里观看视频并点击任意次数。对于那些了解它的人来说,这有点像Periscope的"Hearts"功能。

观众目前正在网络浏览器上观看视频。每个"赞"都被输入到heroku托管的REDIS实例中,所以写/读相当便宜。然而,由于许多用户同时观看视频,因此可能存在高的同时输入率。

在这种情况下,我面临两种选择:

  1. 每当用户"点赞"时,都会向REDIS实例发送一个事件。方便:立即用所有相关信息讲述"赞"。不便:服务器上同时有很多点赞
  2. 在本地缓存"点赞",并仅在会话结束后发送到REDIS。问题:用户可以随时关闭浏览器(可能永远不会返回),因此"赞"信息可能会永久丢失

关于哪种选择更可取,有什么建议吗?

不要缓存。

首先,这是一个非常复杂的问题,因为你不知道会议什么时候真正结束。

其次,Redis的增量可能和你的缓存一样快。我敢打赌,你只关心Rails,而不是Redis。

你可能最终想要制作另一个端点——也许是一个简单的Sinatra应用程序——来简单地处理点赞。我注意到autosuggest gems有时会这样做(例如),它节省了rails请求的所有开销。

如果它是一个成功的应用程序,那么问题可能是有人写了一个脚本来不断地"点赞"。随着时间的推移,您可能需要设置一些限制,以允许有限数量的请求。

最新更新