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

使用 DDD、事件风暴和 Actor 来设计反应式系统

  • 2018-04-01
  • 本文字数:1491 字

    阅读完需:约 5 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

领域驱动设计(domain-driven design,DDD)通常在微服务领域用于查找边界(限界上下文)。同样来自DDD 的聚合(aggregate)对于定义持久化和一致性的范围来讲也是很重要的。 但是,并不是领域驱动设计中的所有内容都适合微服务, Lutz Huehnken 在柏林举办的 microxchg 2018 的演讲中讨论了如何使用 DDD、事件风暴(Event Storming)和基于 Akka Lagom 框架来构建反应式系统,在这个过程中模型与实现会按照1-1 的方式进行映射。

在DDD 中,传统上会关注系统的静态结构,当我们与领域专家交流的时候会聆听他们的名词。Huehnken 是一位独立咨询顾问,对他来讲关注静态属性通常会导致糟糕的边界。因此,他主张我们应该关注动态性和事件。在设计的初期阶段,至关重要的并不是事物,而是所发生的事情。

事件风暴

事件风暴主要是来自DDD 社区的一个工作坊,用于快速探索复杂的业务领域。在这个过程中,会使用一面大墙作为建模面,并使用贴纸来代表模型。我们将业务人员和开发人员聚集起来,并采用事件的方式查找领域中所发生的事情。当找到事件时,会尝试沿着一个时间线对它们进行排序。随后,我们会添加触发每个事件的命令。Huehnken 在这里没有基于实体看上去的从属关系创建聚合,而是希望能够根据命令流和事件而生成聚合。这会给聚合带来不同的视角,它会对命令和事件一起进行逻辑分组,他相信这种方式能够为我们带来更好的边界划分,并且有助于将聚合分割到不同的服务中。

在Huehnken 的经验中,事件风暴是一个强大的工具,在一些较大规模的场景中更是如此,但是它可以用于不同的级别。他发现我们还可以将其用到一个更加技术化的级别,用于建模服务和聚合。这种方式的一个巨大优势就是能够将模型和实现匹配起来,这在DDD 中是非常重要的。

反应式系统

反应式系统指的是构建具备即时响应性、弹性、适应性以及消息驱动特征的系统。实现这些特征的方式是异步消息。对于Huehnken 来说,微服务的关键点在于隔离、快速反应并且能够在部署新版本服务时不影响系统的其他组成部分,所以对他来说,这两个概念非常具有互补性,我们需要反应式的微服务。

实现反应式系统的教科书式技术是 Actor ,但是 Huehnken 认为这种模型并不像他想象中的那样被广泛采用,他相信造成这一点的原因在于从单体模型进行转移所需的思想方式转变。在单体模型中,我们可以访问任何的内容,甚至可以跨越已存的逻辑边界。在真正的分布式系统中,会具有网络边界,我们无法以整体的方式访问系统。涉及到多个聚合的业务进程可能会需要像 sagas 这样的模式。现在,我们还要告别全局状态,在分布式系统中,每个服务是本地化的,已经过去的事情要通过事件来表示。

Huehnken 认为我们已经有了一个非常有趣的采用 Actor 的实现技术。现在有多个可用的框架,包括 Erlang 和 Akka。Lagom 是一个更新、更具倾向性的微服务框架,它基于 Akka、 CQRS 事件溯源(event sourcing)。因为思维方式的挑战,人们在构建复杂异步解耦的系统时还较为困难,但是如果我们想要将建模技术和实现技术结合起来,这将是一个非常好的机会。

在DDD 中,非常重要的一点在于代码要表述模型的概念。Huehnken 认为我们在这一点上已经迷失并且在偏离方向。我们已经开发了实现技术,并且又独立开发了新的建模技术,现在我们必须将它们结合起来,这样来自模型的理念能够直接反射到代码中,这样的话,会在构建分布式系统方面取得真正的突破。

会议演讲的视频进行了录制,其中有一部分已经发布,更多的视频稍后会发布。

