HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

关注

评论

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

第二存储解决方案白皮书 | 专为非生产数据而设计的存储方案

QingStor分布式存储

云原生 分布式存储

联想智慧服务荣获第17届“金耳唛杯”年度总冠军

科技大数据

anyRTC从服务到产品全链路服务保障升级

anyRTC开发者

音视频 直播 实时通信 语音通话 视频通话

打破数据壁垒,北鲲云超算混合云模式激活人工智能数据价值

北鲲云

【引航计划】优质内容合集名单公布

InfoQ写作社区官方

引航计划 热门活动

科技热点周刊|微软发布 Web 版 VSCode、 删除 .NET 6 热重载引发不满、IBM 发布开源混合云介绍指南

青云技术社区

云计算 云原生 kubenetes CockroachDB

资讯|WebRTC M94 更新

网易云信

大前端 chrom

模块一作业

hpl

架构实战营 - 第三期 - 模块一作业

lucian

架构实战营

如何在新消费时代提升开店数量和营业额

石云升

学习笔记 10月月更

你正在选择实时互动云服务?以下是关于安全合规的七个建议

声网

人工智能 数据安全

使用 Spring Boot 和 @WebMvcTest 测试 MVC Web Controller

码语者

Java Spring Boot test

打破 Serverless 落地边界,阿里云 SAE 发布 5 大新特性

阿里巴巴云原生

阿里云 Serverless 云原生 Serverless Kubernetes

产学互为表里,携手方见大道:华为云AI院长峰会的价值思考

脑极体

无人驾驶与环卫革命

脑极体

快手技术嘉年华 | 与你漫游技术星辰大海

快手中学

技术 校招 快手

架构训练营模块1作业

Puciu

架构实战营

官方线索 | 1024新华三服务器性能调优挑战赛

穿过生命散发芬芳

1024我在现场

自定义ViewGroup的触摸反馈

Changing Lin

10月月更

腾讯数字生态大会【TechoDay技术回响日】

腾讯云数据库

精细运营|营销获客自动化‘攻心’

海比研究院

CRM

通过题目来讲一讲指令系统相关知识 1 | 计算机组成与系统结构专题

Regan Yue

计算机组成原理 10月月更

优酷鸿蒙开发实践|多屏互动开发实践

阿里巴巴终端技术

ios android 鸿蒙 优酷 客户端

模块2总结

Asha

架构实战营

这才是责任链模式的优雅使用方式

Tom弹架构

Java 架构 设计模式

网络安全之渗透实战学习

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

微信业务+学生毕设架构设计

慧慧Alina酱

空调可视化运营中心,赋能精细化运营管理

ThingJS数字孪生引擎

模块2

Asha

浪潮云说丨构建全域业务联动枢纽,挖掘数据要素创新价值

云计算

学生管理系统架构和微信业务架构

Geek_nlp小咖

微信 架构 微信业务架构 学生管理系统架构

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