写点什么

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

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

关注

评论

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

阿里资深架构师终于把微服务架构与实践第2版PDF分享出来了

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Spring 配置加载

樊江。

Spring Framework

技术实践|网易云信 IM SDK 服务高可用技术方案

网易云信

后端

打开vscode好像打开了原神?vscode原神背景推荐,比博燃

CodeNongXiaoW

vscode vscode背景 原神

最全互联网后端免费技术分享视频资源学习社区

hanaper

kubelet 1.14 升级 kubelet 1.20 容器重启问题

Geek_f24c45

Docker Kubernetes kubelet

能不能征服初恋,就看这个架构了!!!

人工智能~~~

北鲲云超算平台如何帮助高性能计算行业提供解决方案

北鲲云

fil挖矿步骤教程是什么?fil挖矿规则是什么?

fil挖矿步骤教程是什么 fil挖矿规则是什么

模块一作业

陈家豪

架构实战营

ipfs挖矿合法吗?ipfs挖矿靠谱吗?

区块链 IPFS ipfs挖矿 ipfs矿机 filecoin挖矿

技术分析| 实时音视频通讯中的流媒体是怎样传输的

anyRTC开发者

音视频 WebRTC 流媒体 流媒体传输

Goroutine & Channel

Vibyird

并发编程 channel CSP Go 语言 goroutine

宝安机关食堂支持数字人民币刷脸支付

CECBC

WorkPlus高端制造业移动数字化平台解决方案—华晨宝马

WorkPlus

即时通讯 移动办公平台 移动数字化底座 移动数字化基座 企业即时通讯平台

如何从内部保障企业数据安全?用IT运维审计系统可以吗?

行云管家

网络安全 数据安全 堡垒机 IT运维 运维审计

关于飞书的告警通知,这里有个更好的办法

睿象云

运维 告警 运维平台 智能告警

TCP协议认知篇

邱学喆

TCP协议 拥塞避免算法 慢启动算法 坚持定时器 TCP状图切换

图数据库在百度汉语中的应用

百度Geek说

数据库 后端

交易所智能炒币机器人开发||量化交易炒币机器人系统搭建

Geek_23f0c3

量化交易机器人系统开发 炒币机器人

小公司实施系统为什么也容易失败?

明道云

阿里巴巴首发:Java核心框架指导手册1小时点击量破千万!

Java 编程 面试 程序人生 Alibaba

区块链产业大爆发!未来究竟是谁的机会?

CECBC

如何基于分布式KV研发一款消息中间件

Java 编程 面试 后端 中间件

量化交易炒币机器人系统搭建

量化系统19942438797

机器人 量化交易

高可用 | Xenon 实现 MySQL 高可用架构 部署篇

RadonDB

MySQL 数据库 Xenon RadonDB

吐血整理!金九银十必问的1000道Java面试题及答案

Java 编程 程序员 架构 面试

区块链应用:从技术工具到创新思维

CECBC

计算机网络常用知识总结

Java 架构 后端 网络 计算机

springboot+vue+activiti,在线编辑器,快速开发平台

金陵老街

Java Vue 工作流 springboot Activiti

区块链“通证”将颠覆“资本”

CECBC

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