10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

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

关注

评论

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

三翼鸟的羽翼下,人诗意地栖居在智能生活里

脑极体

那束漂亮的手捧花

小天同学

爱情 4月日更 幸福 传递

线上PHP服务故障排查之路

风翱

PHP-FPM 线上事故 4月日更

新的物联网技术应用有哪些

cdhqyj

互联网 物联网 通信 计算机

游戏数据埋点

data_y

游戏 数据埋点 游戏数据分析 埋点定义

【得物技术】算法入门一:算法的好坏?复杂度告诉你

得物技术

算法 时间复杂度 大前端 入门 复杂度

微服务网关:Spring Cloud Gateway —— Zuul

程序员架构进阶

微服务 网关 28天写作 4月日更

一个DNS引发的“血案”

穿过生命散发芬芳

Wireshark 数据包分析 4月日更

新华三“云屏”发布:云屏融合重塑工作体验,全力构建智“会”时代

DT极客

CI/CD之基于Jenkins的发布平台实践

小江

DevOps jenkins CI/CD 发布流程

使用FFmpeg开发的那些事

Bob

音视频 ffmpeg 开源文化

JavaScript小笔记

赫鲁小夫

4月日更

「开源免费」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之动态表单设计器(五)

crudapi

Vue crud 动态表单 quasar cruapi

如何引入TDD实践

顿晓

TDD 4月日更

聊聊云厂商的指标监控组件

耳东@Erdong

Prometheus 4月日更 #Grafana

Android音视频 - MediaCodec编解码音视频

LoveYFan

android 音视频 编解码

调整云计算资源大小时要避免的10个错误

云计算

你真的懂反馈吗?

石云升

28天写作 职场经验 管理经验 4月日更

Redis 最后一课

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

浅论结构体与联合体

Integer

c

Android音视频 - EGL源码解析以及C++实现

LoveYFan

android 音视频 OpenGL ES

翻译:《实用的Python编程》08_01_Testing

codists

Python

深圳龙华携手腾讯云 加快推进区块链先行试验区建设

CECBC

在业务高峰期拔掉服务器电源是一种怎样的体验?

冰河

分布式 微服务 数据恢复 MySQL 高可用 异常处理

经典递归

山@支

我的 2015-2018 —— 银行软开三年项目回顾

清秋

大前端 重构 鉴权 4月日更

Go1.16 中模块的新变化

Rayjun

Go 语言

聪明人的训练(九)

Changing Lin

4月日更

深入浅出 LVS 负载均衡系列(一):NAT、FULLNAT 模型原理

UCloud技术

负载均衡

spring的IOC使用以及原理

邱学喆

spring ioc 对象创建 属性注入

使用Composition API在Vue3中创建防抖搜索输入框

devpoint

vite Vue3 防抖

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