0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

架构与设计 常见微服务分层架构的区别和落地实践

京东云 来源:jf_75140285 作者:jf_75140285 2024-10-22 15:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

从强调内外隔离的六边形架构,逐渐发展衍生出的层层递进、注重领域模型的洋葱架构,再到和DDD完美契合的整洁架构。架构风格的不断演进,其实就是为了适应软件需求越来越复杂的特点。

可以看到,越现代的架构风格越倾向于清晰的职责定位,且让领域模型成为架构的核心。

基于这些架构风格,在软件架构设计过程中又有非常多的架构分层模型。

传统三层架构

传统服务通常使用三层架构:

门面层:作为服务暴露的入口,处理所有的外部请求。部分情况下,门面层甚至不需要单独定义对象而是直接使用服务层的实体定义。

服务层:作为核心业务层,包含所有业务逻辑。并对基础层能力进行简单组合提供一定的能力复用。通常服务层会进行实体定义来防止下层对象体直接暴露给外部服务,导致底层任何变化都有可能直接传递到外部,非常不稳定。

基础层:用来存放dao和外部rpc服务的封装,二者可以拆分为不同的module,也可合二为一,以不同package进行隔离。

三层架构特点就是简单,适用于一些无复杂业务场景的小型应用,或者“数据不可变”作为基础原则的DOP(面向数据编程)服务。

但是当业务场景稍微复杂一些、调用层级较多时,可复用性、可维护性就都非常差了,很多代码都耦合在一起,牵一发动全身。

wKgaoWcXVYOABfykAACXUPb6uWA473.png





DDD架构

DDD架构可以看做是整洁架构的一种实现,分层职责如下:

适配层:用来做外部不同端请求的适配器,隔离不同端的协议差异,包装不同端不同样式的响应体。

应用层:用例、任务入口、消息队列监听均在这一层,可以理解为业务流程的入口,通过聚合根的构造执行相应的命令操作。

领域服务层:包含核心的领域服务定义,并定义了gateway来做一层依赖倒置,使基础设施层仅做实现。

•基础设施层包含一切基础能力:数据库、ES、远程调用封装等等。

wKgZoWcXVYaAFWHcAAF5DXMtSP4093.png



优点

核心稳定:领域模型在依赖链上是顶层角色,不依赖任何其他模块,所以极其稳定。其他任何业务域、存储、边缘能力的变化都不会对领域模型造成影响。

敏捷:适合不同团队一起开发和维护而不会产生冲突。

可拆分:当有届上下文随着演进逐渐膨胀时,很容易拆分成微服务。

可扩展:添加新的功能非常简单,从而使得开发人员能够更快的部署和调整。

可演进:良好的可测试性带来非常低的重构成本,不会随着不断迭代导致项目成为难以修改的“大泥球”。

如此多的优点自然带来明确的缺点

专业性要求较高:需要对业务、架构原则理解深刻的人员进行设计和维护,不恰当的领域模型将使后续迭代极为痛苦。

开发成本高:复杂的架构设计,更多的架构分层,自然带来代码行数的指数级增长。尤其是项目前期的开发任务变得异常繁重。

不再适合简单的业务场景:实现一个简单的CRUD显得过于复杂。

改变决策困难:尝试使用整洁架构需要和团队的管理层和其他成员达成一致,这往往需要非常强大的说服力。如果在架构演进过程中想切换回其他架构模式也十分困难,几乎是整个项目级别的重构工作。

简单的微服务分层架构

基于六边形架构规范的接口适配原则和防腐理念,同时借鉴了CQRS模式的优点,我们定义了一个简单的微服务分层架构。

骨架Maven坐标:

< groupId >com.jdt.open< /groupId >
< artifactId >simple-microservices-layered-architecture-archetype< /artifactId >
< version >1.4.0< /version >

分层定义:

门面层:作为程序的入口,通过包隔离来存放JSF服务、Rest服务、定时任务和MQ消费,其中对外提供服务的接口定义存放在单独的api包中。该层的请求定义命名以Request结尾,响应体命名以Response结尾。

领域服务层:每一个领域服务存放在单独的module中,并通过单独的api包对外暴露能力。该层的命令请求定义命名以Command结尾,查询请求定义命名以Query结尾,响应体命名以Dto结尾。

基础设施层:存放数据库、ES、远程调用服务的封装。该层的持久化数据定义命名以Po结尾。远程命令服务入参命名以RpcCommand结尾,远程查询服务入参命名以RpcQuery结尾,响应体命名以RpcDto结尾。

wKgaoWcXVYeAcF4cAAKr0lvCPic583.png



最佳实践

1.命令服务必须访问领域服务层,允许简单查询直接调用基础设施层。

2.参数校验、请求出入参日志、审计日志记录、TraceID预埋、异常处理等非核心业务能力均由公共组件(参考: Open-Lab组件包 )完成,减少项目内部的边缘能力代码。

3.由于在门面层进行统一的异常处理,非必要时无需在项目中进行大面积的try-catch,让代码更清爽。

4.实际开发过程中,门面层、领域服务层和基础设施层均有各自的实体定义,跨层调用的对象体转换使用MapStruct组件来减少手写映射代码的工作量。

5.数据层使用Fluent-Mybatis,最大好处是减少后期迭代中,数据对象增减字段时修改Mapper的成本。

优点

1. 开发效率

