2017-04-15 97 views
1

我打算使用微服务架构来实现我们的网站。我想知道在服务之间共享数据库是否正确,或者最好为每个服务分别建立一个数据库。在这方面,我可以考虑为所有服务建立一个通用数据库还是违反了微服务架构的本质?针对微服务架构的数据库设计

回答

5

如果您共享相同的数据库,那么您将失去微服务的两个最重要的优点:strong cohesion and loose coupling (page 25)

如果你不共享表中的数据库,你可以共享同一个数据库。例如,microservice1使用table1_1table_1_2microservice2使用table2_1table2_2。当我说使用我的意思是读写。一个微服务不会读取,也不会写在另一个的表上。

+0

感谢您的回答。但在我的应用程序中,有一种情况是其中一种服务使用来自其他服务的数据。在这种情况下,我是不是冒险在服务之间和从客户端到不同服务之间进行太多的API调用? – user2288991

+1

微服务仅使用网络进行通信 –

+0

您可能需要查看自己的设计,找到有界的上下文,以便很好地划分垂直线,这样您就不需要跨越服务边界来执行数据更新(状态更改),数据读取不太关心...... –

5

微服务优惠解耦。您必须将您的应用程序分解为独立的域。每个域可以有一个数据库。如果其他MS需要访问某些其他微服务拥有的数据,则必须通过网络进行通信。

如果您觉得依赖服务过多且网络呼叫过多,则可以定义一个域,将相关服务聚集在一起。

例如 - 假设我有一个在线测试评估服务,公司的经理可以发布测试,他可以查看其部门中所有员工的结果。

我对这种情况下微服务将是:

初步设计

  1. 用户服务:对于登录和用户信息。
  2. 测试服务:评估测试的服务。
  3. 员工:处理员工详细
  4. 公司:处理组织CRUD
  5. 部:处理部门CRUD

它分解之后,好像员工,机构和部门的服务将使得过多的网络/ API调用,因为它们彼此紧密相关。所以最好将它们聚类。

更新设计

  1. 用户服务:对于登录和用户信息。
  2. 测试服务:服务评估测试
  3. 组织:处理公司,员工和部门相关的操作。

每个服务都可以拥有自己的数据库,并且可以独立部署。用户和测试服务可以使用mongoDB或任何NoSql数据库,组织服务可以使用RDBMS。

希望这会有所帮助。