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

基于事件系统中的过程管理器

  • 2017-08-01
  • 本文字数:1301 字

    阅读完需:约 4 分钟

以发布事件的方式去通知领域内的更改,可实现不同领域彼此分离。但是如果逻辑事件流的确存在,事情就变得不明显了,并难以领会了。更好的解决方案是使用过程管理器(Process Manager)对全过程进行追踪。这是 Bernd Rücker 在今年的 DDD eXchange 大会演讲中提出的,演讲的内容涉及长期运行过程和领域驱动设计(DDD,Domain-Driven Design)。

Rücker 在长期运行过程上具有十多年的工作经验,他也是 Camunda 的联合创始人。在他看来,网购的过程从用户的角度看是十分简单的,就是下单、支付和快递。从 DDD 角度看,实现网购可能需要四种业务能力及相应的受限上下文,包括商店、支付、盘存和快递。这些上下文进而生成了匹配网购过程的领域事件,即下订单、收到付款、货物分拣和商品快递。

为完成下订单过程,上下文需要协作并响应所提交事件。当一个下单事件提交后,订阅此事件的支付上下文将在会在完成支付事件提交前,收到订单的支付款。一个问题是,支付上下文需要知道订单的支付时间,以及所以可触发支付的事件。实际上,这就意味着一旦新客户需要支付,必须要访问支付上下文。

Rücker 指出,虽然事件流导致了低耦合,但是其中并没有过程这一概念。这是事件流的一个问题,导致整个逻辑流非常难以看到,就此问题他提及了 Martin Fowler 的一篇文章。另一个问题是,导致事件流发生更改的新业务需求(例如 VIP 客户可以要求带发票的订单),可能需要更改多个上下文。

Rücker 提出了一种更好的解决方案,即使用过程管理器在一个地点上跟踪整个过程。其中过程管理器的主要职责是:

  • 事件到命令的转化。下单事件是已经发生的事件,隐含了我们的确希望发生的一些事情、一个命令等。在本例中,这可以是读取支付命令。
  • 以领域逻辑一等公民实现事件流。事件流的整体以及每个独立步骤中的逻辑,是所涉及的上下文中的领域逻辑的组成部分。
  • 为长期运行流处理状态。

在 Bücker 看来,状态处理是实现中最具挑战的事情。其实现方法包括:

  • Actor 模型,其中 actor 持有本地状态,模型可使用 Akka 等。一个 actor 用于实现过程管理器,对整体流负责。这一方法在 Vaughn Vernon 所著的《 Reactive Messaging Patterns with the Actor Model 》一书中也做了介绍。
  • 在实体中保持过程流的状态。就 Rücker 的经验而言,这是一种十分常见的实现方法。
  • 程单模式(Routing Slip)。其中所需的所有步骤一并通过消息发生,避免了集中存储过程状态的需要。
  • 定义了各个步骤的状态机。Rücker 指出,对过程状态的可见性是使用状态机一个优点。

在与实现长期运行过程的客户的工作经验中,Rücker 接触到了一些常犯的错误,其中包括使用无工作流或是自研发的引擎,以及使用无代码套件。为此,他推荐使用一些可嵌入到用户代码中的开源轻量级框架库,Camunda 是其中之一。他还建议仅去实现那些通用的用例,剔除一些十分异常的用例。这可能会关照到99% 的用例,剩余的留给人工干预。这一做法也得到了 Greg Young 的推荐。

Rücker 在 GitHub 上发布了一个例子。该例子使用在演讲中给出的方法实现了一个基本的订单系统。

明年的DDD eXchange 大会计划于2018 年4 月26 日至27 日期间在伦敦召开。

查看英文原文: Process Managers in Event-Based Systems

2017-08-01 19:001985
用户头像

发布了 227 篇内容, 共 83.2 次阅读, 收获喜欢 28 次。

关注

评论

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

IDC报告 | 飞渡科技位列数字孪生平台市场份额第一,以20.7%的高占比领跑行业市场

新消费日报

贝锐蒲公英智能选路:跨地区远程访问更快、更稳、更可靠

贝锐

远程办公 SD-WAN 智能选路 异地组网

一次 sysbench 长稳测试过程中连接中断的问题分析排查

TiDB 社区干货传送门

故障排查/诊断

一次 sysbench 长稳测试过程中锁丢失导致事务提交失败的问题分析排查

TiDB 社区干货传送门

故障排查/诊断

基于开源IM即时通讯框架MobileIMSDK:RainbowChat v11.6版已发布

JackJiang

即时通讯;IM;网络编程

硅纪元视角 | 亚马逊AI芯片挑战英伟达,承诺最高50%成本节省

硅纪元

亚马逊 gpt4o

数业智能心大陆:定制你的专属心理健康方案

心大陆多智能体

智能体 AI大模型 心理健康 数字心理

ChatGPT4o 如何速写论文

蓉蓉

gpt4o

sync_diff_inspector 表结构比较功能探索

TiDB 社区干货传送门

迁移

Web网页端IM产品RainbowChat-Web的v7.1版已发布

JackJiang

即时通讯 即时通讯;IM;网络编程

【故障处理】 统计信息收集失败, enconding failed

TiDB 社区干货传送门

故障排查/诊断

Dashboard 热力图显示不准? 如何定位热点相关sql ?

TiDB 社区干货传送门

故障排查/诊断

TikTok批量养号方法

Ogcloud

云手机 海外云手机 tiktok云手机 tiktok运营 TikTok养号

飞渡科技数字孪生平台赋能千行百业——飞渡科技2024产品发布会成功举办

新消费日报

写一篇最近用DM的总结

TiDB 社区干货传送门

迁移

从"小白"到"大白":我的TiDB一周年成长记录

TiDB 社区干货传送门

为什么企业需要IT外包服务

Ogcloud

IT外包 IT外包公司 IT外包服务 IT外包企业

探讨大模型前沿技术与商业化落地 |【奇绩潜空间】第3季开始报名

奇绩创坛

人工智能 机器学习 深度学习 大模型 视频生成

一文了解 PingCAP Clinic 诊断服务

TiDB 社区干货传送门

故障排查/诊断

硅纪元AI应用推荐 | 豆包整容成了浏览器,让你的电脑秒变AI PC

硅纪元

豆包

淘宝API接口测试全攻略

Noah

淘宝商品详情API详解:深度解码商品规格参数

代码忍者

焱融科技发布国产化全闪新品 F8000XC

焱融科技

【第八届 TiDB Hackathon】AI 创新应用 TiDB 黑客马拉松正式开启,一起来用 TiDB 构建未来的 AI 创新应用, 瓜分超 ¥210,000 奖金池!

TiDB 社区干货传送门

在港发行稳定币,京东为何跟加密市场做起了“兄弟”?

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

智谱AI再放“大招”,30秒将任意文字生成视频

Alter

和鲸全力支持!人工智能赋课,吉林大学这样建设

ModelWhale

人工智能 教学 吉林大学

基于事件系统中的过程管理器_语言 & 开发_Jan Stenberg_InfoQ精选文章