怎么在58同城上做网站/发广告推广平台
文章目录
- 引言
- 1. 概述
- 2. 领域驱动设计(DDD)分层架构模型
- 2.1 DDD的核心概念
- 2.2 DDD架构分层解析
- 3. 整洁架构:洋葱架构与依赖倒置
- 3.1 整洁架构的核心思想
- 3.2 整洁架构的层次结构
- 4. 六边形架构:解耦核心业务与外部系统
- 4.1 六边形架构的设计理念
- 4.2 六边形架构的适用场景
- 5. 三种架构模型的对比与适用场景
- 5.1 架构模型的核心对比
- 6. 微服务架构设计中的分层与解耦
- 6.1 微服务的分层设计
- 6.2 领域模型与应用层的分离
- 6.3 资源解耦与适配策略
- 7. 中台架构与微服务架构的融合
- 7.1 中台架构的核心思想
- 7.2 微服务与中台架构的结合
- 项目级微服务
- 企业级中台微服务
- 8. 最佳实践:如何实现高内聚低耦合的微服务
- 8.1 业务逻辑与外部依赖的解耦
- 8.2 微服务之间的通信与集成
- 8.3 服务的独立性与可扩展性
- 9. 小结
引言
在当今的技术架构中,微服务架构已成为构建大规模分布式系统的主流方式。相较于传统的单体架构,微服务架构以其灵活、可扩展、高可用和高容错的特点,帮助企业应对快速变化的业务需求。然而,微服务架构并非万能,它对系统的设计和开发提出了新的挑战,特别是如何正确理解和运用微服务架构模型,确保系统能够高效、稳定地运行。
接下来我们将对几种常见的微服务架构模型进行详细分析,包括领域驱动设计(DDD)分层架构、整洁架构、六边形架构(端口-适配器架构),探讨如何利用这些架构模型设计高内聚低耦合的微服务架构。
1. 概述
微服务架构(Microservices Architecture)是一种将单一应用程序拆解为多个小型服务的架构风格。每个微服务实现一个业务功能,独立部署和独立扩展,这种方式极大地提升了系统的灵活性、可维护性和可扩展性。微服务架构的核心优势包括:
- 松耦合:每个微服务都可以独立演化,修改一个微服务不会影响到其他服务。
- 独立部署:每个微服务可以独立部署,减少了系统升级时的风险。
- 技术栈多样性:不同的微服务可以采用不同的技术栈,选择最适合的工具和框架。
- 高可扩展性:通过服务拆分,可以根据业务需要独立扩展某个服务,避免了单体应用的性能瓶颈。
然而,微服务架构也面临着挑战。特别是在系统复杂性大幅提升时,如何保证微服务之间的协调、服务的可靠性以及如何正确划分服务边界成为了微服务架构设计中的关键问题。微服务架构的成功不仅仅取决于服务的拆分,还取决于如何设计合适的架构模型和分层策略。
2. 领域驱动设计(DDD)分层架构模型
领域驱动设计(Domain-Driven Design, DDD)是一种以领域模型为核心的架构设计理念,旨在通过深入理解业务领域,实现系统设计和开发的高效协同。DDD倡导将业务领域模型作为核心,围绕领域模型进行系统的设计与实现。
2.1 DDD的核心概念
DDD的核心概念包括:
- 领域(Domain):是指应用程序所要处理的实际问题空间,包含了所有与业务相关的概念和规则。
- 限界上下文(Bounded Context):将系统划分为多个子领域,每个子领域内部的模型和规则都是独立的。
- 领域模型(Domain Model):领域模型是领域中关键概念的抽象,用于表示业务实体及其之间的关系和行为。
2.2 DDD架构分层解析
DDD的分层架构包括:
- 领域层(Domain Layer):负责核心业务逻辑的实现,包括领域模型和领域服务。领域层是系统的核心,承载着系统的业务规则。
- 应用层(Application Layer):负责处理用户请求,调用领域层的功能,完成业务流程。应用层并不包含业务逻辑,而是通过领域层来实现业务功能。
- 接口层(Interface Layer):负责与外部系统(如UI、外部API等)的交互。接口层通过应用层向用户或外部系统提供服务。
- 基础设施层(Infrastructure Layer):提供数据存储、消息队列等底层资源的支持。基础设施层实现与外部系统的集成。
通过这种分层,DDD确保了系统的业务逻辑与外部依赖的解耦,使得业务模型能够独立演化,不受外部系统变动的影响。
3. 整洁架构:洋葱架构与依赖倒置
整洁架构(Clean Architecture)由Robert C. Martin提出,其核心思想是将系统的核心业务逻辑与外部技术细节进行隔离。整洁架构强调分层设计,并通过依赖倒置原则(Dependency Inversion Principle)来实现各层之间的解耦。
3.1 整洁架构的核心思想
整洁架构的核心思想是将应用划分为多个层次,每个层次负责不同的职责。其结构类似于洋葱,每一层都像洋葱的外皮一样包裹着内层,外层依赖于内层,而内层则完全不依赖于外层。
- 核心层:包括领域模型、领域服务和应用服务,这些层次实现了核心的业务逻辑。
- 外部层:包括用户接口、数据库、缓存、消息队列等,这些层负责与外部世界的交互。
3.2 整洁架构的层次结构
整洁架构的典型层次结构如下:
- 核心层(Core Layer):包含领域模型、领域服务、应用服务等,它们定义了应用的核心业务逻辑。
- 接口层(Interface Layer):定义了系统与外部交互的接口,如UI层、API层等。
- 基础设施层(Infrastructure Layer):负责数据库、文件系统、缓存等基础设施的实现。
- 外部适配层(External Adapter Layer):通过适配器连接不同的外部系统和服务。
整洁架构的关键是通过依赖倒置原则,使得核心业务逻辑和外部技术细节解耦,从而提高了系统的可维护性和可扩展性。
4. 六边形架构:解耦核心业务与外部系统
六边形架构(Hexagonal Architecture),也被称为端口-适配器架构(Ports and Adapters Architecture),旨在通过端口和适配器的方式解耦核心业务与外部系统。六边形架构的关键是将应用的核心业务逻辑放在“内六边形”中,外部世界通过“端口”和“适配器”与应用进行交互。
4.1 六边形架构的设计理念
六边形架构的核心设计理念是应用的核心业务逻辑与外部世界的交互通过端口和适配器进行隔离。这意味着,外部的API、数据库、用户接口等都与核心业务逻辑解耦,系统可以灵活适配不同的外部需求。
六边形架构将系统划分为两层:
- 内六边形(Core Logic):包含应用的核心业务逻辑。该层不依赖
于外部系统,任何变化都不会直接影响到核心逻辑。
- 外六边形(External Adapters):通过适配器连接外部系统和应用的核心逻辑。适配器负责转换外部请求为应用能够处理的形式。
4.2 六边形架构的适用场景
六边形架构特别适用于以下场景:
- 复杂业务逻辑:当系统中存在复杂的业务逻辑时,六边形架构能够帮助我们将业务逻辑与外部依赖解耦,确保业务的稳定性。
- 多样化的外部系统集成:当系统需要与多个外部系统(如数据库、第三方服务、消息队列等)集成时,六边形架构能够通过适配器将这些集成方式抽象化。
5. 三种架构模型的对比与适用场景
5.1 架构模型的核心对比
特性 | DDD分层架构 | 整洁架构 | 六边形架构 |
---|---|---|---|
核心理念 | 聚焦领域模型,分层设计 | 核心业务逻辑独立,解耦技术细节 | 通过端口和适配器解耦核心逻辑与外部系统 |
分层 | 领域层、应用层、接口层 | 核心层、接口层、基础设施层 | 内六边形(核心业务)和外六边形(适配器) |
外部依赖解耦 | 限界上下文划分,避免跨界限依赖 | 依赖倒置,核心逻辑不依赖外部 | 通过端口与适配器解耦外部依赖 |
适用场景 | 复杂领域模型、大型企业应用 | 需要独立部署和扩展的系统 | 需要灵活适配多种外部系统的场景 |
6. 微服务架构设计中的分层与解耦
6.1 微服务的分层设计
微服务架构设计中的分层结构通常包括以下几层:
- 表示层(API层):负责与用户或外部系统交互,暴露服务接口。
- 服务层(业务层):处理业务逻辑,协调不同微服务之间的交互。
- 领域层:负责领域模型的实现和核心业务逻辑的处理。
- 数据层:负责数据存储和持久化。
6.2 领域模型与应用层的分离
领域模型是系统的核心,它应与应用层分离。应用层负责协调不同微服务的调用,而领域模型则专注于业务逻辑的实现。
6.3 资源解耦与适配策略
通过引入适配器和防腐层(Anti-Corruption Layer),可以确保新系统和旧系统之间的解耦,避免旧系统的技术细节影响新系统的业务逻辑。
7. 中台架构与微服务架构的融合
中台本质上是领域的子域,它可能是核心域,也可能是通用域或支撑域。通常大家认为阿里的中台对应 DDD 的通用域,将通用的公共能力沉淀为中台,对外提供通用共享服务。
7.1 中台架构的核心思想
中台架构的核心思想是将企业的共性能力提炼成中台服务,提供给不同业务线使用。通过中台,企业能够实现资源共享、能力复用,从而提升整体运营效率。
7.2 微服务与中台架构的结合
微服务架构与中台架构相结合,可以有效解决大规模企业中各个业务单元之间的协作问题。微服务架构可以为每个业务单元提供独立的服务,中台则提供公共服务和资源管理,从而减少重复开发和维护成本。
项目级微服务
项目级微服务的内部遵循分层架构模型就可以了。领域模型的核心逻辑在领域层实现,服务的组合和编排在应用层实现,通过 API 网关为前台应用提供服务,实现前后端分离。但项目级的微服务可能会调用其它微服务,比如某个项目级微服务 B 调用认证微服务 A,完成登录和权限认证。
通常项目级微服务之间的集成,发生在微服务的应用层,由应用服务调用其它微服务发布在API 网关上的应用服务。图中微服务 B 中红色框内的应用服务 B,它除了可以组合和编排自己的领域服务外,还可以组合和编排外部微服务的应用服务。它只要将编排后的服务发布到 API 网关供前端调用,这样前端就可以直接访问自己的微服务了。
企业级中台微服务
企业级的业务流程往往是多个中台微服务一起协作完成的,那跨中台的微服务如何实现集成呢?企业级中台微服务的集成不能像项目级微服务一样,在某一个微服务内完成跨微服务的服务组合和编排。我们可以在中台微服务之上增加一层,你看下面这张图,增加的这一层就位于红色框内,它的主要职能就是处理跨中台微服务的服务组合和编排,以及微服务之间的协调,它还可以完成前端不同渠道应用的适配。
不妨借用 BFF(服务于前端的后端,Backend for Frontends)这个词,暂且称它为BFF 微服务。BFF 微服务与其它微服务存在较大的差异,就是它没有领域模型,因此这个微服务内也不会有领域层。BFF 微服务可以承担应用层和用户接口层的主要职能,完成各个中台微服务的服务组合和编排,可以适配不同前端和渠道的要求.
8. 最佳实践:如何实现高内聚低耦合的微服务
8.1 业务逻辑与外部依赖的解耦
要实现高内聚低耦合,首先要保证业务逻辑的独立性。通过DDD、整洁架构或六边形架构的应用,可以确保核心业务逻辑不受外部系统变化的影响。
8.2 微服务之间的通信与集成
微服务之间的通信方式有同步和异步两种,常见的协议有RESTful API、gRPC等。选择合适的通信方式可以减少服务之间的耦合,提高系统的性能。
8.3 服务的独立性与可扩展性
服务的独立性是微服务架构成功的关键。每个微服务应能够独立部署、独立扩展,同时保证服务之间的协作不被影响。
9. 小结
DDD 分层架构、整洁架构、六边形架构都是以领域模型为核心,实行分层架构,内部核心业务逻辑与外部应用、资源隔离并解耦 .
如何在微服务架构中实现高内聚低耦合,如何通过架构模型的合理设计提高系统的灵活性和可维护性,将是技术团队面临的主要挑战。
相关文章:

