微服务架构的数据库设计

10 浏览
0 Comments

微服务架构的数据库设计

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

0
0 Comments

随着微服务架构的兴起,数据库设计也需要相应地进行调整。如果多个微服务共享同一个数据库,那么就会失去微服务架构的两个最重要的优势:强内聚性和松耦合性。因此,需要找到一种解决方法来解决这个问题。

一种解决方法是通过在数据库中划分不同的表来实现共享。例如,微服务1使用表1_1和表1_2,微服务2使用表2_1和表2_2。这里的使用指的是读取和写入数据,即一个微服务不会读取和写入其他微服务的表。

然而,有人提出了一个问题:在某些情况下,一个服务需要使用其他服务的数据。这样一来,服务之间的API调用就会变得非常频繁,而且客户端还需要与不同的服务进行通信。

为了解决这个问题,可以采用消息代理来共享状态,并且每个微服务将这个状态保存到自己的数据库中(或者是缓存中)。这样一来,如果需要某些数据,可以先将数据异步地复制到本地缓存表中,然后进行计算或其他操作。

有人对于这种复制数据的模式提出了异议,但同意微服务之间只通过网络进行通信的观点。如果需要从微服务中获取数据,建议创建一个端点来提供此数据,而不是直接使用数据库API。这样,管理微服务的团队将会知道并拥有数据库操作,而不用担心其它团队的更改可能导致问题。

需要注意的是,上述的共享表的方法适用于表级别的共享,而不适用于数据库级别的共享。只有在某些特殊情况下,比如使用NoSQL数据库的单表设计时,多个微服务读取和写入同一个表是可以考虑的。在这种情况下,可能会有性能上的优势,但仍建议将数据库的所有权交给一个第三方或组合团队,以确保各方的需求得到满足。

针对微服务架构的数据库设计需要考虑强内聚性和松耦合性的问题。可以通过划分表、使用消息代理和自主管理数据库操作等方法来解决这些问题。这样一来,就能够更好地实现微服务架构的优势。

0
0 Comments

随着微服务架构的出现,解耦变得越来越重要。你必须将应用程序拆分为独立的领域。每个领域可以拥有自己的数据库。如果其他微服务需要访问其他微服务拥有的数据,则它们必须通过网络进行通信。

如果你觉得有太多依赖的服务,并且网络调用会太多,那么你可以定义一个领域,将依赖的服务进行集群。

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

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

初始设计

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

拆分后,似乎员工、组织和部门服务之间的网络/ API调用太多了。因此,最好将它们进行集群。

更新的设计

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

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

希望这对你有所帮助。

0