写点什么

领域驱动设计与微服务

2016 年 4 月 25 日

在 QCon 伦敦 2016 大会上,《领域驱动设计》一书的作者 Eric Evans 提出,使用领域驱动设计(DDD)概念减少微服务环境中通用语言的复杂性。

团队使用不同的通用语言给管理微服务环境带来了特殊的问题。团队会开发自己的通用语言,并在自己的领域范围内赋予它们意义。然而,这些通用语言的概念在团队的语境之外并未保持一致。一个团队对“客户”的定义可能与另一个团队的定义存在明显的差别,导致了不必要的复杂性。此外,每一种语言都会在各自的团队内发展演变,几乎可以确定早晚会出现迥然不同的定义。

Evans 谈到,团队会犯编码错误及误解需求,导致错误和糟糕的代码。虽然这时有发生,但最坏的情况是这些错误渗透到了其他不相关的微服务中。Evans 区分了他所谓的“小泥球”和“大泥球”,前者是指问题包含在一个微服务中,后者是指一个微服务中的问题扩散到整个环境。

Evans 介绍了三种可以帮助管理微服务环境的 DDD 工具:上下文映射、“防腐层(anti-corruption layer,ACL)”和“交流语境(interchange context)”。上下文映射代表微服务间的通信路径,暗含了微服务团队之间的适当交互。一旦这种分析成熟,团队就可以选择依赖不同团队的领域语言,在这种情况下,ACL 可能就有意义了。ACL 的职责是将外部概念翻译成内部模型,从而实现领域间的松耦合。在两个团队需要更多合作的情况下,交流语境可能更有意义。交流语境比 ACL 更完善,它提供了一个层,供两个团队讨论词汇意思,并来回翻译微服务语言。

将代码从单体应用移植到一个微服务系统会把上下文复杂性从代码转移到微服务之间的空间。微服务之间的交互现在包含了逻辑,这些逻辑以前存在于易于阅读和调试的代码中。这种新的上下文必须妥善管理,否则整个系统就会发展成为 Evans 所说的“大泥球”。

Evans 建议,将每个微服务设计成一个 DDD 有界上下文。这为系统内的微服务提供了一个逻辑边界,无论是功能,还是通用语言。每个独立的团队负责一个逻辑上定义好的系统切片。最终,团队开发出的代码会更易于理解和维护。

查看英文原文: Domain-Driven Design and Microservices

2016 年 4 月 25 日 19:003115
用户头像

发布了 1008 篇内容, 共 308.1 次阅读, 收获喜欢 272 次。

关注

评论

发布
暂无评论
发现更多内容

LeetCode 题解:122. 买卖股票的最佳时机 II,JavaScript,一遍循环,详细注释

Lee Chen

前端进阶训练营

性能测试

陈皮

寻找感动的养分

一直AC一直爽

感恩 随笔杂谈 感动

[POJ 1001] Exponentiation JAVA解题报告

一直AC一直爽

算法 刷题 POJ ACM

三分钟热度的干劲

落曦

百度CTO王海峰对话王辰院士:全球“最强大脑”助力大数据抗疫时代来临

脑极体

Redis(二)单机版安装

奈何花开

Java redis

剪刀爱情

一直AC一直爽

电影

布隆过滤器是个啥!

诸葛小猿

布隆过滤器 bloomfilter bloom filter

week7 作业

Geek_2e7dd7

week7 学习总结

Geek_2e7dd7

思维模型盲区:所知障和从众效应

石云升

思维模型 倾听 从众效应

最短路径问题(无负边值)——Dijkstra算法

烫烫烫个喵啊

算法 prim 最短路径

提速数字化!区块链加速应用落地,新制造与服务不断推出

CECBC区块链专委会

一个简单的物联网设备接入网关高可用方案

凸出

Java nginx Netty

【源码系列】Spring Cloud Gateway

Alex🐒

源码 SpringCloud Gateway

一千万个身份证号在java中需要多少内存

华宇法律科技

Java string heap memory

第七周总结

andy

极客大学

redis系列之——缓存穿透、缓存击穿、缓存雪崩

诸葛小猿

redis 缓存穿透 缓存击穿 缓存雪崩

架构师训练营 -- 第七周作业

stardust20

多线程为了同个资源打起架来了,该如何让他们安定?

小林coding

并发编程 多线程 操作系统 计算机基础

你的个人博客网站该上线了!

北漂码农有话说

第七周作业

andy

极客大学

架构师是怎样炼成的 7-1 性能测试与优化

闷骚程序员

排序笔记

烫烫烫个喵啊

算法 排序

Elasticsearch源码解析:环境搭建

Jackey

elasticsearch

公开课 | 吉祥人寿从0到1的 Jira 落地实践

Atlassian速递

敏捷开发 研发管理 Jira

爸爸,我想握住你的手

一直AC一直爽

随笔杂谈 父爱

我有一个梦想

一直AC一直爽

随笔杂谈 梦想

可读代码编写炸鸡九 - 抽取子问题

多选参数

编程 代码 代码优化 代码规范 可读代码

轻松应对并发问题,简易的火车票售票系统,Newbe.Claptrap 框架用例,第一步 —— 业务分析

newbe36524

容器 微服务 架构设计 .net core ASP.NET Core

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

领域驱动设计与微服务-InfoQ