DDD - 微服务架构模型_领域驱动设计(DDD)分层架构 vs 整洁架构(洋葱架构) vs 六边形架构(端口-适配器架构)
文章目录 引言1. 概述2. 领域驱动设计(DDD)分层架构模型2.1 DDD的核心概念2.2 DDD架构分层解析 3. 整洁架构:洋葱架构与依赖倒置3.1 整洁架构的核心思想3.2 整洁架构的层次结构 4. 六边形架构:解耦核心业务与外部系统4.1 六边形架…...

第 1 天:UE5 C++ 开发环境搭建,全流程指南
🎯 目标:搭建 Unreal Engine 5(UE5)C 开发环境,配置 Visual Studio 并成功运行 C 代码! 1️⃣ Unreal Engine 5 安装 🔹 下载与安装 Unreal Engine 5 步骤: 注册并安装 Epic Game…...

【华为OD-E卷 - 109 磁盘容量排序 100分(python、java、c++、js、c)】
【华为OD-E卷 - 磁盘容量排序 100分(python、java、c、js、c)】 题目 磁盘的容量单位常用的有M,G,T这三个等级, 它们之间的换算关系为1T 1024G,1G 1024M, 现在给定n块磁盘的容量,…...

【大数据技术】编写Python代码实现词频统计(python+hadoop+mapreduce+yarn)
编写Python代码实现词频统计(python+hadoop+mapreduce+yarn) 搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell) 搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) 本机PyCharm连接CentOS虚拟机 在阅读本文前,请确保已经阅读过以上三篇文章,成功搭建了…...

