写点什么

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

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

关注

评论

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

DAPP矩阵公排模式系统开发

l8l259l3365

保护你的游戏服务器——游戏盾的功能和优势

德迅云安全_初启

Casper Network 推出 “DevRewards” 计划:允许所有开发者赚取激励

股市老人

简单清晰的Redis C++客户端

王玉川

c++ redis 开源 发布订阅 流水线

AE镜头光晕插件 optical flares mac破解版 附许可文件

Rose

跨界宠粉!五粮液包机送“五粉”直击湖南跨年晚会!

新消费日报

INFINI Labs 产品更新 | Console 数据迁移支持 Percentiles 均匀分区

极限实验室

console 极限科技 产品更新发布

C 语言数组教程:定义、访问、修改、循环遍历及多维数组解析

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

终于!极狐GitLab 支持 ARM 啦!

极狐GitLab

Mac操作系统的专业音频处理软件:Hit'n'Mix RipX DAW PRO

Rose

音频处理器 苹果破解软件下载 Mac音频处理 Hit'n'Mix RipX DAW PRO

文心一言 VS 讯飞星火 VS chatgpt (170)-- 算法导论13.2 3题

福大大架构师每日一题

福大大架构师每日一题

揭密支付安全:为什么你的交易无法被篡改

支付系统 签名验签 支付安全 支付系统设计与实现

2023 总结:我在上海做程序员的第八年

拭心

android 程序员 年度总结

炫酷鼠标悬停随机渐变文本动画效果

南城FE

CSS 前端 css动画

思维导图、头脑风暴:MindNode for mac完整中文破解版

Rose

mac思维导图软件 MindNode 5 MindNode破解版下载 MindNode for mac

Adobe Audition(Au)如何扫描 VST3、VST 和 Audio Units 增效工具?

Rose

ExecutorCompletionService详解

Java随想录

Java 线程 线程池 并发

流行的机器学习算法——线性回归

小齐写代码

CodeWhisperer: 让开发效率翻倍的AI助手

不会算法。

笔记:写Flink SQL Helper时学到的一些姿势

泊浮目

vscode ANTLR antlr4 FlinkSQL

什么是数据驱动?它和模型驱动、领域驱动、元数据驱动、DSL驱动之间有什么区别?

canonical

领域驱动设计 低代码 领域驱动 Nop平台

IINA for Mac:功能强大的开源媒体播放器

Rose

mac视频播放器 IINA下载 好用的苹果媒体播放器 IINA for Mac下载

macOS 上最完整、最通用、最强大的菜单栏日历:Calendar 366 II

Rose

Mac日历软件 苹果破解软件下载 Calendar 366 II中文版 Calendar 366 II Mac下载 菜单栏日历工具

Rectangle Pro for Mac(原Hookshot光标快速移动和管理窗口的工具)

Rose

Rectangle Pro for Mac mac窗口管理工具 Hookshot光标

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