投票表决应用的数据复制

问题描述 投票:0回答:1

这里是微服务和后端开发的新手:我正在构建一个实时投票应用程序,以了解有关微服务和后端不同架构的更多信息。现在我有 2 个服务与我当前的问题相关:投票和民意调查。

Polls:创建民意调查并使用 poll_id 保存它们的服务

投票:添加或删除投票的服务 - 需要投票事件发生的 poll_id

我的计划:有一个用于民意调查的主数据库

(poll_id (pk),name (str),voters (list of users), votes (hashmap str:int))
,并在投票中有一个副本。这样我就实现了职责分离(对吗?),不需要两个 MS 依赖一个数据库。我打算使用 mongodb 的更改流功能或使用消息队列在每次主更改时更新副本来执行此操作。

我的问题:这是解决问题的正确方法吗——我什至需要将投票和民意调查分开吗?在这种情况下同步数据库的理想方法是什么。

我会很感激任何帮助,谢谢!

mongodb microservices backend database-replication
1个回答
0
投票

这听起来像是一个总体上不错的方法,但我提醒您不要将其视为复制品,而您似乎是。

民意调查服务(及其持久性)对于民意调查是否存在(以及可能何时过期等)的问题具有权威性。

投票服务(及其持久性)对于给定民意调查中有多少票的问题具有权威性。

这意味着没有数据库对两者都是权威的。

投票服务从轮询服务接收有关更改的事件(例如,参数的创建、更新等)并更新它的视图。它可能不关心轮询服务的每一个变化,它甚至可能不关心轮询服务数据库中模式的每个字段,这反对数据库级复制(它往往是在假设它是相同模式的情况下设计的:即使他们现在是,也不能保证他们将来会是,因为这些服务应该能够独立发展)。更改提要可用作获取事件流的一种方式(与有意识地发布事件相比可能有一些严重的限制),但关键是从消费者的角度将它们视为命令,如用户发送的内容:接受验证和拒绝.

类似地,如果投票服务(例如投票结束后)需要知道当前的投票总数,它可以从投票服务订阅事件。

© www.soinside.com 2019 - 2024. All rights reserved.