报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

业务流程、长周期服务和微服务

  • 2018-07-26
  • 本文字数:1752 字

    阅读完需:约 6 分钟

在近期于伦敦 Skills Matter 举行的 DDD eXchange 2018 会议上,Martin Schimak 认为在最近几年间,领域事件引发了越来越多的讨论,但是我们对命令也应如此,在这次会议上他讨论了微服务领域的事件、命令以及长周期的服务,以及流程管理器和类似的工具如何有助于运行核心的业务逻辑。

Schimak 是奥地利的一名独立咨询顾问,他认为,事件最好的一点在于,它们代表了已经发生过的事情。我们正在处理越来越多的分布式系统,通过来自服务本身的保证能够让我们更加相信最终一致性。事件还有助于我们解耦服务,并且能够回过头去看过去发生了什么。

事件的优势是事件驱动架构越来越流行的原因之一,有时候,设计只依赖事件就能实现集成服务。有时这种简化是合理的,但是 Schimak 指出,这也可能会带来一些危险。以简单订单处理为例,在处理过程中,只包含 _order placed_、payment received、_goods fetched_ 和 _goods shipped_ 事件,它们会被支付、存储和运输服务所使用。一个简单的变更,比如在跟客户收费之前就将货物提取出来,就会改变消息流,从而要求所有涉及到的服务都要进行变更,对于 Schimak 来说,服务之间的这种耦合是一个次优的方案。

因为事件仅仅是已发生的事实,它们本身并不会触发任何的操作。在监听事件的时候,我们需要一定形式的策略,该策略能够决定当特定的事件接收到的时候,应该发生些什么。在纯粹的基于事件的系统中,这种策略始终要位于事件消费服务之中。在基于命令的方式中,这个策略可以位于事件发布服务中,但是 Schimak 认为,有时候这两个服务都不是合适的选择。对他来讲,第三种方案是新增一个中介者(mediator),它监听特定的事件并决定后续的步骤。

以上面的订单服务为例,这个服务可能会监听相关的事件并发送命令,因此当客户下单时协调流程并完成该订单。在样例中发生这样的变化时,不仅订单服务需要变更。Schimak 指出,在这个过程中运行的逻辑通常是属于业务核心领域中的逻辑。

对 Schimak 而言,命令是一些意图,针对的是未来要发生的事情,他定义了命令执行的两种类型:

  • 原子性事务执行,一般的意图是变更一个模型;例如,下单命令会创建一个订单并发布下单事件;
  • 复合的、长周期执行,其意图是更加业务级别的结果,可能需要多个步骤才能实现。样例可以是相同的下单命令,但是这里的最终结果是完成订单或取消订单的事件。

在请求支付的场景中,我们应该努力实现有价值的业务结果。支付服务可能会发布 payment received 或 payment cancelled 事件。在 Schimak 的经验中,我们往往会采取相反的措施,暴露一些临时的问题,比如信用卡收费失败,并委托客户端来对其进行处理。这意味着我们要强迫客户端来处理策略方面的问题,而这些问题显然是支付相关的——可能稍后进行重试,有可能使用新的信用卡数据。如果客户端是订单服务的话,那么它不仅要处理订单,还要处理支付,这样就将支付领域的知识扩展到了支付服务之外。这同时也会增加订单服务的规模和复杂性。

将我们的问题委托给客户端并强迫它们处理各种问题,那么它们就变成了上帝服务。

相反,我们应该将支付视为长周期的服务,它要处理支付相关的所有内部问题,并且只发布最终结果相关的事件,即 payment received 或 payment cancelled。Schimak 强调,这并不是要创建一个中心化的协调器(coordinator)来处理 整个业务,它指的是更好的 API 设计,保护不同的限界上下文。

在使用长周期服务时,一个通用的工具是 Process Manager 。流程管理的常见需求是处理时间和超时、重试以及流程失败时的补偿。我们可以自己实现所有这些功能,但 Schimak 更喜欢使用 Axon 消息和 Saga 管理或 Lagom 这样的框架。他还建议使用某种形式的业务流程执行引擎,但他强调工具必须是轻量级的,并且可以在单个服务中使用。开源的过程引擎框架包括 Activiti Camunda Zeebee (也来自 Camunda)。在 serverless 领域, AWS 创建了 Step Functions ,其他云供应商也在朝着这个方向发展。

