Sql 当使用microservices体系结构时,底层读/写数据库是否会成为瓶颈?

Sql 当使用microservices体系结构时,底层读/写数据库是否会成为瓶颈?,sql,amazon-web-services,scalability,microservices,Sql,Amazon Web Services,Scalability,Microservices,正如我在问题中所描述的,如果我要实现微服务体系结构,集中式读/写数据库会成为瓶颈吗 通过一个示例进行扩展,假设我有三个微服务:用户,团队,以及团队成员。每个数据库都有自己的微服务,但它们在数据库中都相互依赖,因此专用的并行数据库并不合适。既然微服务是要将工作分配到几个不同的服务器上,那么中央数据库是否最终会违背这些微服务的目的,因为它们最终都会调用同一个服务器 …如果我要实现一个微服务体系结构 集中式读/写数据库成为瓶颈 你的问题中有一个假设。假设微服务必须在数据库中共享相同的主表 事实上,在你

正如我在问题中所描述的,如果我要实现微服务体系结构,集中式读/写数据库会成为瓶颈吗

通过一个示例进行扩展,假设我有三个微服务:
用户
团队
,以及
团队成员
。每个数据库都有自己的微服务,但它们在数据库中都相互依赖,因此专用的并行数据库并不合适。既然微服务是要将工作分配到几个不同的服务器上,那么中央数据库是否最终会违背这些微服务的目的,因为它们最终都会调用同一个服务器

…如果我要实现一个微服务体系结构 集中式读/写数据库成为瓶颈

你的问题中有一个假设。假设微服务必须在数据库中共享相同的主表

事实上,在你的问题下,你直接表达了这个概念:

…但它们在数据库中相互依赖,如此排他性, 并行数据库是不合适的

如果微服务共享数据库表,那么您实际上所做的就是构建一个包含多个组件的“服务”,这些组件通过带外传输相互消耗,而不是通过直接二进制引用在内存中消耗

面向服务背后最重要的概念之一是,这基本上意味着每个服务都应该拥有自己的数据

扩展您的示例,用户服务将了解团队。它怎么知道?团队服务将把团队数据推送到用户服务。同样,team_members服务将从这两个服务接收数据。现在,所有服务都拥有完成工作所需的所有数据

因此,通过将您的服务实现为自治,在同一组基表上发生争用的可能性就会消失

…如果我要实现一个微服务体系结构 集中式读/写数据库成为瓶颈

你的问题中有一个假设。假设微服务必须在数据库中共享相同的主表

事实上,在你的问题下,你直接表达了这个概念:

…但它们在数据库中相互依赖,如此排他性, 并行数据库是不合适的

如果微服务共享数据库表,那么您实际上所做的就是构建一个包含多个组件的“服务”,这些组件通过带外传输相互消耗,而不是通过直接二进制引用在内存中消耗

面向服务背后最重要的概念之一是,这基本上意味着每个服务都应该拥有自己的数据

扩展您的示例,用户服务将了解团队。它怎么知道?团队服务将把团队数据推送到用户服务。同样,team_members服务将从这两个服务接收数据。现在,所有服务都拥有完成工作所需的所有数据


因此,通过将您的服务实现为自治,在同一组基表上发生争用的可能性就消失了。

是的,这种设计确实打破了关注点的分离,并可能成为未来微服务增长和数据库频繁更改时的瓶颈。(例如,一个微服务数据库中需要的更改将需要所有三个数据库的停机时间。)


最好为每个微服务提供单独的数据库实例,并对公共表/数据使用缓存。

是的,这种设计确实打破了关注点的分离,并可能成为未来微服务增长和数据库频繁更改时的瓶颈。(例如,一个微服务数据库中需要的更改将需要所有三个数据库的停机时间。)


最好为每个微服务提供单独的数据库实例,并对公共表/数据使用缓存。

要添加到上面回答的内容中

分解域时,不要使用单一实体交互模型,而是使用属性/字段交互和绑定上下文来组合组件/微服务

因此,例如,用户帐户注册将只有它正在修改的用户字段(更改状态,因此拥有实体的这些属性)

另一个组件可能有用户的地址,另一个组件有用户的年龄、性别和婚姻信息,另一个组件有他的信用卡和银行详细信息

对于每个有界上下文,您将得到单独的表

如何托管这些表取决于您的负载和基础结构(一个数据库和一个服务器或多个数据库/服务器中的所有表)

只是澄清一下,这些表没有引用完整性,如果您有引用完整性,您将重新引入耦合,这将使您回到数据库争用问题


请关注更多详细信息,以添加到上面的答案中

分解域时,不要使用单一实体交互模型,而是使用属性/字段交互和绑定上下文来组合组件/微服务

因此,例如,用户帐户注册将只有它正在修改的用户字段(更改状态,因此拥有实体的这些属性)

另一个组件可能有用户的地址,另一个组件有用户的年龄、性别和婚姻信息,另一个组件有他的信用卡和银行详细信息

对于每个有界上下文,您将得到单独的表

如何托管这些表取决于您的负载和基础结构(一个数据库和一个服务器或多个数据库/服务器中的所有表)

只是想澄清一下,这些都是错误的