当中台遇上DDD,我们该如何设计微服务?

2019 年 3 月 15 日

当中台遇上DDD,我们该如何设计微服务?

微服务架构有哪些模型?中台、领域驱动设计及微服务之间有着什么样的关系?微服务的边界设计怎么做?怎么做设计和拆分?且看作者为你娓娓道来。

借用当下最流行的段子做个开场白。

“设计原则千万条,高内聚低耦合第一条,架构设计不规范,开发运维两行泪!”。

在分布式架构下,单体应用被拆分为多个微服务,为了保证微服务的单一职责和合理拆分,“高内聚、松耦合”是最宝贵的设计原则。

通俗点讲,高内聚就是把相关的行为聚集在一起,把不相关的行为放在别处,如果你要修改某个服务的行为,最好只在一处修改。如果做到了服务之间的松耦合,那么修改一个服务就不需要修改另一服务,一个松耦合的服务应该尽可能少的知道与之协作的那些服务的信息。

从集中式架构向分布式架构的技术转型,正如从盖砖瓦房向盖高楼大厦转变一样,必然要有组织、文化、理念和设计方法的同步更新,其中最不可或缺的能力就是架构设计能力。

如何做到“高内聚、低耦合”?我们先来学习几种典型的微服务架构模型。

微服务架构模型

整洁架构(又名洋葱架构)

在整洁架构里,同心圆代表应用软件的不同部分,从里到外依次是领域模型、领域服务、应用服务、最外围是容易变化的内容,如界面和基础设施(如数据存储等)。整洁架构是以领域模型为中心,不是以数据为中心。

原文链接:【 https://www.infoq.cn/article/7QgXyp4Jh3-5Pk6LydWw 】。未经作者许可,禁止转载。

登录后可解锁全站优质内容

免费畅享技术公开课、顶尖技术团队访谈、一线互联网大厂技术实践

文章
视频
电子书
研究报告
立即登录
2019 年 3 月 15 日 18:06 16904

评论 11 条评论

发布
用户头像
请问最后的那个目录结构,像工具类,异常类这样的应该放在哪层里面
2020 年 08 月 04 日 12:24
回复
用户头像
极客时间《DDD实战课》课程地址如下:https://time.geekbang.org/column/intro/238
2020 年 03 月 18 日 19:39
回复
用户头像
又全又精的好文,非常具有学习和参考价值。
2019 年 12 月 30 日 18:21
回复
更详细的《DDD实战课》极客时间课程,地址如下:https://time.geekbang.org/column/intro/238
2020 年 03 月 18 日 16:29
回复
用户头像
非常好的文章,学习了
2019 年 08 月 13 日 10:36
回复
用户头像
几个概念反复不停的copy,太啰嗦。
2019 年 06 月 24 日 16:07
回复
用户头像
这个是微服务吗?微服务不是以数据为中心吗?这个怎么看都像是SOA。
2019 年 05 月 06 日 18:12
回复
用户头像
建议用二次抽象建模来实现DDD驱动,也就是最终的模型驱动。不然是没有办法实现高内聚低耦合的。
2019 年 04 月 19 日 10:59
回复
请教下“二次抽象建模”是什么?
2019 年 07 月 03 日 08:29
回复
用户头像
老师能否通俗地解释一下中台、微服务和DDD之间的关系,文中描述的有点抽象,谢谢!
2019 年 03 月 20 日 17:24
回复
中台在企业架构上更多偏向业务模型,形成中台的过程实际上也是业务领域不断细分的过程。在这个过程中我们会将同类通用的业务能力进行聚合和业务重构,再根据限界上下文和业务内聚的原则建立领域模型。而DDD的战略设计最擅长的就是领域建模。
那在中台完成领域建模后,DDD战略设计产生的领域模型可以作为微服务设计的输入。此时,DDD的战术设计又恰好可以与微服务的设计完美无缝结合。可以说,中台和微服务正是DDD实战的最佳场景。
相关内容的详细描述,请参考极客时间《DDD实战课》,里面有详细介绍。
2020 年 03 月 18 日 09:28
回复
没有更多评论了
发现更多内容

深入理解JVM内存管理 - 堆和栈

NORTH

堆栈 深入理解JVM VM参数

入门到放弃:理清前端技术概念

大伟

ecmascript 前端 JavaScripte Node

一周信创舆情观察(5.25~5.31)

统小信uos

基础软件 操作系统 新基建

【译】5 个你需要知道的 JavaScript 小技巧

零和幺

JavaScript 前端 技巧

centos7分区命令parted的用法(大于2T)

唯爱

这场大数据+AI Meetup,一次性安排了大数据当下热门话题

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

产品的本质,知道却看不到

Neco.W

产品 产品经理 需求 产品开发

Shell 文本处理一则

wong

Shell sed grep

如何挑选一份工作

池建强

求职 找工作

手撕编译原理:汇编语言不会编

贾献华

Flink 1.10 SQL、HiveCatalog 与事件时间整合示例

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

Flink Weekly | 每周社区动态更新-20200520

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

奈学教育:Hadoop源码编译全流程分享

奈学教育

ARTS 01 - 技术人的理想主义

jerry.mei

算法 Vue 练习 ARTS 打卡计划 ARTS活动

游戏夜读 | 如何管理公司?

game1night

【大厂面试02期】Redis过期key是怎么样清理的?

NotFound9

Java 数据库 redis 架构 后端

Java 走过的创新25年

田晓旭

Java25周年

浅谈敏捷开发中的设计

czjczk

敏捷开发

读懂才会用 : 带你见识 Redis 的 zset

小眼睛聊技术

redis 学习方法 程序员 架构 redis6.0.0

缓存与存储的一致性策略:从 CPU 到分布式系统

伴鱼技术团队

缓存 系统设计 cpu 系统架构 架构模式

千万别学编译原理

池建强

编译原理

普通二本,毕业三年,北漂之后,我是怎么成为程序猿的。

why技术

个人成长 程序人生 随笔杂谈 北漂

CSS Tricks网站创始人作序推荐,这本书助你成为Web开发高手

图灵社区

CSS Web 开发 设计思维

Docker 容器优雅终止方案

米开朗基杨

Docker

吉德热泵烘干机解放阳台,引领生活品质新风尚

infoq小陈

MyBatis之启动分析(一)

ytao

mybatis Java 面试

Mobaxterm (安装 、汉化、使用)入门教程

Geek_Offset

OFD版式技术解析系列(一):开篇

华宇法律科技

程序员都惧怕的故障域

松花皮蛋me

Java 问题处理

LeetCode | 2. Reverse Integer 整数反转

Puran

Python C# 算法 LeetCode arts

原创 | TDD工具集:JUnit、AssertJ和Mockito (十六)编写测试-有条件执行测试

编程道与术

Java 编程 TDD 单元测试 JUnit

众安黑客马拉松大赛总决赛-InfoQ小编探班

众安黑客马拉松大赛总决赛-InfoQ小编探班

当中台遇上DDD,我们该如何设计微服务?-InfoQ