50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

《人民日报》刊文:天翼云持续创新为数据安全保驾护航

天翼云开发者社区

在线MySQL,SQL Server建表语句生成JSON测试数据工具

入门小站

工具

聊聊 Pulsar:编译 Pulsar 源码并搭建源码环境

老周聊架构

云原生 Apache Pulsar 3月月更

云原生网络利器--Cilium 之 eBPF 篇

Daocloud 道客

云原生 ebpf cilium

WMS系统与ERP仓储管理的差异

源字节1号

开源 后端 前端开发 WMS系统 ERP系统

无影云电脑支持企业快速实现居家办公

阿里云弹性计算

远程办公 数据安全 无影云电脑

确保数据中心物理安全的五种方法

Ethereal

图解|从根儿上理解MySQL的索引

蝉沐风

MySQL 索引 B+树

阿里云神龙AI加速引擎帮助vivo将训练性能提升30%-70%

阿里云弹性计算

AI gpu 神龙架构 加速引擎

终端常用快捷键

刁架构

终端 快捷键 iterm2

欧拉的奇异之旅·共赴开源时代

白洞计划

融云 IM +RTC 重磅优惠上线!15 天免费体验,1 年服务买一赠一

融云 RongCloud

天翼云联手平凯星辰共建开源分布式数据库实验室

天翼云开发者社区

智能家居市场白热化,小程序助力生态合作新模式

Speedoooo

小程序生态 智慧小区 小程序容器 智慧家居 智慧物业

CVE-2022-22947 远程代码执行漏洞复现分析

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

融云获 CSDN 技术影响力之星评选「年度技术品牌奖」

融云 RongCloud

Python 递归函数返回值为 None 的解决办法

AlwaysBeta

Python 递归

兴业+民生上岸面试经验分享

暖蓝笔记

3月程序媛福利 3月月更

作业五

Geek_f3e842

架构实战营

拥抱国产云桌面,焱融科技与酷栈科技完成产品兼容认证

焱融科技

云计算 分布式 云原生 高性能 文件存储

向工程腐化开炮|资源治理

阿里巴巴终端技术

Java android 资源管理

使用基于 WebRTC 的 JavaScript API 在浏览器环境里调用本机摄像头

汪子熙

JavaScript 前端 WebRTC 摄像头 3月月更

对微博系统中“微博评论”的高性能高可用计算架构的一点思考

晨亮

「架构实战营」

东数西算加快云网与数据融合天翼云架起云间高速

天翼云开发者社区

如何设计良好的技术项目文档结构

老张

项目管理 交付质量

千字带你了解什么是 RPC 协议

踏雪痕

RPC 3月程序媛福利 3月月更

如何捕获和分析 JavaScript Error

喀拉峻

前端

如何在 Python 中反转字符串?

Ethereal

每秒百万条信息查询天翼云助力江苏核酸检测信息查询

天翼云开发者社区

持续集成容器篇:Docker与自动化打包

Docker 架构 持续集成 jenkins 持续交付

创建 Node.js 视频流应用之后端

devpoint

node.js Video Express 3月月更

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