查看英文原文 Designing Reactive Systems Using DDD, Event Storming and Actors

2018-04-01 19:004979

评论

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

MyEMS助力企业轻松实现ISO 50006标准

开源能源管理系统

开源 代码 能源管理

限时揭秘!丰富采购经验力荐的堡垒机企业-行云管家!

行云管家

网络安全 堡垒机

06月24日刚出的社招岗位大家快投吧!

Y11

面试 找工作 大厂

鸿蒙实时协同实战:Live View Kit打造沉浸式文档批注系统

huafushutong

HarmonyOS SDK应用服务

MyEMS开源能源管理系统核心代码解读003(下)

开源能源管理系统

开源 代码 能源管理

CST热仿真CHT求解器--针式散热片+风扇

思茂信息

仿真 CST Studio Suite 热仿真

ManageEngine卓豪简化变更管理的工作方法(三)

ServiceDesk_Plus

变更管理

鸿蒙商业化实战:IAP Kit构建安全文档付费体系

huafushutong

HarmonyOS SDK应用服务

编程简单了,部署依旧很难|Karpathy 演讲的 5 点解读

阿里巴巴云原生

阿里云 云原生

域名 SSL证书和IP SSL证书有什么区别?

国科云

AI 技术在英语学习中的主要应用

北京木奇移动技术有限公司

AI教育 软件外包公司 AI英语学习

vRDMA 发布,助力云上 VPC 内高性能通信

火山引擎开发者社区

火山引擎

启信宝联合六大数交所共同编制,《企业数据治理实践白皮书》发布

合合技术团队

人工智能 算法 大数据‘’

通义灵码用户说 | 编程智能体+MCP加持,秒查附近蜜雪冰城

阿里云云效

通义灵码 Qwen

鸿蒙互动化实战:Game Service Kit重塑文档学习体验

huafushutong

HarmonyOS NEXT

鸿蒙智能文档治理实战:File Manager Service Kit实现企业级文件管理

huafushutong

HarmonyOS SDK应用服务

语音生成+情感复刻,Cosyvoice2.0 极简云端部署

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

鸿蒙地理围栏实战:Location Kit实现智能文档地理围栏

huafushutong

HarmonyOS SDK应用服务

鸿蒙地理可视化实战:Map Kit实现智能文档位置洞察

huafushutong

HarmonyOS SDK应用服务

火山引擎向量数据库 Milvus 版正式开放

火山引擎开发者社区

火山引擎

FORCE 开发者论坛 | 火山引擎发布多款 Agent 开发工具

火山引擎开发者社区

火山引擎

鸿蒙健康守护实战:Health Service Kit实现智能文档工作监护

huafushutong

HarmonyOS SDK应用服务

IDM使用教程之如何下载网页中的视频资源,电脑网页上的视频怎么保存到本地

阿拉灯神丁

视频下载器 内容嗅探 IDM 网页视频下载工具 如何下载网页视频

泉州等保测评机构电话是多少?在哪里?

行云管家

等保 等级保护 等保测评

进入手机 App 的速度怎么越来越拖?

Speedoooo

APP开发 小程序容器 开发效率 开发方式 App加载速度

字节跳动开源了一款 Deep Research 项目

火山引擎开发者社区

火山引擎

枫清科技受邀参加2025数据智能大会

Fabarta

人工智能 科技 数据智能大会

通义灵码用户说 | 编程智能体+MCP加持,秒查附近蜜雪冰城

阿里巴巴云原生

通义灵码

鸿蒙智能提醒实战:Notification Kit实现文档关键节点零遗漏

huafushutong

开源鸿蒙年中技术会议在东莞盛大召开,生态繁荣与技术突破共绘新蓝图

最新动态

超实用!SpringAI提示词的4种神级用法

电子尖叫食人鱼

数据库 前端

使用DDD、事件风暴和Actor来设计反应式系统_语言 & 开发_Jan Stenberg_InfoQ精选文章