代码之家  ›  专栏  ›  技术社区  ›  gstackoverflow

允许使用来自不同微服务的相同表吗?

  •  -1
  • gstackoverflow  · 技术社区  · 6 年前

    我们有两个微服务:

    服务A,服务B。两者使用相同的数据库。今天我发现我们为不同服务使用的相同表提供了存储库。我记得我读到这是一个设计错误的原因,并试图谷歌的信息。但不幸的是我的搜索没有成功。你能解释一下这个问题吗?

    也可能是我的错。那么,对不同的微服务使用相同的表可以吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mark Bramnik    6 年前

    根据我的经验,在微服务之间共享相同的数据不是一个好的做法。 以下是(可能不完整的)一组原因:

    • 很难说哪个微服务才是真正的数据所有者。从建筑的角度来看这是不好的

    • 模式更改的成本要高得多,因为契约没有很好地定义。例如,如果在一个微服务中删除列,则第二个微服务可能会停止工作,即使第一个微服务的代码已针对更改进行了调整。 在其他情况下,它仍然可以工作,但性能可能会恶化(例如,由第一个微服务的维护者删除索引,因为它与在其中完成的查询无关,可能会导致第二个微服务的性能恶化)

    • 如果某个微服务缓存了某些数据,并且可以在同一个微服务的不同实例之间保持数据同步,那么如果另一个微服务直接更新数据库,并且没有将更改通知第一个微服务,则很难保持正确的同步。

    • 如果数据库是性能瓶颈,那么如果这些微服务具有不同的可伸缩性策略,那么这两个微服务都将受到影响,特别是难以处理的问题

    • 迁移到不同数据库的成本(如果需要的话)将要高得多,因为必须在两个微服务中更改代码

    • 如果使用orm,比如jooq(任何需要代码生成的工具),那么很难理解将生成的文件放在哪里?两种微服务?在其中一个里面?如何共享数据模型

    • 通常为每个微服务构建的度量会很棘手,因为如果我们测量对数据库中某个表的访问,我们不确定另一个微服务也不会访问该表。

    既然这么说了,毕竟这是一个不使用这种做法的建议,从技术上讲,没有理由不使用这种做法。所以最终决定权在你。 我可以从个人经验中说,在我的一个项目中,我们停止了管理微服务之间的共享数据库,从我的观点来看,这是朝着正确方向迈出的一步。