智能体刷屏的背后,是 AI 应用拐点的来临?AICon 北京站议程重磅公布,50+ 硬核分享不容错过 了解详情
写点什么

使用 Reservation 模式实现 SOA 事务

  • 2009-09-19
  • 本文字数:1427 字

    阅读完需:约 5 分钟

关于 SOA 的事务处理的讨论已经持续若干年了。尽管为解决这个问题人们已经提出了好几个标准,如 BTP WS-BusinessActivity , WS-AtomicTransaction , WS-Coordination 等,但仍然没有被人们广泛认可的方案。在 Arnon Rotem-Gal-Oz 的这篇新博文中,他为大家呈现了他即将出版的《Practical SOA》中的一段书摘,也就是Reservation 模式。

Arnon 对 SOA 事务的相关问题的描述如下:

……在分布式的世界,不管是 SOA 还是其他,采用短期事务想法基本不是一个好想法……人们使用 Saga 模式的一个主要原因是基于不推荐使用跨服务的事务这个事实……而使用 Saga 模式的一个明显缺点就是无法执行回滚……再者,由于交互通常是长运行的,它可能失败,也可能被取消,Saga 提供了补偿(Compensation)的概念。补偿的概念很酷:既然不能回滚,那我们就把交互的操作倒退回来,从而实现伪回滚……然而,补偿也存在很多问题,这些问题来自于以下事实:它和 ACID 事务不一样,Saga 活动所作的修改不是孤立的。缺乏孤立性意味着服务所操作的数据可能已经被其他 Saga 活动所修改 ,使得补偿不可能实现。

Arnon 还提到了补偿和 Saga 模式本身的另一限制,它需要外部协调者的参与,这就可能给外部协调者引入一些不必要的服务

Arnon 在他的博文中提出了的模式是为了回答以下问题:

我们如何在保留服务的原子性和一致性的同时,以松耦合的方式有效地为服务提供一层保证?

答案是 Reservation 模式,它需要引入一个内部服务组件来处理预订(reservation),该组件的职能包括以下方面:

  • 预订——当一个被视为“预订”的消息到达时,执行预订。比如,当一个订单到达时,除了对订单执行某些持久性存储(如,数据库)的更新之外,还要为订单确认(译注:即定单处理结束)设定一个计时器或到期时间 ,也可以设置一个标记,表示订单尚未完成。
  • 验证——确保在流程结束时预订仍然是有效的。在上文提到的订单场景中,要确保分配给该订单的物品未被分配给其他订单。
  • 到期——当条件改变时将预订标记为失效。比如,如果一个 VIP 客户需要该订单所预订的物品,系统可以把相应物品分配给该 VIP。同时也应该要让该预订失效,使得该订单最后提取物品时系统知道物品去了哪里。也可以将到期设置成定时的,比如,“我们将为你的预订保留到明天中午”。

这种模式通过实现一个两道门协议(某种程度上类似于两阶段锁),从而让资源分发流程的管理以顺序的方式进行。在通过第一道门时,发起者通知所有其他参与者预留自己,如果发起者从所有参与的服务处(在超时范围内)得到的回答是 OK,那么它将通过第二道门,并确认对所有参与者的预订。

不同于其他 SOA 模式,Reservation 模式是一个业务模式,而不是一种技术模式。也就是说不存在一个直接的 1 对 1 的技术去实现它,Arnon 描述了基于 EJB3.0 的一种实现。

由于事务处理是当今软件技术实现可靠和可管理的分布式计算的基础,被广泛用于交通、金融、保险、电信和制造等行业的大企业中,它们依赖事务处理对资金转账、支付处理、电子通讯、库存控制以及其他方面的支持, 在 SOA 中实现某种形式的事务显得极为重要。而 Arnon 的博文中定义的 Reservation 就是 SOA 架构师的工具箱中的一个重要工具。

但是这里有一个问题:服务该互相调用吗?如果有这么一个编排其他服务的流程呢?在后面的情况中,流程是有效的协调者,如果被调用的服务接口既支持动作(action)执行又支持补偿,那么 Saga 模式可能是一个更为简单的方案。

查看英文原文: SOA Transactions Using the Reservations Pattern

2009-09-19 06:012654
用户头像

发布了 184 篇内容, 共 84.5 次阅读, 收获喜欢 8 次。

关注

评论

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

2023年度总结——我是如何利用AI高效完成学习与工作任务的

小王撤了

AI

融合事项会计与用友BIP商旅及费控:提升企业运营效率和透明度

用友BIP

商旅费控 事项会计

C 语言入门:如何编写 Hello World

小万哥

c 编程 程序员 后端 软件开发

Azure AI Studio使用体验——企业级AI工厂

Bruce Talk

AI Azure AI Studio Azure AI

项目经验分享:机器学习在智能风控中的应用

YoLo

AI

Go未来演进:基于共同目标和数据驱动的决策

Tony Bai

golang 编程语言 Go 语言 gopher

如何写好一份技术方案评审文档

童子龙

技术方案 基础架构

【写作训练营打卡|05】 什么是 Web3?

写作 web3

极狐GitLab CI/CD 变量黑魔法之预定义变量

极狐GitLab

DevOps 镜像 CI/CD pipeline

app开发

Geek_8da502

Databend 开源周报第 123 期

Databend

如何找到数据资产入表的破局点,听听用友怎么说

用友BIP

数据资产入表

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

福大大架构师每日一题

福大大架构师每日一题

强大的录屏截图标注工具:CleanShot X激活最新版

胖墩儿不胖y

Mac软件 屏幕截图工具 屏幕录屏软件

2023年终盘点系列| 用友BIP持续迭代,进化发展

用友BIP

落地设备备件按单采购,助力光伏单晶行业数智化管理

用友BIP

光伏单晶行业 数智化管理

火山引擎边缘计算用硬核助力赛事直播

火山引擎边缘云

边缘计算 直播 边缘云 边缘云原生

写代码还是写标书

escray

技术人写作 21 天技术人写作行动营 21 天

Zookeeper数据存储源码剖析

极客罗杰

人人都能用的AI编程助手 CodeGeeX

凌览

AI 前端 后端 AIGC

用友发布数智化转型成熟度评价体系,加速国有企业转型

用友BIP

企业数智化

从React Hooks看React的本质

canonical

前端 低代码 React

世界第一!蚂蚁图计算TuGraph打破LDBC SNB-BI世界纪录

TuGraphAnalytics

浅谈接口自动化测试

QE_LAB

接口自动化测试

.h 头文件 | AI工程化部署

AIWeker

c AI工程化部署

聊点写标题那点破事儿

6点无痛早起学习的和尚

写作 21 天技术人写作行动营 标题

Mint Blockchain 2024 年发展路线图和开发计划

NFT Research

区块链 NFT Layer 2

5.5V 至 36V 输入 3A 500kHz 降压转换器

芯动大师

简单之道

Tony Bai

golang 设计 Google Rob Pike Go 语言

30 | 图的表示:如何存储微博、微信等社交网络中的好友关系

鲁米

使用Reservation模式实现SOA事务_SOA_Boris Lublinsky_InfoQ精选文章