写点什么

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

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

关注

评论

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

5种分布式事务方案与阿里的 Seata 中间件

Bruce Duan

分布式事务 seata

话题讨论 | 作为地地道道的程序员半年内都没摸过代码是什么样的体验?

xcbeyond

话题讨论

《Python深度学习》第二版重磅来袭——(Keras之父亲自编写)

计算机与AI

百篇已过,又是一个新篇章,谈谈感受吧

良知犹存

代码人生

算法训练营课程纲要

陈皓07

架构词典:语言

lidaobing

架构 语言

告别“效率内卷化”,华为用一年时间让职场人支棱起来

脑极体

2. Spring早期类型转换,基于PropertyEditor实现

YourBatman

Spring Framework 类型转换 PropertyEditor

Bitmap为什么那么快?

Man

redis 中间件

第六周-作业1

Mr_No爱学习

第六周-学习总结

Mr_No爱学习

生产环境压测建设历程之三 淘宝网2009年的痛

数列科技杨德华

第十一周作业

solike

「生产事故」MongoDB复合索引引发的灾难

Kerwin

数据库 mongodb

数字经济跨越五个融合发展阶段,区块链正成为基础支撑结构

CECBC

数字经济

S型曲线不止关乎身材?|技术人应知的创新思维模型(2)

Alan

创新 思维模型

拆解增长黑客之实战(二):留存与变现

懒杨杨

读书 增长 产品运营

报销发票抵扣工资的CTO,该不该? | 法庭上的CTO(5)

赵新龙

CTO 法庭上的CTO

Spock单元测试框架实战指南四 - 异常测试

Java老k

Java 单元测试 spock

甲方日常 64

句子

工作 随笔杂谈 日常

Newbe.ObjectVisitor 0.4.4 发布,模型验证器上线

newbe36524

.net core ASP.NET Core dotnet

警察营救安徽望江县17岁女生跳河自尽过程中,现场看热闹的旁观者们在做什么?

wbliu85

排查指南 | 当 mPaaS 小程序提示“应用更新错误(1001)”时

蚂蚁集团移动开发平台 mPaaS

小程序 问题排查 mPaaS

国家计算机网络与信息安全管理中心官员:数字货币的风险仍需关注

CECBC

信息安全

读写分离这个坑,你应该踩过吧?

楼下小黑哥

MySQL 主从同步 读写分离

谷燕西:不需要银行的银行业务

CECBC

移动互联网

Redis 子进程开销监控和优化方式

李尚智

Redis开发与运维

Redis 持久化方式-RDB

李尚智

redis redis持久化

基于有限状态机与消息队列的三方支付系统补单实践

Java架构师迁哥

面试被问线程安全怎么保障,我的回答让面试官眼前一亮

996小迁

Java 架构 面试 多线程

Windows下MySQL无法启动万能解决方案

MySQL从删库到跑路

MySQL

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