5-Scene层级关系
Fiber里有个scene是只读属性,能从fiber中获取它属于哪个场景,scene实体中又声明了fiber,fiber与scene是互相引用的关系。 scene层级关系 举例 在unity.core中的EntityHelper中,可以通过entity获取对应的scene root fiber等属性…...

JVM执行流程与架构(对应不同版本JDK)
直接上图(对应JDK8以及以后的HotSpot) 这里主要区分说明一下 方法区于 字符串常量池 的位置更迭: 方法区 JDK7 以及之前的版本将方法区存放在堆区域中的 永久代空间,堆的大小由虚拟机参数来控制。 JDK8 以及之后的版本将方法…...

本地部署 DeepSeek-R1:简单易上手,AI 随时可用!
🎯 先看看本地部署的运行效果 为了测试本地部署的 DeepSeek-R1 是否真的够强,我们随便问了一道经典的“鸡兔同笼”问题,考察它的推理能力。 📌 问题示例: 笼子里有鸡和兔,总共有 35 只头,94 只…...

请求响应(接上篇)
请求 日期参数 需要在前面加上一个注解DateTimeFormat来接收传入的参数的值 Json参数 JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用 RequestBody 标识 通过RequestBody将JSON格式的数据封装到实体类…...

数组排序算法
数组排序算法 用C语言实现的数组排序算法。 排序算法平均时间复杂度最坏时间复杂度最好时间复杂度空间复杂度是否稳定适用场景QuickO(n log n)O(n)O(n log n)O(log n)不稳定大规模数据,通用排序BubbleO(n)O(n)O(n)O(1)稳定小规模数据,教学用途InsertO(n)…...

