多个微服务应该如何与共享数据交互?

问题描述 投票:0回答:1

我是微服务新手,但我理解的一件事(至少作为原则)是每个微服务应该是独立的。

微服务之间的交互只能通过定义良好的接口进行,最好是 API,而不是共享数据库。

假设我有一个简单的网络应用程序,它向公共用户显示一些内容。内部用户(管理员)访问内部 Web 界面并将内容写入数据库表。如果他们“批准”,表格的全部内容就可以公开。

现在,如果没有微服务,我可以做很多事情。

例如,我可以让两个服务都指向同一个表并添加“公共”标志。

或者我可以设置两张表,一张“公共”,一张“私有”,并确保审批过程将私有表复制到公共表中。

但所有这些解决方案都意味着这两个服务访问相同的数据库,或者至少它们通过 SQL 查询而不是 REST API 进行交互。

我很想将所有内容捆绑在一个微服务中。

但感觉不对:公共服务在可扩展性等方面可能有不同的要求。如果“内部”网站停止工作,也不一定会破坏现有的公共应用程序。那么为什么要耦合这些组件呢?

这个示例可能过于具体,但我怀疑潜在的问题适用于许多用例。

design-patterns microservices
1个回答
0
投票

单一服务解决方案

实现管理数据的服务。数据有一个字段

boolean public
。只有具有给定角色的用户才能调用创建/更新/删除数据的端点。查询数据的端点对任何人开放,但只有具有给定角色的用户才能看到不公开的数据。如果用户没有该角色,只需添加
AND public=true
即可实现此目的。

具有两种服务和消息传递的解决方案

实施管理数据的私有服务。数据有一个字段

boolean public
。只有具有给定角色的用户才能调用该服务来查询/创建/更新/删除数据。每次修改数据时,服务都会发出一条消息。

实现一个公共服务,该服务使用私有服务发出的消息,以便将所有标记为公共的数据写入其数据库。如果公共数据可以再次变为私有,请不要忘记也实施该案例。这项公共服务只有查询数据的端点,对所有人开放。

© www.soinside.com 2019 - 2024. All rights reserved.