Schimak 个人在长周期服务和业务处理引擎方面的经验包括多年在Zalando 的订单处理流程中使用Camunda。他和联合来自Camunda 的 Bernd Rücker 在 InfoQ 上撰写了两篇文章:事件、流程和长期运行的服务:工作流自动化的现代解决方案洞悉流程!微服务与事件协同

查看英文原文: Business Processes, Long-Running Services and Microservices

2018-07-26 08:162773

评论

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

WebSocket 连接保持方法详解

Apifox

程序员 前端 后端 websocket 长连接

Solidity案例详解(四)投票智能合约

BSN研习社

区块链 Solidity

英特尔x爱立信:以开放式移动网络加速未来关键领域数字化转型

E科讯

文心一言变身虚拟患者,助力医学生轻松开启「实践模式」

飞桨PaddlePaddle

百度 paddle 百度飞桨 开发者说 文心一言

运维一款月变更70+次的服务,是一种什么体验?

华为云开发者联盟

开发 华为云 华为云开发者联盟

App应用程序(概念、开发步骤、技术要点介绍)

天津汇柏科技有限公司

定制软件开发 app定制开发 软件开发定制

易点天下旗下出海应用数据分析与增长模型平台即将发布,一大波内测福利正在袭来!

新消费日报

Module2作业

大鹏

Axure RP 9 与其他原型设计工具的比较:为何它是您的最佳选择?

Rose

原型设计 Axure RP 9汉化 Axure RP 9授权码

探索AIGC在腾讯自选股应用

ninetyhe

腾讯 AI 大模型 AIGC

测试管理进阶 | 快速掌握高效沟通的汇报技巧

测吧(北京)科技有限公司

测试

阿里云大降价后,与主流云厂商的价格对比,你选哪家?

NineData

数据库 阿里云 服务器 云厂商 阿里云降价

王牌驼:带领4亿中国中老年群体领跑「精准营养」新时代

科技热闻

文心一言 VS 讯飞星火 VS chatgpt (205)-- 算法导论15.4 1题

福大大架构师每日一题

福大大架构师每日一题

手把手带你快速上手香橙派AIpro

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟 AI开发板

哪里有office2016安装包?office2016下载含激活工具

Rose

office办公套件 office2016

Java实战1

thinkers

线程池、Lambda、Java实战

把简单留给用户,把复杂交给 AI

Kyligence

大数据 AI 数据治理 指标平台

Parallels Desktop 19 虚拟机如何安装?详细PD19图文安装教程 含激活版Windows镜像

Rose

Win11系统下载 Parallels Desktop 19 pd 19 虚拟机安装

VMware Workstation (VM电脑虚拟机)激活精简版

Rose

VMware Fusion破解版下载 虚拟机安装 VM虚拟机密钥

软件测试管理进阶,快速掌握高效沟通的汇报技巧

测试人

软件测试 自动化测试 测试开发 测试管理

资深项目管理者教你快速掌握高效沟通的汇报技巧

霍格沃兹测试开发学社

有道QAnything背后的故事---关于RAG的一点经验分享

有道技术团队

语言 & 开发 #开源

马帮ERP与ETLCloud快速同步

RestCloud

数据同步 ETL 数据集成 ERP

二叉搜索树(BST)

贺公子之数据科学与艺术

#算法

C4D 2024.3.2最新破解下载 c4d2024 mac中文版新功能介绍

Rose

3d建模 Cinema 4D 2024 c4d2024

photoshop 2021 对显卡的要求 ps2021中文破解版安装包下载

Rose

ps2021破解版 Photoshop 2021 Photoshop 2021要求

MestReNova 中文版:解析和解释核磁共振(NMR)和质谱(MS)数据

Rose

MestReNova软件 MestReNova14破解版 核磁共振 医学研究

软件测试学习笔记丨 k8s环境部署实战

测试人

软件测试 测试开发

常用的Linux命令;Linux常用命令用法及实现方式

小魏写代码

业务流程、长周期服务和微服务_语言 & 开发_Jan Stenberg_InfoQ精选文章