【问题标题】:Communication between Microservices and cohesion using REST微服务之间的通信和使用 REST 的内聚
【发布时间】:2021-02-05 10:28:45
【问题描述】:

这个问题在我脑海中盘旋了一段时间,找到解决方案时似乎无法理解其中的逻辑。

这是交易: 我目前正在开发一个简单的应用程序,该应用程序已拆分为 2 个微服务。 该应用程序与管理软件 Trello 的任务非常相似。 有一个微服务专门用于存储用户信息(用户服务) 另一个微服务负责董事会(董事会持有列表和列表持有任务,但这与我的问题无关)。两种微服务都使用自己的数据库。 所有这些都将托管在 AWS 上,代码是用 Java 编写的,我使用 Hibernate 来生成数据库。

我的问题: 如何使用用户服务并让多个用户实体使用 Board? 我了解使用将 BoardId 与 UserId 一起存储的多对多表的做法,但是如果我要删除连接到板的用户会发生什么。用户数据库中的 User 与板存储的 userId 之间没有逻辑连接。 (一个用户可以登录多个板子,反之亦然)

简而言之我的问题:
这在数据库中看起来如何?
Boards 服务如何访问 User 服务并将用户保存到 Boards?
当我在用户微服务上删除用户时会发生什么?

【问题讨论】:

  • 大概是用户服务返回了板服务可以使用的ID?例如代表用户的 UUID? UUID 对于板服务来说是没有意义的,除了对真实用户来说是一个可解析的占位符。解析这些 UUID 是用户服务的工作。如果一个用户被删除了,只需告诉board service删除相应的UUID

标签: java amazon-web-services rest microservices


【解决方案1】:

这似乎是一个典型的微服务通信相关问题。根据我的知识和经验,有一个解决方案,即在架构中引入一个消息代理,它可以对事件执行操作,例如 USER_DELETED 事件可以传递给板微服务,该微服务将处理板相关的数据库更改。

刚开始实施此功能可能会让您感到害怕,但如今,所有非常支持的互联网社区每天都在帮助并提出新的解决方案,这并不难。 如果您在 Spring Boot 中使用 Java 进行微服务,那么有 Apache Kafka、Hazelcast 等解决方案(相当划算)。 如果你使用 NodeJS 做微服务,那么 NATS 是我最近使用的库之一。

【讨论】:

  • 我以前听说过 Kafka,谢谢,我去看看!数据库会是什么样子?我是否需要在 Boards 数据库中创建一个具有多对多关系的单独表,或者我可以让 Board 表只保存一组 UUID?另外,它需要是用户类型还是只是 UUID?
  • 如果有必要使用 RDBMS,那么在简单的情况下 3 个表 1) 用户 2) Board 和 Users_Board(多对多)。在这里,您可能必须共享数据库,其中用户服务将仅访问用户和 Users_Board 表,而董事会服务将访问 Boards 表和 User_Board。其他有点复杂的解决方案是,如果您必须使用 2 个不同的数据库,那么您必须在两个数据库中保留 Users_Board 表。这将引入轻微的冗余,并会稍微占用一点空间,但现在一天的存储不是问题,而且真的很便宜。
猜你喜欢
  • 2018-06-20
  • 1970-01-01
  • 2016-03-13
  • 2016-06-10
  • 2018-05-07
  • 1970-01-01
  • 2016-03-05
  • 2018-01-22
  • 1970-01-01
相关资源
最近更新 更多