防火墙的安全策略
1.VLAN 2属于办公区;VLAN 3属于生产区,创建时间段 [FW]ip address-set BG type object [FW-object-address-set-BG]address 192.168.1.0 mask 25 [FW]ip address-set SC type object [FW-object-address-set-SC]address 192.168.1.129 mask 25 [FW]ip address-se…...

2025Java面试题超详细整理《微服务篇》
什么是微服务架构? 微服务框架是将某个应用程序开发划分为许多独立小型服务,实现敏捷开发和部署,这些服务一般围绕业务规则进行构建,可以用不同的语言开发,使用不同的数据存储,最终使得每个服务运行在自己…...

中位数定理:小试牛刀> _ <2025牛客寒假1
给定数轴上的n个点,找出一个到它们的距离之和尽量小的点(即使我们可以选择不是这些点里的点,我们还是选择中位数的那个点最优) 结论:这些点的中位数就是目标点。可以自己枚举推导(很好想) (对于 点的数量为…...

(2025,LLM,下一 token 预测,扩散微调,L2D,推理增强,可扩展计算)从大语言模型到扩散微调
Large Language Models to Diffusion Finetuning 目录 1. 概述 2. 研究背景 3. 方法 3.1 用于 LM 微调的高斯扩散 3.2 架构 4. 主要实验结果 5. 结论 1. 概述 本文提出了一种新的微调方法——LM to Diffusion (L2D),旨在赋予预训练的大语言模型(…...

如何开发一个大语言模型,开发流程及需要的专业知识
开发大型语言模型(LLM)是一个复杂且资源密集的过程,涉及多个阶段和跨学科知识。以下是详细的开发流程和所需专业知识指南: 一、开发流程 1. 需求分析与规划 目标定义:明确模型用途(如对话、翻译、代码生成…...

【数据采集】基于Selenium采集豆瓣电影Top250的详细数据
基于Selenium采集豆瓣电影Top250的详细数据 Selenium官网:https://www.selenium.dev/blog/ 豆瓣电影Top250官网:https://movie.douban.com/top250 写在前面 实验目标:基于Selenium框架采集豆瓣电影Top250的详细数据。 电脑系统:Windows 使用软件:PyCharm、Navicat 技术需求…...

neo4j-在Linux中安装neo4j
目录 切换jdk 安装neo4j 配置neo4j以便其他电脑可以访问 切换jdk 因为我安装的jdk是1.8版本的,而我安装的neo4j版本为5.15,Neo4j Community 5.15.0 不支持 Java 1.8,它要求 Java 17 或更高版本。 所以我需要升级Java到17 安装 OpenJDK 17 sudo yu…...

多无人机--强化学习
这个是我对于我的大创项目的构思,随着时间逐渐更新 项目概要 我们的项目平台来自挑战杯揭绑挂帅的无人机对抗项目,但是在由于时间原因,并未考虑强化学习,所以现在通过大创项目来弥补遗憾 我们项目分为三部分,分为虚…...

UE制作2d游戏
2d免费资产: Free 2D Game Assets - CraftPix.net 需要用到PaperZD插件 官网下载后启用即可 导入png素材 然后全选 - 创建Sprite 创建 人物基类 设置弹簧臂和相机 弹簧臂设置成旋转-90 , 取消碰撞测试 设置子类Sprite 拖到场景中 绑定设置输入映射,让角色移动跳跃 神似卡拉比…...

说一下JVM管理的常见参数
Java虚拟机(JVM)有许多常见参数,用于控制其行为和性能。以下是一些常见的JVM参数及其说明: 1. 内存管理参数 -Xms<size> START 设置初始堆内存大小。例如,-Xms512m表示初始堆大小为512MB。 -Xmx<size>…...

【FPGA】 MIPS 12条整数指令【2】
目录 仿真 代码 完整代码 实现slt 仿真 ori r1,r0,1100h ori r2,r0,0020h ori r3,r0,ff00h ori r4,r0,ffffh addi r5,r0,ffff slt r6,r5,r4 slt r6,r4,r3 代码 EX Slt:regcData ($signed(regaData)<$signed(regbData))?1b1:1b0; ID Inst_slt:be…...

机器学习--python基础库之Matplotlib (2) 简单易懂!!!
python基础库之Matplotlib(2) python基础库之Matplotlib0 准备1 散点图的绘制2 柱状图绘制3 其他 python基础库之Matplotlib 上篇文章机器学习–python基础库之Matplotlib (1) 超级详细!!!主要讲解了python的基础库matplotlib中绘图的流程以及折线图的…...

mybatis plus 持久化使用技巧及场景
mybatis plus提供了很多强大的持久化工具,新手容易对这些工具使用困难,下面我总结了一下mybatis plus持久化的使用技巧及使用场景。 一、持久化 官方文档:https://baomidou.com/guides/data-interface/ (一)通过ser…...

JVM监控和管理工具
基础故障处理工具 jps jps(JVM Process Status Tool):Java虚拟机进程状态工具 功能 1:列出正在运行的虚拟机进程 2:显示虚拟机执行主类(main()方法所在的类) 3:显示进程ID(PID,Process Identifier) 命令格式 jps […...

记录 | 基于MaxKB的文字生成视频
目录 前言一、安装SDK二、创建视频函数库三、调试更新时间 前言 参考文章:如何利用智谱全模态免费模型,生成大家都喜欢的图、文、视并茂的文章! 自己的感想 本文记录了创建文字生成视频的函数库的过程。如果想复现本文,需要你逐一…...

生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)
今天小李哥将开启全新的技术分享系列,为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来生成式 AI 安全市场正迅速发展。据IDC预测,到2025年全球 AI 安全解决方案市场规模将突破200亿美元,年复合增长率超过30%,而Gartn…...

现场流不稳定,EasyCVR视频融合平台如何解决RTSP拉流不能播放的问题?
视频汇聚EasyCVR安防监控视频系统采用先进的网络传输技术,支持高清视频的接入和传输,能够满足大规模、高并发的远程监控需求。平台灵活性强,支持国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大…...

文献阅读 250205-Global patterns and drivers of tropical aboveground carbon changes
Global patterns and drivers of tropical aboveground carbon changes 来自 <Global patterns and drivers of tropical aboveground carbon changes | Nature Climate Change> 热带地上碳变化的全球模式和驱动因素 ## Abstract: Tropical terrestrial ecosystems play …...

算法与数据结构(括号匹配问题)
思路 从题干可以看出,只要给出的括号对应关系正确,那么就可以返回true,否则返回false。这个题可以使用栈来解决 解题过程 首先从第一个字符开始遍历,如果是括号的左边(‘(‘,’[‘,’}‘&…...

订单状态监控实战:基于 SQL 的状态机分析与异常检测
目录 1. 背景与问题 2. 数据准备 2.1 表结构设计 3. 场景分析与实现 3.1 场景 1:检测非法状态转换...

C# 中记录(Record)详解
从C#9.0开始,我们有了一个有趣的语法糖:记录(record) 为什么提供记录? 开发过程中,我们往往会创建一些简单的实体,它们仅仅拥有一些简单的属性,可能还有几个简单的方法,比如DTO等等…...