想要改进此问题?更新问题,以便它仅通过编辑这篇文章来关注一个问题。
我计划使用微服务架构来实现我们的网站。我想知道在服务之间共享数据库是否正确,或者为每个服务使用单独的数据库是否更好。在这方面,我可以考虑为所有服务使用一个通用数据库吗?还是它违反了微服务体系结构的本质?
如果您共享同一个数据库,那么您就失去了微服务的两个最重要的优势:强内聚和松耦合(第25页)。
如果您不共享数据库中的表,您可以共享同一个数据库。例如,microservice1
使用table1_1
和table_1_2
和microservice2
使用table2_1
和table2_2
。当我说使用时,我的意思是读写。一个微服务不读写另一个的表。
微服务提供去耦。您必须将您的应用程序分解成独立的域。每个域可以有一个数据库。如果其他MS需要访问其他微服务拥有的数据,它们必须通过网络进行通信。
如果您觉得有太多的依赖服务,网络调用会太多,那么您可以定义一个域,将依赖服务聚集在一起。
例如,假设我有一个在线测试评估服务,一个公司的经理可以发布测试,他可以查看他部门所有员工的结果。
我在这种情况下的微服务是:
初始设计
分解后,似乎员工,组织和部门服务会进行过多的网络/ API调用,因为它们彼此紧密依赖。因此,最好将它们聚集在一起。
更新的设计
每个服务都可以有自己的数据库,并且可以独立部署。用户和测试服务可以使用 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 列) 那么如何解决呢。 感谢提前