微服务架构的数据库设计

时间:2017-04-15 13:34:54

标签: database microservices

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

2 个答案:

答案 0 :(得分:28)

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

如果您认为依赖服务太多而网络调用太多,那么您可以定义一个域,将依赖服务聚集在一起。

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

这种情况的我的微服务将是:

初步设计

  1. 用户服务:用于登录和用户信息。
  2. 测试服务:评估测试的服务。
  3. 员工:处理员工详细信息
  4. 公司:处理组织CRUD
  5. 部门:处理部门CRUD
  6. 在分解之后,似乎员工,组织和部门服务将进行过多的网络/ API调用,因为它们彼此紧密相关。因此,将它们聚类起来会更好。

    更新设计

    1. 用户服务:用于登录和用户信息。
    2. 测试服务:评估测试的服务
    3. 组织:处理公司,员工和部门相关的业务。
    4. 每项服务都可以拥有自己的数据库,并且可以独立部署。用户和测试服务可以使用mongoDB或任何NoSql DB,组织服务可以使用RDBMS。

      希望这有帮助。

答案 1 :(得分:14)

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

如果您不共享相同的数据库,则可以共享该数据库。例如,microservice1使用table1_1table_1_2microservice2使用table2_1table2_2。当我说用途时我指的是读写。一个微服务不会读,也不会写在其他桌子上。