AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

发布了 322 篇内容, 共 147.2 次阅读, 收获喜欢 148 次。

关注

评论

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

低代码实现探索(五十一)组件的配置

零道云-混合式低代码平台

如虎添翼!微软OneNote迎来新利器!

Jackpop

工赋开发者社区 | 研究了代码质量后,开发速度提高了 2 倍,bug 减少了 15 倍

工赋开发者社区

Vue组合式函数(一)

Augus

vue.js 11月月更

【C语言】case 关键字

謓泽

11月月更

云原生训练营课程总结

Rex

不借助 Fiori client,直接在手机浏览器里调用 SAP UI5 BarcodeScanner 实现条形码扫描的可能性?

汪子熙

sdk SAP Fiori SAP UI5 11月月更

Java中的static关键字详解

共饮一杯无

Java 关键字 11月月更

NB的Github项目,看到最后一个我惊呆了!

艾小仙

Java GitHub

作为资深Mac用户,有哪些你相见恨晚的软件值得推荐?

Jackpop

JAVA中如何实现代码优化(技巧讲解)

叶秋学长

Java 优化 技巧总结 11月月更

hadoop2.7集群初始化之后没有DataNode的问题

程序员欣宸

大数据 hadoop 11月月更

全新升级的鸿蒙开发套件,你想知道的都在这里

HarmonyOS开发者

HarmonyOS

产品负责人的轻度思考,6个小策略,面对迭代Sprint评审会

老彦

敏捷 回顾会 产品负责人

Mac上有那些你认为极其好用的app?

Jackpop

独有且优质!这些Mac软件绝了!

Jackpop

vue中网络请求axios的使用和封装

格斗家不爱在外太空沉思

Vue axios 11月月更

WEB-INF/web.xml泄露

我是一个茶壶

WEB安全 11月月更 源码泄露

阿里低代码引擎怎么样,好不好用?

优秀

低代码

卷积模型分类图片

芯动大师

Python 卷积网络 11月月更

如何通俗易懂理解Python类和面向对象?

Jackpop

2022-11-04:给定一个正数n,表示有多少个节点 给定一个二维数组edges,表示所有无向边 edges[i] = {a, b} 表示a到b有一条无向边 edges一定表示的是一个无环无向图,也

福大大架构师每日一题

算法 rust 福大大

chrome调试工具之network

格斗家不爱在外太空沉思

浏览器 11月月更 浏览器调试

【愚公系列】2022年11月 微信小程序-Request网络请求的封装

愚公搬代码

11月月更

Java中的内部类与匿名内部类详解

共饮一杯无

Java 内部类 11月月更 匿名内部类

工赋开发者社区 | SPL工业智能:发现时序数据的异常

工赋开发者社区

HNCTF--Misc部分题解

我是一个茶壶

11月月更 杂项 HNCTF

网络安全必学SQL注入

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

Vue-Vuex学习

格斗家不爱在外太空沉思

vue.js vuex 11月月更

华为发布鸿蒙开发套件 全面加速推进鸿蒙生态

科技汇

华为高清空间音频将登陆座舱,打造移动“车载大剧院”

最新动态

Vaughn Vernon使用反应式DDD对微服务中的不确定性建模_语言 & 开发_Thomas Betts_InfoQ精选文章