两种微服务可读写一个数据库表

man*_*ana 5 architecture microservices

我对微服务最佳实践方法有些困惑。

以下情况:

来自mqtt设备的大量传入消息。客户可以阅读消息的REST API(主要是其中的一部分)。

我的想法是,创建一个微服务以将消息存储在数据库表中。另一个带有REST API的微服务可读取此消息。由于缩放问题,我想这样做。(传入的存储部分比阅读其余的api需要更多的功率)

我读到,“完美的”微服务应该是唯一一个访问其数据库中数据的服务。因此,其他微服务应通过其API而不是在数据库级别上请求此数据。因此,我的方法将不是完美的方法。我看到一些解决方案:

  • 仅一个mircroservice,用于存储和读取
  • 在存储微服务中创建一个api,其余的微服务可以在其中获取数据。

但是所有这些都不对我好。

你怎么看?

问候,马库斯

tom*_*ern 4

我将推荐一种方法,该方法在某种程度上取决于以下问题的答案:

从消息提交到数据库到客户可以看到该消息的最大可接受时间延迟是多少?

如果这个问题的答案> 10ms,那么你可以考虑使用读写分离——你的用例似乎是一个很好的用例。

尽管这可能会给您的解决方案带来更多复杂性,但这种方法的好处包括:

  • 数据库写入和读取之间没有争用
  • 写入可以独立扩展。
  • 您的书面数据可以以关系格式存储
  • 可以以最简化检索和显示问题的方式读取客户数据(例如,非规范化、与视图模型对齐)

将此应用到您的架构中,即使不使用某种持久排队传输,仍然可以实现读写分离,但会更加困难。你必须让整个事情由命令驱动,而不是利用事件。

这里的主要区别在于,您需要在主数据库写入和随后对负责更新读取模型的服务的调用中强制执行“可事务性”。