简单的业务开发过程中,相比较书写核心业务逻辑,更多的工作量几乎都是来自处理跨层调用时对象转换和Mapper定义,通过MapStruct和Fluent-Mybatis等组件的使用(也许再加上GitHub Copilot

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 分层架构
    +关注

    关注

    0

    文章

    4

    浏览量

    6558
  • 微服务
    +关注

    关注

    0

    文章

    152

    浏览量

    8155
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    新一代微服务全家桶AlibabaCloud+SpringCloud实战

    团队已经全面切换到 双云微服务架构 ——业务跑在阿里云,AI跑在华为云,数据备份在腾讯云,三家云厂商协同作战、互为容灾。这不是炫技,这是2026年企业级架构的 标准配置 。 而能设计、能落地
    发表于 05-18 17:04

    微电网分层控制:底层、中层、上层全链路设计

    规模化落地的关键。本文立足工程实践,系统拆解微电网分层控制架构的核心定位、全链路设计难点,详细阐述各层级的设计要点、协同机制与关键技术,结合工程案例验证方案可行性,为微电网
    的头像 发表于 04-23 17:15 1039次阅读
    微电网<b class='flag-5'>分层</b>控制:底层、中层、上层全链路设计

    云网融合时代:企业智能网络架构的技术演进与落地实践

    前言企业数字化转型进程中,多云部署、跨地域协同、边缘业务爆发、AI应用规模化落地,已成为IT架构的新常态。传统以物理专线为核心的广域网架构,在成本、灵活性、智能性上的短板日益凸显,云网融合作为新一代
    的头像 发表于 03-31 14:06 1785次阅读
    云网融合时代:企业智能网络<b class='flag-5'>架构</b>的技术演进与<b class='flag-5'>落地</b><b class='flag-5'>实践</b>

    西格电力微电网总体架构设计:分层分布式控制体系构建

    总体架构设计:分层分布式控制体系构建》核心聚焦“总体架构规划”与“分层分布式控制落地”两大核心,破解传统集中式控制响应滞后、可靠性不足、扩展
    的头像 发表于 03-31 11:44 616次阅读
    西格电力微电网总体<b class='flag-5'>架构</b>设计:<b class='flag-5'>分层</b>分布式控制体系构建

    Springboot+SpringData+SpringCloud微服务架构课程

      后端进阶必学:SpringCloud 微服务高可用落地实战 在互联网技术飞速迭代的今天,单体应用架构已逐渐难以承载亿级流量的重担。对于渴望突破瓶颈、迈向架构师行列的后端开发者而言,
    的头像 发表于 03-19 16:08 582次阅读

    光伏四可装置软件系统架构微服务化设计与容器化部署方案

    ,某一模块升级需整体停机,无法适配光伏场景对实时性与连续性的要求;物理机部署模式则导致环境一致性差,跨场景迁移成本高。为此,基于微服务化设计与容器化部署的软件架构应运而生,通过“功能解耦、弹性部署、高效
    的头像 发表于 03-03 15:47 629次阅读

    请问各型号的CW32微控制器在核心架构上有何区别

    各型号的CW32微控制器在核心架构上有何区别
    发表于 12-16 07:52

    嵌入式软件分层架构设计原则

    嵌入式软件分层架构的设计原则如下: 模块化和可扩展性:每一层应当保持松耦合,这样当硬件变化或某些功能扩展时,只需要修改对应的层次,而不影响整体架构。 硬件无关性:上层代码应当尽量避免直接依赖硬件
    发表于 11-28 07:05

    ARM架构与DSP有什么区别?哪一个更好?

    ARM架构与DSP有什么区别?哪一个更好?
    发表于 11-19 06:14

    华纳云VPS容器服务网格流量管理:实现微服务高效路由

    在云计算和微服务架构日益普及的今天,华纳云香港VPS凭借其优越的地缘优势和网络自由,成为众多企业部署容器化应用的热门选择。复杂的微服务架构带来了流量管理的巨大挑战。本文将深入探讨如何利
    的头像 发表于 10-16 17:09 727次阅读

    基于RFID与微服务架构的智能仓库管理系统:实现仓储数据的全链路精准采集与管控

    针对传统仓储管理中普遍存在的账实不符、流程效率低下及信息孤岛等问题,本文介绍一套基于RFID射频识别技术与微服务软件架构的智能仓库管理系统。系统通过“一物一码”的电子身份标识,实现了对物资从入库
    的头像 发表于 10-13 11:18 1036次阅读
    基于RFID与<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>的智能仓库管理系统:实现仓储数据的全链路精准采集与管控

    分布式光伏环境监测站的技术架构与应用实践

    分布式光伏环境监测站的技术架构与应用实践 柏峰【BF-GFQX】一、系统技术架构解析 分布式光伏环境监测站采用“感知层-传输层-应用层”三层架构设计,实现环境数据的全链路智能化处理。
    的头像 发表于 10-13 10:05 816次阅读
    分布式光伏环境监测站的技术<b class='flag-5'>架构</b>与应用<b class='flag-5'>实践</b>

    Jtti海外VPS微服务架构下的日志采集与分析优化方案

    随着跨境业务和分布式应用的普及,越来越多的企业在海外VPS上构建微服务架构,以提升系统扩展性和灵活性。然而,微服务化带来了一个新的挑战:日志数据分散在多个服务和节点中,若缺乏统一采集与
    的头像 发表于 08-27 17:13 761次阅读

    深入剖析RabbitMQ高可用架构设计

    微服务架构中,消息队列故障导致的系统不可用率高达27%!如何构建一个真正可靠的消息中间件架构?本文将深入剖析RabbitMQ高可用设计的核心要点。
    的头像 发表于 08-18 11:19 1175次阅读

    电商API的微服务架构优化策略

    ​ 随着电子商务的快速发展,API(应用程序编程接口)已成为电商平台的核心组件,负责连接用户、商家和后台系统。微服务架构通过将应用拆分为独立、可扩展的服务单元,显著提升了系统的灵活性和可维护性。然而
    的头像 发表于 07-23 14:30 781次阅读
    电商API的<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>优化策略