【发布时间】:2020-06-26 22:33:10
【问题描述】:
我有一个Scheduler 服务,它允许我添加计划任务。该服务仅在其数据库中保存触发任务时要调用的调度时间和端点。
例如,有一个Payment 服务和一个EmailReminder 服务。 Payment服务可以为Scheduler服务添加定期支付的定时任务。 EmailReminder 服务可以为Scheduler 服务添加邮件提醒任务。当任务在Scheduler服务中触发时,它们将被标记为done并发送到相应服务的端点以处理任务。
在前端,它必须显示预定电子邮件提醒任务的所有信息,例如收件人电子邮件,电子邮件内容以及是否已完成。前端将从位于EmailReminder 服务中的 API 中提取大部分信息。这很简单,因为它需要从自己的数据库中显示在 API 中的所有数据。
然而,我的困境是我应该将done 状态保留在Scheduler 服务的数据库中,还是将该状态保存在各个服务自己的数据库中。
如果状态存储在Scheduler 服务中...
如果我在Scheduler 服务中保持“完成”状态,那么每当其他服务需要知道某项任务是否完成时,它们必须对Scheduler 服务进行 API 调用。换句话说,每次从前端调用其 API 时,EmailReminder 服务必须从Scheduler 服务获取所有记录的“完成”状态。我相信这也会在整体请求上产生额外的时间。但这样做的好处是Scheduler 服务中的数据库是判断任务是否完成的唯一真实来源。
如果状态存储在相应的服务中...
在这种情况下,EmailReminder 服务不需要对Scheduler 服务进行额外的 API 调用。该信息可在其自己的数据库中获得。这也意味着当Scheduler 服务中的done 状态发生变化时,它必须调度一个事件来通知所有服务更新它们的状态。然而,这样做的缺点是,我基本上在两个地方复制了同一条信息(done 状态); Scheduler 服务和 EmailReminder 服务。存在数据不一致的风险。
在像我这样的微服务架构中,将此类信息存储在Scheduler 服务中还是在相应的服务中更好?
【问题讨论】:
标签: node.js database-design architecture domain-driven-design microservices