AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

【新春特惠周末班】2月4-5日在线CSPO“价值交付课程” | 全国招生

ShineScrum

产品负责人 CSPO认证 CSPO

京东探索研究院 | 2023年十大科技趋势

京东科技开发者

京东 技术分享 京东云 技术预测 企业号 1 月 PK 榜

深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」

码界西柚

nginx 负载均衡 反向代理 优化架构

湖仓一体电商项目(十七):业务实现之编写写入DIM层业务代码

Lansonli

湖仓一体电商项目

视觉模型 ConvNeXt V2,结合纯卷积与MAE

Zilliz

计算机视觉

【最佳实践】TiDB 同步&迁移实战 (从 MySQL/Oracle/PostgreSQL/MongoDB 到 TiDB )

TiDB 社区干货传送门

【春季2月CSM认证周末班】提前报名特惠--“全球金牌”课程CST导师亲授

ShineScrum

ScrumMaster 项目经理 ScrumMaster认证 CSM认证

模块二作业 (架构实战训练营)

Justin

架构实战营

“祝福海报”小程序走红,AIGC走进“千家万户”

科技热闻

TiDB PPT玩家快速点评 V6.5 新特性

TiDB 社区干货传送门

版本测评

TiDB CDC v6.5.0 新特性实践

TiDB 社区干货传送门

实践案例 新版本/特性发布 6.x 实践

Transformer 再添一员,比 Swin 更强的 DiNAT

Zilliz

TiCDC 源码解读(4)-- TiCDC Scheduler 工作原理解析

TiDB 社区干货传送门

TiCDC 源码解读

2022最新MySQL高频面试题汇总

程序员大彬

MySQL 数据库 计算机

全球化商家平台技术探索与演进

阿里技术

全球化 架构演进

有什么方法从 PostgreSQL 数据迁移到 TiDB ?

TiDB 社区干货传送门

迁移 实践案例 管理与运维

我理解的卓越工程

agnostic

卓越工程

KaiwuDB CTO 魏可伟:1.0 时序数据库技术解读

KaiwuDB

时序数据库 多模数据库 技术优势

开源SPL强化MangoDB计算

石臻臻的杂货铺

开源 SPL

正式起航!用友23大行业客户与解决方案事业部全面亮相

用友BIP

用友BIP

赛意信息张成康:在行业场景驱动下为企业创造数字化价值

科技热闻

2022年度回顾|龙蜥这一年:协同开放 众行致远

OpenAnolis小助手

开源社区 龙蜥 贡献 协同开放

如何通过Java代码在PDF中插入、替换或删除图像?

在下毛毛雨

Java PDF 图像

一图回顾博睿数据的2022

博睿数据

年度报告 博睿数据

设计文档概述

五毛

设计原则

QEMU与KVM架构介绍

Linux内核拾遗

Linux 虚拟化 qemu kvm

【春季2月A-CSM特惠周末班】ScrumMaster进阶课程 · CST导师亲授

ShineScrum

敏捷教练 高阶SM 敏捷教练技能

喜报|HarmonyOS开发者社区连获业内奖项,持续深耕开发者生态

HarmonyOS开发者

HarmonyOS

企业数字化转型,工具先行

飞算JavaAI开发助手

Electron打包错误的踩坑小记

茶无味的一天

前端 Electron Node electron实战

Datawhale学习笔记【阿里云天池 金融风控-贷款违约预测】Task2 数据分析

一颗小树

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