写点什么

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:003124
用户头像

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

关注

评论

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

15张图解Redis为什么这么快

Java架构师迁哥

VRBT视频彩铃解决方案

dwqcmo

5G 音视频 解决方案

【JSRC小课堂】Web安全专题(二)逻辑漏洞的burpsuite插件开发

京东科技开发者

Web

总结年初到10月底Java基础、架构面试题,共计1327道!涵盖蚂蚁金服、腾讯、字节跳动、美团、拼多多等等一线大厂!

Java架构追梦

Java 架构 字节跳动 面试 蚂蚁金服

滴滴高峰期亿级并发如何调优?Java亿级并发系统架构设计手册分享

Java架构追梦

Java 架构 面试 高并发 亿级流量

week1 架构方法-作业-杨斌

杨斌

架构师训练营 1 期 -- 第六周作业

曾彪彪

极客大学架构师训练营

面试阿里P6,过关斩将直通2面,结果3面找了个架构师来吊打我?

Java架构之路

Java 程序员 架构 面试 编程语言

接口文档生成工具

测试人生路

接口文档

服了!不愧是AlibabaP8级别的大牛,把Kafka的精髓全部总结整理成了一份“限量笔记”。

Java架构之路

Java 程序员 架构 面试 编程语言

求职时这样回答问题你就输了!来自IT类面试官视角的深度解读

Java架构师迁哥

《Maven实战》.pdf

田维常

程序员

信息量爆炸!78天闭门深造1258页SpringCloud学习进阶笔记,再战蚂蚁金服

996小迁

Java 架构 面试 SpringCloud

Hbase实用技巧:全量+增量数据的迁移方法

华为云开发者联盟

数据 HBase 集群

.NET可视化权限功能界面设计

雯雯写代码

中台:未到终局,焉知生死?

ToB行业头条

中台

Alibaba技术大牛丢给我一份Spring Cloud笔记,在GitHub的热度居然高达81.6k标星,太强了!

Java架构之路

Java 程序员 架构 面试 编程语言

企业CRM未来发展趋势展望

Philips

敏捷开发 软件架构

端应用研发进入云原生时代

移动研发平台EMAS

智能安防的普惠密码,在华为好望手中的三根“线头”上

脑极体

调包侠的炼丹福利:使用Keras Tuner自动进行超参数调整

计算机与AI

学习 keras 超参数调优

快速掌握并发编程---线程池的原理和实战

田维常

程序员

问题篇:WSL和VMware。你怎么选择(附wsl安装步骤)

小Q

Java Linux 学习 架构 面试

如何实现微服务架构下的分布式事务?

华为云开发者联盟

架构 分布式 事务

只有基于区块链才可能实现“大众创业、万众创新”

CECBC

区块链 分布式技术

想了解Webpack,看这篇就够了

华为云开发者联盟

华为 大前端 开发

LeetCode题解:78. 子集,递归回溯,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

假的数字人民币钱包已出现,真的是啥样?

CECBC

数字货币 数字钱包

保险区块链创新中心成立,三方面赋能行业数字化转型

CECBC

区块链 保险

后李健熙时代的三星,将迎来怎样变局?

脑极体

架构师训练营作业:第五周

m

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