当前位置: 首页 > 知识库问答 >
问题:

微服务架构的数据库设计[已关闭]

钦侯林
2023-03-14

想要改进此问题?更新问题,以便它仅通过编辑这篇文章来关注一个问题。

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

共有2个答案

穆展鹏
2023-03-14

如果您共享同一个数据库,那么您就失去了微服务的两个最重要的优势:强内聚和松耦合(第25页)。

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

谢鸿
2023-03-14

微服务提供去耦。您必须将您的应用程序分解成独立的域。每个域可以有一个数据库。如果其他MS需要访问其他微服务拥有的数据,它们必须通过网络进行通信。

如果您觉得有太多的依赖服务,网络调用会太多,那么您可以定义一个域,将依赖服务聚集在一起。

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

我在这种情况下的微服务是:

初始设计

    < li >用户服务:用于登录和用户信息。 < li >测试服务:评估测试的服务。 < li >员工:处理员工详细信息 < li >公司:处理组织积垢 < li >部门:处理部门垃圾

分解后,似乎员工,组织和部门服务会进行过多的网络/ API调用,因为它们彼此紧密依赖。因此,最好将它们聚集在一起。

更新的设计

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

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

希望这能有所帮助。

 类似资料:
  • 我计划将一个整体ASP. Net MVC应用程序迁移到微服务架构。 该应用程序位于教育领域,下面是当前拥有的子模块, 系统管理员 研究所管理员 候选人/学生门户 辅导员/教师门户 课程设置(可由辅导员或学院管理人员完成) 考试门户 报告门户[新] 视频会议门户[新] 为了实现微服务架构,我打破了当前的系统,如下图所示,并为每个模块创建DB。 在这里我面临一个问题,比如说考试 Db 目前与课程和科目

  • 我刚刚开始将我的项目分离到小微服务中。我有一个处理 API 授权的微服务(检查 API 请求中提供的 apiKey 是否有效),因此为此,我有一个单独的 API 授权数据库,其中包含下表和以下架构: APIKey: ApiKey (VARCHAR, PK) TenantID (INT, FK) 租户:租户ID(INT, PK)名称(VARCHAR) 如您所见,APIKey表链接到租户表。 我有另一

  • Kubernetes 设计之初就是按照 Cloud Native 的理念设计的,Cloud Native 中有个重要概念就是微服务的架构设计,当将单体应用拆分微服务后, 随着服务数量的增多,如何微服务进行管理以保证服务的 SLA 呢?为了从架构层面上解决这个问题,解放程序员的创造性,避免繁琐的服务发现、监控、分布式追踪等事务,Service mesh 应运而生。 微服务 下图是Bilgin Ibr

  • TL;DR服务应该选择将偶尔需要的数据保存在其本地数据库中,还是每次都从数据来源的服务请求数据? 让我们举一些Web商店/订购应用程序的通用示例。服务A是一种用户会话管理服务。它处理用户正在做什么、他可以做什么等的业务逻辑。用户可以创建自己的衬衫以供购买。服务B是一个数据聚合器,包含大量库存和可用内容。 用户开始创建衬衫,因此service a请求service B提供可用的样式/颜色。服务B向下

  • 在所有情况下,重要的是,如果允许用户Y访问该公司,微服务本身仍然必须检查是否允许用户Y对该公司进行某种操作。因此,此用户到公司的匹配仅用于确保用户对公司有访问权限。 我并不是真的很喜欢这些方法,因为将消息放入队列(1)意味着每个服务都必须被告知一个更改。使用Zuul验证(2)也不是真正实用的,因为它应该只是一个网关。

  • 我经常听说,在微服务架构中,对于每一个微服务,我们都必须创建单独的数据库。 但是,如果我必须在不同的数据库中维护外键约束,这是不可能的。就像我在身份验证微服务中有一个用户表,我想在我的目录服务中使用它(用户表中的用户 ID 列) 那么如何解决呢。 感谢提前