中国卓越技术团队访谈录读者调查,2022年采访嘉宾由你决定! 了解详情
写点什么

Vaughn Vernon 使用反应式 DDD 对微服务中的不确定性建模

  • 2017 年 10 月 12 日
  • 本文字数:1135 字

    阅读完需:约 4 分钟

微服务和反应式模型虽然很强大,但也带来了不确定性。开发人员总是对消息驱动的系统持有疑问:

  • 有人接收到我发出的消息了吗?
  • 他们对消息做出回应了吗?
  • 消息的顺序会不会被打乱了?

Vaughn Vernon 在 DDD 探索大会的演讲中提到,DDD 是回答上述问题的基础。使用通用语言( Ubiquitous Language )来描述由边界上下文( Bounded Context )组成的系统可以降低分布式系统的复杂度。不确定性应该成为通用语言的一部分,比如边界上下文之间的交互问题。

Vernon 是“ Implement Domain Driven Design ”和“ Reactive Messaging Patterns with the Actor Model ”的作者,他认为为项目创建好上下文映射是至关重要的。从实际情况来看,业务的核心领域总会包含多个边界上下文,而上下文映射体现了边界上下文之间的关系。在建立上下文映射关系时,要专注在团队之间的关系上,而不是去关注技术细节,比如究竟是使用 REST 还是使用 RPC。Vernon 说,“集成对象比如何集成更加重要”。

Vernon 看到了反应式系统的发展趋势,反应式行为存在于微服务之中,同时又超越了微服务。这并非什么新概念,他说, Eric Evans 早就在业界推广事件模式。其核心思想就是对过去发生的事件作出反应,进而达到和谐的状态。

微服务和反应式行为带来了不确定性,包括事件顺序的不确定性和事件的重复性问题。Vernon 强调说,“就算你使用的是 Kafka,认为自己是在按顺序消费消息,但其实是在自欺欺人。如果任何一个消息可能出现乱序,那么所有消息都有可能出现乱序,你要为之做好应对准备”。

Vernon 认为这种不确定性是很难得到消除的,因为我们已经习惯于阻塞调用、数据库锁等事物,并总是期待事物是按照一定顺序进行的。在反应式系统里,一些长久以来的信念开始土崩瓦解。或许,开发者会本能地创建出门面(facade)来隐藏不确定性,写出传统的非反应式代码,但 Vernon 认为我们应该要反其道而行之。

Vernon 总结了自己处理不确定性的方式——“更少的查询,更多的事件”。事件告诉我们在过去某个时刻发生了什么。我们不知道系统现在处于什么状态,只知道事件发生时的状态以及在这一过程中发生了哪些变化。如何对这些事件作出反应式属于业务决策,包括如何处理乱序问题。Vernon 引用了 Pat Helland 的论文“ Life Beyond Distributed Transactions ”:“在一个不能依赖分布式事务的系统里,必须在业务层面管理不确定性”。

Vernon 列举了几中不同形式的不确定性,并提供了用于管理不确定性的简短代码。他强调这些代码只是业务决策的实现。业务必须拥抱不确定性,必须让业务决策者来对其进行建模,而不是在软件开发团队内部完成这件事情。不要通过创建门面来隐藏不确定性,而是尽你所能对不确定性进行建模。

查看英文原文: Vaughn Vernon Uses Reactive DDD to Model Uncertainty in Microservices

2017 年 10 月 12 日 19:00992
用户头像

发布了 321 篇内容, 共 116.3 次阅读, 收获喜欢 121 次。

关注

评论

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

新思科技:ISO/SAE 21434标准即将发布 你准备好了吗?

InfoQ_434670063458

新思科技 汽车软件安全

大整数算法

落曦

年轻人你不讲武德,自己偷着学习!spring Security五套「源码级」笔记哪里来的?我也要!

Java架构追梦

Java 源码 架构 面试 spring security

贼好用,冰河开源了这款精准定时任务和延时队列框架!!

冰河

redis 中间件 消息队列 延时队列 Zset

2021年全球公有云终端用户支出将增长18% ;EMNLP 2020最佳论文:无声语音的数字发声

京东科技开发者

程序人生

OpenKruise:阿里巴巴 双11 全链路应用的云原生部署基座

阿里巴巴云原生

Kubernetes 运维 云原生 中间件 存储

今年最火的 Golang 云原生开源项目,可能就是它了!

阿里巴巴云原生

开源 Kubernetes 云原生 Go 语言

JVM Metaspace内存溢出排查与总结

Java老k

Java OOM 内存溢出 metaspace

训练营第五周作业

爱码士

训练营

区块链司法可信存证,版权维护应用落地

t13823115967

区块链司法可信存证 版权维护应用落地

linux开发各种I/O操作简析,以及select、poll、epoll机制的对比

良知犹存

linux开发

2020年10月公有云性能评测:盛大云-华东蝉联冠军,腾讯云-北京无缘前三

博睿数据

云计算 腾讯云 ucloud 公有云 评测

贞炸了!上线之后,消息收不到了!

楼下小黑哥

Java RocketMQ MQ

重点人员管控系统开发,情报研判系统搭建

t13823115967

重点人员管控系统开发 情报研判系统搭建

基于ELK的日志平台介绍

Rayzh

ELK 日志系统

架构师训练营第 1 期 -week9

习习

《华为数据之道》读书笔记:第1章 数据驱动的企业数字化转型

方志

数据中台 数据湖 数据治理

架构师训练营第 1 期第 10 周作业

业哥

DocView 现在支持自定义 Markdown 模版了!

程序员小航

markdown IDEA idea插件 文档生成

从资源管理角度认识K8S

LorraineLiu

Kubernetes 云原生 k8s k8s入门

聊聊在国企当程序员的这三年,这样的生活真的是你想要的吗?

Java架构师迁哥

甲方日常 55

句子

工作 随笔杂谈 日常

探秘RocketMQ源码【1】——Producer视角看事务消息

阿里云金融线TAM SRE专家服务团队

开源 RocketMQ 中间件 消息中间件

anyRTC uni-app 跨平台SDK 发布!总有一款适合你!

anyRTC开发者

uni-app 音视频 WebRTC RTC

《华为数据之道》读书笔记:序言

方志

数据中台 数字化转型 数据治理

MySQL选错索引导致的线上慢查询事故

Zhendong

Java MySQL

Java踩坑记系列之线程池

Java老k

Java 线程池

怎么做好一场分享或者培训

fq

OAuth 2.0授权框架详解

程序那些事

OAuth 2.0 程序那些事 Oauth 授权框架 安全框架

前端如何实现一键截图功能?

徐小夕

Java 大前端 React

训练营第5周学习总结

爱码士

训练营

撑起瞬时千亿交易额的云数据库是怎么炼成的?

撑起瞬时千亿交易额的云数据库是怎么炼成的?

Vaughn Vernon使用反应式DDD对微服务中的不确定性建模-InfoQ