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

微服务是否会中断边界上下文?

陶裕
2023-03-14

我有点困惑。我在一家年轻的银行公司工作,我们决定实施 DDD 架构来打破复杂性。

所以,这是我的问题(它遵循团队中某人提出的设计建议)。假设我们有 3 个不同的域。D1、D2、D3,公开域 (Web) 服务。每个域都操作依赖于相同表的强类型业务实体。在这些域之前,我们希望微服务以集中方式保证持久保存在表中的数据是一致的。D1、D2 和 D3 要求微服务保留符合特定规则的数据。我们希望微服务充当表的 CRUD 代理。微服务为 D1、D2 和 D3 域提供特定的 DTO,将表模糊处理为 D1、D2、D3。

这种方法听起来不错吗?您是否考虑在 DDD 体系结构中使用微服务来管理 1 个域的 CRUD 和数据一致性?“CRUDing”和使用微服务验证数据会破坏边界上下文吗?在 DDD 体系结构中处理微服务的最佳实践是什么(如果有)?

非常感谢您的贡献,

[编辑]

下面的文章帮助我完善了我的想法: http://martinfowler.com/bliki/MicroservicePremium.html

微服务在单体系统无法维护的复杂情况下非常有用。它们不是前期设计实现的良好候选者。另一方面,DDD 试图在项目一开始就解决复杂性问题。成功的 DDD 不应满足微服务实现。

共有2个答案

仉姚石
2023-03-14

微服务不应该“打破”边界上下文,它们是互补的,因为微服务和 BC 边界之间存在自然相关性。

我们希望微服务以集中的方式保证持久化在表中的数据是一致的

微服务不是为了外观目的。它们都是关于权力下放,而不是集中化。它们是围绕业务功能组织的模块化单元。它们通常充当域前面的界定上下文的网关,而不是域后面持久存储的代理。

似乎您正在尝试将错误的解决方案应用于您的问题 - 使用微服务作为以数据为中心的单体的融合点,这违背了他们的整个目的。

也许您应该详细说明“保证持久化的数据是一致的”和“持久化符合特定规则的数据”的含义。它可能只是在持久性层或非微服务的服务中实现。

熊朝
2023-03-14

诸如验证、计算和持久性 (CRUD) 之类的东西都是函数,而不是服务。通过将这些任务集中到一个服务中,您将所有其他服务与该服务紧密耦合,并失去 SOA 的主要优势。在保持高凝聚力的同时使服务松散耦合应该是您的主要目标。我觉得这个设计违反了这一点。

您希望将服务设计为相关业务功能的垂直切片,而不是使用集中式通用服务和层。服务应由从数据库一直到 UI 在整个企业中部署的组件组成。此外,每个服务都应该有自己的数据库,或者至少具有架构(如果这不切实际)。一旦服务共享数据库,您就会再次紧密耦合。

最后一点,如果您的某个服务需要执行简单的 CRUD 插入,那么这就是它应该的全部内容。无需先将其映射到域模型。为具有需要强制实施的真正不变性的业务流程保存 DDD。它不一定是全有或全无的方法。使用对每个用例都有意义的工具。

 类似资料:
  • 问题内容: REST API-是否有DTO? 我想在微服务的背景下再次提出这个问题。这是原始问题的报价。 我目前正在为一个项目创建REST- API,并且一直在阅读有关最佳实践的文章。许多人似乎反对DTO,只是公开域模型,而其他人似乎认为DTO(或用户模型或任何您想称呼的东西)是不好的做法。我个人认为这篇文章很有道理。 但是,我还了解了所有其他映射代码,域模型与其DTO对应对象100%相同的DTO

  • cmf_is_wechat() 功能 判断是否为微信访问 参数 无 返回 boolean

  • 微丝网应该可重复使用吗?对于可重用,我并不意味着共享特定于域的模型。 我的意思是,为一个应用程序创建的微服务是否应该在另一个应用程序中重用?如果它们可以在应用程序中重用,是否足够? 分离微服务的最佳方法是什么。从我的观点来看,一旦一个微服务调用另一微服务,它就会紧密耦合,这意味着它不容易(无需修改)被提取并放入另一个没有它所引用/来自的相同服务的微服务应用程序中。 在我看来,要使它们脱钩,有以下几

  • 问题内容: 我们有以下设置。 STM(Stingrey Traffic Manager)进行负载平衡+会话粘性 Weblogic的“集群” 由第三方工具处理的身份验证 因此,我不必担心有关水平缩放/运行应用程序多个实例的会话。STM / Weblogic集群确保后续请求到达同一托管服务器。 我们目前拥有的是一个整体应用程序,并且我们正在尝试转向微服务。同样,我们也不会离开当前的基础架构(即STM

  • cmf_is_wechat() 功能 判断是否为微信访问 参数 无 返回 boolean

  • 主要内容:微服务架构,微服务架构 vs 单体架构,微服务的特点,微服务框架微服务(MicroServices)最初是由 Martin Fowler 于 2014 年发表的论文 《 MicroServices》 中提出的名词,它一经提出就成为了技术圈的热门话题。 微服务,我们可以从字面上去理解,即“微小的服务”,下面我们从“服务”和“微小”两个方面进行介绍。 1) 所谓“服务”,其实指的是项目中的功能模块,它可以帮助用户解决某一个或一组问题,在开发过程中表现为 IDE(集

  • X2.2.0新增 sp_is_weixin() 功能: 判断是否为微信访问 参数: 无 返回: 类型boolean,true为微信访问 使用: $is_weixin = sp_is_weixin();

  • 本文向大家介绍什么是有界上下文?相关面试题,主要包含被问及什么是有界上下文?时的应答技巧和注意事项,需要的朋友参考一下 有界上下文是领域驱动设计的核心模式。 DDD 战略设计部门的重点是处理大型模型和团队。 DDD 通过将大型模型划分为不同的有界上下文并明确其相互关系来处理大型模型。