写点什么

Vaughn Vernon 谈微服务和领域驱动设计

  • 2016-08-02
  • 本文字数:979 字

    阅读完需:约 3 分钟

虽然单体应用程序也可以实现相当好地建模,但它们常常会演变成一团乱麻。究其原因是单体应用程序内的多个领域模型错综复杂地交织在一起。根据 Vaughn Vernon 的经验,这种情况在几周或几个月内就会出现。在今年早些时候举行的 Scala Days 大会上,他在演讲中表达了这样的观点。

Vernon 是《实现领域驱动设计》和《通过Actor 模型实现响应式消息处理模式》这两本书的作者。他指出,当应该保持独立的领域模型混在了一起,互相无法区分时,就很难或者不可能和业务及领域专家一起从逻辑上推断模型,让应用或系统比单体应用程序还糟糕。

单体应用程序的一个替代方案是微服务,但我们如何定义一个微服务?它有多大?有时候,人们提出使用代码行定义微服务的大小,Vernon 见过以数十行为标准的,也见过一上千行为标准的,但他不主张采用这样一种既宽泛又不准确的定义。

此外,有些企业号称有数以百计的微服务,但又不知道或者不关心准确数值。他们认为,不值得花费时间和精力去弄清它们的实际使用情况,因为,只是让它们运行起来的话,成本会很低。Vernon 对此作出了回应。他不同意这样的观点。他指出,别的不说,基础设施对于许多微服务如何运行,如何在故障情况下保持弹性,有重大的影响。

Vernon 建议采用一种规定性的方法确定一个系统里微服务的大小和数量:使用领域驱动设计(DDD)的方法,尤其是有界上下文。他指出,在微服务社区里,有时候会将有界上下文定义成只有一个实体,但他发现那不大可能。相反,Vernon 支持借助通用语言在大小确定的有界上下文中建模微服务,并提到了Sam Newman 的著作《构建微服务》。

在开始使用微服务的时候,Vernon 建议从每个有界上下文一个微服务开始。他认为,即使我们能够在一个有界上下文中找出多个本身可以视为微服务的组件,但它们的内聚性和协同关系意味着它们应该一起放在一个服务里。他还建议,一个服务和一个有界上下文应该是一个可部署的单元。尽管如此,根据经验,他们可能会采用更细的粒度,为一个有界上下文创建更多的微服务和可部署单元,可能是因为扩展性方面的原因。

除了实体之外,通用语言还包括命令和事件消息。通过发布最终供其他微服务使用的事件,消息可以用在事件驱动的架构中。在演讲总结阶段,Vernon 展示了一个构建微服务的例子。该例子使用了 Actor 模型,并使用 Akka Scala 实现。

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

2016-08-02 19:002592
用户头像

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

关注

评论

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

URL 去重的 6 种方案!(附详细实现代码)

王磊

Java

算法与数据中台实践之网约车平台

博文视点Broadview

大数据 数据中台 中台 算法 数据

实战解析丨如何对Mysql连接请求的tcpdump内容进行分析

华为云开发者联盟

TCP/IP 数据传输

jvm疯狂吞占内存,罪魁祸首是谁?

易观大数据

如何设计Upload组件思考

赵孔磊

学完微软技术总监整理的44 个微服务架构设计模式,我涨薪了

Java架构师迁哥

阿里架构师耗时三个月整理的Spring实战笔记:入门到实战

Java架构师迁哥

LeetCode题解:232. 用栈实现队列,使用两个栈 入队 - O(1), 出队 - O(n),JavaScript,详细注释

Lee Chen

大前端 LeetCode

Hadoop3 环境搭建

yuanhang

分布式追踪系统原理看不懂,40张图带你亲手实践

小Q

Java 架构 面试 分布式 系统设计

Hadoop 简介

yuanhang

hadoop

程序员快乐器之JAVA代码生成工具

Learun

敏捷开发 快速开发 生成代码

或许是史上最好的AQS源码分析了,AQS基础一

InfoQ_d2212957090d

AQS

面试官问我:看过sharding-jdbc的源码吗?我吧啦吧啦说了一通!!

冰河

数据库 分布式事务 微服务 分布式数据库 ShardingJDBC

阿里P9开源阿里内部秒杀系统设计方案以及设计原则,还不收藏

小Q

Java 架构 系统设计 秒杀 并发

Linux命令netstat详解

5加3彩票

Centos 上配置大数据环境

yuanhang

大数据

初识大数据

yuanhang

大数据

易观方舟Open API 及最佳实践

易观大数据

.NET多线程(Thread,ThreadPool,Task,Async与Await)

AI代笔

Atlassian Team Tour 9月23日登陆中国,报名通道已开启!

Atlassian

敏捷开发 数字化转型 金融 Jira

教师节送什么老师最开心?程序员三招解决家长送礼难题!

华为云开发者联盟

编程 程序

anyRTC推流小助手-客户端推流(PUSH RTMP)工具

anyRTC开发者

技术 音视频 WebRTC 直播 RTC

起飞!这份技术点拉满的ELk+Lucene笔记,可能价值百万

小Q

Java lucene elasticsearch 架构 面试

【API进阶之路】用API打造一条自动化内容生产流水线

华为云开发者联盟

自动化 API 部署

干货:不同场景容器内获取客户端源IP的方法

华为云开发者联盟

容器 服务端 场景

flutter在行动之踩坑的日子(1)

霜蓝手环

flutter 跨平台 Flutter Android Apk 编程之路

众盟科技:跨越时空70年,一场别样的房地产直播开启人文探索

人称T客

XSKY全新一代SDS一体机五大场景之超融合

XSKY星辰天合

通证是下一代互联网数字经济的关键

CECBC

区块链 通证经济

众盟科技:跨越时空70年,一场别样的房地产直播开启人文探索

脑极体

Vaughn Vernon谈微服务和领域驱动设计_语言 & 开发_Jan Stenberg_InfoQ精选文章