是否可以通过其API查询微服务的ORM?

时间:2019-10-30 10:44:52

标签: orm microservices api-design

是否可以通过其API查询微服务的ORM,并将其用作另一个微服务的ORM?

例如假设我有一个微服务A及其API(我们将其称为API_A),其DB(DB_A)和其内部对象关系映射器实例(ORM_A),它们将属于微服务的类之间的对应关系定义为关系结构数据库并管理其访问。

现在假设我想拥有一个微服务B,它相对于A具有不同的功能,尽管其ORM与A相同(因此,具有相同DB_A结构的DB,尽管不一定具有相同的数据,但不同功能可能会产生不同的数据。

如何以一种智能的方式查询/复制/镜像ORM_A到微服务B中,这样我就不会重复代码,并且当A更改时,ORM_B也相应地更改而无需人工干预?

是否可以通过API将ORM_A查询到B,然后在微服务B中重新创建它?

1 个答案:

答案 0 :(得分:2)

API_A内部的代码更改可能会导致API_B内部的代码更改的想法在服务及其数据之间建立了耦合,这表明它们不应该是两个不同的服务。

如果API_B实际上执行的功能与API_A完全不同,并且仅需要API_A浮出水面的结构中的一些数据,则应考虑几个不同的选择,以确保API_B可以从API_A访问相关数据:

  1. 在API_B可以访问的端点中显示来自API_A的数据。这将创建一个易于执行和测试的API合同。此解决方案相对易于实现,但是会在两个API之间创建一些依赖关系。
  2. 设置一个事件主题,每当API_A写入API_B(或其他服务)可能希望使用的数据时,您都可以通知该事件主题。通过读取这些事件,API_B可以将相关数据以其自己的格式写入其自己的DB,从而避免通过数据结构或协定与A耦合。此解决方案需要创建事件队列,但它将是API_B性能的最佳解决方案。

我已经看到人们在采用微服务时遇到了困扰(我自己也为之苦恼),这是数据复制尚可的想法。尽量不要将数据视为跨多个服务的关系,因为这样自然就可以创建微服务中要避免的那种耦合。祝你好运!