【发布时间】:2021-11-04 21:42:27
【问题描述】:
场景:我们正在构建一个包含帖子的应用程序。这些帖子可以被用户喜欢(就像社交媒体平台一样)。特定帖子可能会有持续的点赞。我们在服务器上使用 Node.JS,并在数据库中使用 MongoDB。
关注:我原本打算只构建一个 RESTful API,每当帖子被点赞时就会被点击。此 API 仅使用帖子的递增/递减计数更新数据库。但是,如果同一个帖子面临多个点赞活动,那么数据库条目将开始变得不一致,并且计数值将开始变得不一致。
问题:
- 为避免这种不一致,我计划使用队列 (AWS SQS)。使用队列会解决我的问题吗? (根据我的分析,会的)
- 但是,如果队列的订阅者(轮询队列的系统)明天扩展,我会不会面临同样的计数不一致问题?
- 如果不排队,有没有更好的方法来解决这个问题?
- 其他社交媒体平台如何解决点赞不一致的问题?
其他详情
预计会有什么样的不一致? --> 如果 2 个用户同时点赞一个帖子,node.js 实例将并行接受这两个请求,他们都将获取数据库条目(几乎同时)并增加点赞数。当更新发生时,两个实例都用不同的值更新相同的数据值,造成不一致。
【问题讨论】:
-
嗨@KenY-N 感谢这个惊人的建议,但不管架构如何,我仍然必须将点赞数保存在帖子的架构中。我担心这是否会因为该帖子的不断更新而变得不一致。
标签: node.js mongodb amazon-web-services queue amazon-sqs