Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何从我的微服务A';s将数据库发帖到微服务B_Postgresql_Spring Boot_Microservices - Fatal编程技术网

Postgresql 如何从我的微服务A';s将数据库发帖到微服务B

Postgresql 如何从我的微服务A';s将数据库发帖到微服务B,postgresql,spring-boot,microservices,Postgresql,Spring Boot,Microservices,我创建了四个微服务。第一个服务只处理登录模块(A)的注册,第二个服务有发布和评论模块(B),第三个服务有评级和审核模块(C)和管理模块(D) 问题 所有的微服务都有自己的数据库,但服务B依赖于服务A的数据库。服务C依赖于B和A的DB,服务D也依赖于服务A、B、C。我对所有服务A、B、C使用postgres DB 选项1。 我可以使用JDBC连接工厂并将服务B连接到数据库,但这不是一个好的做法,因为如果服务A更改了它们的列,那么我们必须更改服务B模块 选项2。 我可以创建我的服务A和服务B的热备份

我创建了四个微服务。第一个服务只处理登录模块(A)的注册,第二个服务有发布和评论模块(B),第三个服务有评级和审核模块(C)和管理模块(D)

问题

所有的微服务都有自己的数据库,但服务B依赖于服务A的数据库。服务C依赖于B和A的DB,服务D也依赖于服务A、B、C。我对所有服务A、B、C使用postgres DB

选项1。 我可以使用JDBC连接工厂并将服务B连接到数据库,但这不是一个好的做法,因为如果服务A更改了它们的列,那么我们必须更改服务B模块

选项2。
我可以创建我的服务A和服务B的热备份副本,但这里的问题是只读的,我无法执行更新n删除。

您应该设计您的微服务,使它们不需要依赖于其他微服务。否则它看起来像是分散的整体。无论依赖关系是建立在微服务级别还是任何类型的数据库链接上,正如您的两个选项所建议的那样

IMHO清洁溶液为:

  • 如果您真的需要这样的粒度,请仔细考虑

  • 如果是,则为每个数据库声明特定微服务所需的所有实体。重复性不是问题——如果B模块(POST)需要用户数据库,让它拥有自己的用户表副本,而不是模块链接

  • 通过可靠消息传递系统(Kafka)连接微服务,其中一个微服务中的事件传播到其他微服务中的侦听器,并让它们更新其数据模型


  • 在这个模型中有很多冗余,但是它很健壮,而且更接近真正的分布式系统。我们在我们的大型fintech平台中成功地使用了它。

    只需在服务A中公开API,并从服务B调用此API即可获取数据。您可以在服务A中的postgres上使用缓存以获得更好的性能。您是否阅读了每个服务的
    数据库
    Sagas
    模式?回答得很好。我想补充两点:1。保留数据副本的服务不需要保留精确的副本,只需要保留他们感兴趣的部分。2.请意识到,这些副本本质上只是服务不拥有的数据缓存。永远不要更新服务不拥有的数据(除非拥有服务的服务说它已更改)。多亏了你们@Tomas