17、服务和数据在微服务各层的协作

在微服务架构中,服务和数据的协作是确保系统高效运行和可维护性的关键。本章详细探讨了微服务架构中的服务视图和数据视图,帮助我们理解在运行过程中这些服务和实体在各层是如何协作的。

1、服务视图

微服务内有许多不同类型的服务,它们的实现方式和职能各不相同。服务之间的调用、组合和封装关系,以及它们之间的依赖关系,是理解微服务协作的关键。

1.1、服务的类型

根据DDD分层架构,微服务内部主要有以下几类服务:

  1. facade接口服务:位于用户接口层,包括接口和实现两部分。用于处理用户发送的RESTful请求和解析用户输入的配置文件,并将数据传递给应用层。完成应用服务封装,将DO组装成DTO,并将数据传递给前端应用。
  2. 应用服务:位于应用层。用于表述应用和用户行为,负责服务的组合、编排和转发,处理业务用例的执行顺序和结果拼装,对外提供粗粒度的服务。
  3. 领域服务:位于领域层。封装核心业务逻辑,实现需要多个实体协作的核心领域逻辑,对多个实体或实体方法的业务逻辑进行组合或编排。
  4. 基础服务:位于基础层。提供基础资源服务(如数据库、缓存等),实现各层的解耦,降低外部资源变化对业务应用逻辑的影响。主要为仓储服务,通过依赖倒置原则提供基础资源服务。
1.2、服务的调用

微服务的服务调用主要包括三类应用场景:

  1. 微服务内跨层服务调用

    • 前端应用通过API网关调用facade接口服务,facade接口服务定向到应用服务。
    • 应用服务作为组织者和编排者,调用并组装领域服务或直接调用仓储服务。
  2. 微服务之间的服务调用

    • 应用服务通过API网关访问其他微服务的应用服务,采用同步方式实现数据强一致性。
    • 跨微服务的数据新增和修改操作需要关注分布式事务,保证数据的强一致性。
  3. 领域事件驱动

    • 微服务内的领域事件通过事件总线完成聚合之间的异步处理,微服务之间的领域事件通过消息中间件完成。
1.3、服务的封装与组合

微服务的服务是从领域层逐级向上封装、组合和暴露的:

  1. 基础层:主要服务形态是仓储服务,包括仓储接口和仓储实现两部分。仓储实现服务完成领域对象的持久化或提供数据初始化所需的PO数据。
  2. 领域层:负责表达领域模型业务概念、业务状态和业务规则,主要服务形态有实体方法和领域服务。实体采用充血模型,实体类内部实现所有业务逻辑,领域服务对多个实体或实体方法进行组合和编排。
  3. 应用层:主要面向前端应用和用户,通过服务组合和编排实现粗粒度的业务行为。应用服务负责服务的组合、编排和转发,处理业务用例的执行顺序和结果拼装。
  4. 用户接口层:完成DO和DTO的互转,通过facade接口服务将数据传递给应用层或获取应用服务的数据后进行数据组装,向前端提供数据服务。
1.4、两种分层架构的服务依赖关系

DDD分层架构有一个重要原则:每层只能与其下方的层发生耦合。分层架构可以分为两种:

  1. 松散分层架构:领域层的实体方法和领域服务可以直接暴露给应用层和用户接口层。只需要满足上层服务依赖下层的要求,可以跨层调用,无须逐级封装。
  2. 严格分层架构:任何层只能与其直接下方的层发生依赖,服务需要逐层组合和封装。虽然增加封装工作量,但服务边界清晰,服务的依赖关系相对可控。
2、数据视图

在DDD中,微服务内的数据对象主要包括数据持久化对象(PO)、领域对象(DO)、数据传输对象(DTO)和视图对象(VO)。这些数据对象在不同层次和阶段承担不同的职能。

  1. 数据持久化对象(PO):与数据库结构一一映射,是数据持久化过程中的数据载体。
  2. 领域对象(DO):微服务运行时核心业务对象的载体,包括实体或值对象。
  3. 数据传输对象(DTO):用于前端应用与微服务应用层或微服务之间的数据组装和传输,是应用之间数据传输的载体。
  4. 视图对象(VO):用于封装展示层指定页面或组件的数据。

这些数据对象的职责和转换过程如下:

  1. 基础层

    • DO和PO的映射关系,大多数情况下DO和PO是一一对应的,也有多对多情况。DO需要持久化时,先将DO转换为PO对象,由仓储实现服务完成数据库持久化操作。
    • 当DO需要构建和数据初始化时,由仓储实现服务先从数据库获取PO对象,将PO转换为DO后,再完成DO数据构建和初始化。
  2. 领域层

    • 主要是DO对象。DO是实体和值对象的数据和业务行为载体,承载着核心业务逻辑,多个依赖紧密的DO对象构成聚合。
  3. 应用层

    • 主要对象有DO和DTO对象。应用层进行服务组合和编排时,建议采用聚合根ID的引用方式,避免不同聚合之间的DO对象直接引用,避免聚合之间产生依赖。
  4. 用户接口层

    • 完成DO和DTO的互转,通过facade接口服务将数据传递给应用层或获取应用服务的数据后进行数据组装,向前端提供数据服务。

本章小结

本章分析了DDD分层架构下微服务的服务和数据协作关系。通过在每层定义不同职责的服务和数据对象,实现了聚合之间以及微服务各层之间的解耦。严格遵守各层服务和数据的职责要求,可以保证核心领域模型的稳定,实现解耦,同时灵活应对外部需求的快速变化。

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值