写点什么

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

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

关注

评论

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

使用关键点检测打造小工具Padoodle,让涂鸦小人跟随真人学跳舞

百度大脑

[算法练习]2 二进制中1的个数

暖蓝笔记

3月月更

架构训练营毕业总结

Geek_e6f7f6

架构实战营

微博评论的高性能高可用计算架构

AragornYang

架构训练营 架构实战营

尤达 DDD 领域驱动设计思想 第二章作业(重新划分SmartRM的子域和限界上下文)

代廉洁

尤达DDD领域驱动设计思想

拿下10+OFFER总结的HR常问问题

暖蓝笔记

3月月更

有温度的人工智能,零门槛助力企业“鲤跃”智能化“龙门”

百度大脑

模块化编程及LCD1602调试工具

謓泽

3月月更

做一个小程序到底要多少钱?都有哪些费用?

源字节1号

开源 前端开发 后端开发 开发小程序

报名啦!中小企业如何借力AI逆势突围?飞桨中国行定档3月23日!

百度大脑

一文彻底搞懂原型链

CRMEB

持续集成工具篇:Jenkins与流水线管理

自动化 持续集成 jenkins 持续交付 构架

Flutter 图文并茂列表完整实现

岛上码农

flutter ios 安卓 移动端 3月月更

优秀的测试开发应该具备的六大能力

老张

软件测试 测试开发

吉利控股集团与百度深化战略合作

百度大脑

AI语音识别-我给浏览器加了个语音搜索功能

DS小龙哥

语音识别 3月月更

【建议收藏】Kafka 面试连环炮, 看看你能撑到哪一步?(上)

王江华

大数据 kafka 面试 中间件 消息队列

vim 常用操作键tips

刁架构

xcode vim 快捷键

免费机器资源、硬核导师、丰厚奖励|飞桨黑客马拉松第二期开始啦!

百度大脑

建设领先的AI原生云,百度智能云落地新一代高性能AI计算集群

百度大脑

纯CSS 神奇的边框特效

德育处主任

css3 纯CSS 前端可视化 css动画

面向智能合约、区块链、Web3、以太坊开发工具指南

devpoint

Ethereum infura Solidity Web3.0 3月月更

威胁驱动的网络安全方法论

喀拉峻

网络安全

Eclipse 不为人所知的另一面 - 企业管理软件领域 ABAP 编程语言开发利器

汪子熙

eclipse ide 开发者 abap 3月月更

实用机器学习笔记二十六:NAS

打工人!

学习笔记 NAS 机器学习算法 3月月更 神经网络架构搜索

LeetCode刷题笔记:数组中重复的数据

OpenHacker

JavaScript 算法 LeetCode

尤达DDD领域驱动设计思想 第一章作业(理解单纯的面向对象设计思想的缺陷)

代廉洁

尤达DDD领域驱动设计思想

百度连续四年亮相全球量子信息处理顶会QIP 宣布量子战略规划升级

百度大脑

对称加密与非对称加密总结

暖蓝笔记

3月月更

图灵奖得主Yann LeCun走进百度,与世界研究工作者展开交流

百度大脑

RENO: Netflix的快速事件通知系统

俞凡

架构 netflix 大厂实践 3月月更

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