【问题标题】:Should I use microservices or mapped entities to share data between multiple applications?我应该使用微服务还是映射实体在多个应用程序之间共享数据?
【发布时间】:2020-08-24 18:23:37
【问题描述】:

我有一个包含多个应用程序的场景,每个应用程序都处理自己的数据。但是由于业务是耦合的,我们需要访问彼此的应用程序数据。

我们基本上有一个数据库依赖策略,与一些应用程序共享实体或在其他应用程序中映射视图。它创建了一个依赖地狱!

  1. 微服务如何在这种情况下帮助我们?

  2. 访问多个 url 是比使用数据库 JOIN 更好的策略吗? (例如 EntityA 与 EntityB 有映射依赖关系。如果我使用微服务策略,我将不得不调用 /apirest/resourceA 和 /apirest/resourceA/resourceB,对吗?这会比从 entityA 中选择 * 更好/更快吗?内连接实体B?)

  3. 如何解耦所有应用程序之间的数据(就像 10 个应用程序在某个时候访问相同的数据)?

  4. 任何材料/物品/技术指示?

【问题讨论】:

  • 这是微服务中的一个常见问题,您会在“微服务”标签下找到已经回答的类似问题。简而言之,通常不建议同步访问多个 url,因为它会紧密耦合服务。当有人遇到这种情况时,通常推荐的两条路线是:1. 重新审视您的设计以确保“有界上下文”是正确的,2. 应用“物化视图模式”,它讨论将数据异步传递到各个微服务在自己的数据库中构建本地“物化视图”,以便他们可以在本地访问数据。

标签: java spring orm dependencies microservices


【解决方案1】:
  1. 微服务定义了清晰的边界。他们不会奇迹般地让一切变得更快。
  2. 数据库连接也是可行的解决方案。如果您的数据微服务之间存在非常强的耦合,则可能不是正确的选择。微服务允许您的不同服务使用独立于其他服务的技术。假设您有服务 A 和 B。您可以在服务 A 中使用关系数据库来存储强耦合且需要事务安全性的数据,并在服务 B 中使用图形数据库来管理关系数据。服务 A 和 B 不关心对方在使用什么,因为它隐藏在服务边界之后。
  3. 如果您可以以最少的交互将数据划分为域,那么这些域边界是您的服务的良好起点。服务最终将不得不引用另一个服务的实体。两个可能的选项是始终调用其他服务或保留远程数据的最小本地副本(例如,仅远程实体的主键)。本地副本当然需要跟上数据(带有事件?)。目前我们正在努力解决这一点......
  4. 如果您使用 google 微服务,您将淹没在信息中。我喜欢https://martinfowler.com/articles/microservices.html 作为起点。

我确定我在这里没有涉及到微服务的所有方面,这只是一个简短的提示,为你的旅程提供一个方向......

【讨论】:

    猜你喜欢
    • 2020-10-22
    • 2017-09-26
    • 2014-06-04
    • 2013-05-19
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2013-06-25
    • 2016-07-30
    相关资源
    最近更新 更多