Spring boot 面向微服务体系结构的分布式数据库设计风格

Spring boot 面向微服务体系结构的分布式数据库设计风格,spring-boot,microservices,distributed-database,Spring Boot,Microservices,Distributed Database,我正在尝试将一个单片应用程序转换为面向微服务的体系结构风格。后端我使用spring、spring引导框架进行开发。前端我用的是角度2。并使用PostgreSQL作为数据库 这里我的困惑是,当我设计分布式数据库时,根据功能,它可能包含5个数据库。意味着我是根据垂直分区设计的。然后我考虑实现跨微服务通信服务,以实现整个功能 另一方面,我认为应该横向划分当前结构。所以我的领域是基于一些教育大学。所以一半的大学在一个分贝之下,剩下的将在另一个分贝之下。并根据两个地区部署服务(两所大学两套) 目前,我决定

我正在尝试将一个单片应用程序转换为面向微服务的体系结构风格。后端我使用spring、spring引导框架进行开发。前端我用的是角度2。并使用PostgreSQL作为数据库

这里我的困惑是,当我设计分布式数据库时,根据功能,它可能包含5个数据库。意味着我是根据垂直分区设计的。然后我考虑实现跨微服务通信服务,以实现整个功能

另一方面,我认为应该横向划分当前结构。所以我的领域是基于一些教育大学。所以一半的大学在一个分贝之下,剩下的将在另一个分贝之下。并根据两个地区部署服务(两所大学两套)

目前,我决定继续采用上述方法。我不熟悉这些类型的任务,因为它涉及一些架构任务。我也是这个微服务和分布式数据库世界的初学者。有人能确认我的方法能解决我的问题吗?我可以继续我的第二种方法吗?根据域对象对数据库进行水平分区

目前,我决定继续采用上述方法

如果您希望数据库具有水平可伸缩性(针对越来越多的客户端连接进行扩展),那么最好使用设计为可伸缩分布式系统的技术。类似于或。例如,Cockroachdb内置了数据分片和复制功能,允许您根据需要添加服务器节点以实现增长

当我设计分布式数据库时,根据功能,它可能包含5个数据库

这听起来像你有一个正确的想法-按域功能划分。这里有一个链接,指向一个关于使用微服务的通用数据库设计的链接

目前,我决定继续采用上述方法

如果您希望数据库具有水平可伸缩性(针对越来越多的客户端连接进行扩展),那么最好使用设计为可伸缩分布式系统的技术。类似于或。例如,Cockroachdb内置了数据分片和复制功能,允许您根据需要添加服务器节点以实现增长

当我设计分布式数据库时,根据功能,它可能包含5个数据库


这听起来像你有一个正确的想法-按域功能划分。这里有一个关于微服务的通用数据库设计的链接。

在微服务世界中,每个微服务都拥有一组功能以及由这些功能操作的数据。如果一个微服务需要由另一个微服务拥有的数据,它不能直接访问由另一个微服务维护/拥有的数据库,而是调用由另一个微服务公开的API

现在,关于数据的放置,有多种选择——您可以将微服务拥有的数据存储在NoSQL数据库中,如MongoDB、DynamoDB、Cassandra(这实际上取决于微服务的用例),也可以在SQL数据库的单个实例中为每个微服务创建不同的表。但是请记住,如果选择一个包含多个表的SQL数据库实例,那么不同微服务所拥有的表之间就不会有连接(基本上没有交互)


我建议您从小处着手,然后在系统使用量增长时考虑数据库扩展问题

在微服务世界中,每个微服务都拥有一组功能以及由这些功能操作的数据。如果一个微服务需要由另一个微服务拥有的数据,它不能直接访问由另一个微服务维护/拥有的数据库,而是调用由另一个微服务公开的API

现在,关于数据的放置,有多种选择——您可以将微服务拥有的数据存储在NoSQL数据库中,如MongoDB、DynamoDB、Cassandra(这实际上取决于微服务的用例),也可以在SQL数据库的单个实例中为每个微服务创建不同的表。但是请记住,如果选择一个包含多个表的SQL数据库实例,那么不同微服务所拥有的表之间就不会有连接(基本上没有交互)

我建议您从小处着手,然后在系统使用量增长时考虑数据库扩展问题

我可以继续我的第二种方法吗?数据的水平分区 根据域对象的数据库

如果基于此,您能够扩展当前系统以满足您的需要,则暂时可以

现在,让我们考虑一下为什么首先要将Microseries作为一种开发风格

  • 小组件-更易于管理
  • 独立部署-连续交付
  • 多种语言
  • 代码是围绕业务功能组织的
  • 当移动到微服务时,您不应该让多个服务直接从彼此的数据库读取,这将使它们紧密耦合

    一个服务应该完全不知道另一个服务如何设计其内部结构

    现在,如果您想转向微服务并充分利用这一点,您应该像您所说的那样拥有垂直分区,并且服务之间相互通信

    同时,当你转向微服务时,你会遇到很多其他的问题。我试着在这个平台上编译如何启动微服务

    如何将从同一个表中读取数据的服务分开:

    现在,让我们首先创建一个虚拟示例:我们有三个服务:订单、发货、Cu