QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

关注

评论

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

AI 优化学习路径:个性化推荐与辅助学习

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

测试

测试流程智能化:AI 技术赋能测试领域

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

测试

QCN9274 QCN6274 IPQ9574|What Does Wi-Fi 7 Actually Bring?

wallyslilly

qcn9274 qcn6274 ipq9574

大语言模型支持:开发个性化 AI 应用

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

测试

开发竞猜比分与专家分析功能:如何为体育直播平台注入新活力

软件开发-梦幻运营部

【论文解读】transformer小目标检测综述

合合技术团队

目标检测 Transformer 深度学习、

区块链游戏解说:什么是 Planet IX

Footprint Analytics

web3

京东商品优惠券数据采集

tbapi

京东 京东API接口 京东商品优惠券数据 京东商品详情数据

龙蜥系统运维联盟:Kindling-OriginX 如何集成 DeepFlow 的数据增强网络故障的解释力

OpenAnolis小助手

deepflow 开源 系统运维 ebpf 龙蜥社区

今日必读的9篇大模型论文

学术头条

人工智能 论文 大模型

EMQX Enterprise 5.4 发布:OpenTelemetry 分布式追踪、OCPP 网关、Confluent 集成支持

EMQ映云科技

mqtt emqx mqtt broker

2023 re:Invent 用 PartyRock 10 分钟构建你的 AI 应用

亚马逊云科技 (Amazon Web Services)

亚马逊云科技 生成式人工智能 Amazon CodeWhisperer Amazon Bedrock Amazon Q

马斯克称首位受试者可凭思维操控鼠标;字节低调推出视频模型丨 RTE 开发者日报 Vol.148

声网

盘一盘制造业最受欢迎的9个IT岗位

伤感汤姆布利柏

揭秘 LLMs 时代向量数据库的 3 大实用场景

Zilliz

Milvus 向量数据库 LLM zillizcloud rag

解锁Mysql中的JSON数据类型,怎一个爽字了得

不在线第一只蜗牛

json MySQL 数据库 开发语言

OpenAI的Sora亮相:AI视频生成的新用场

算AI

人工智能 创业 创新 sora

inBuilder低代码平台新特性推荐-第十六期

inBuilder低代码平台

开源 低代码

面试官:如何实现多级缓存?

不在线第一只蜗牛

缓存 程序员 面试

拼多多商品优惠券数据采集

tbapi

拼多多 拼多多商品详情接口 拼多多商品数据采集

听 GPT 讲 client-go 源代码 (10)

fliter

OpenTiny Vue 组件库适配微前端可能遇到的4个问题

OpenTiny社区

开源 Vue 前端 微前端 组件库

k8s-权限管理

EquatorCoco

Kubernetes 云原生 k8s

自动化测试创新:AI 驱动的测试策略变革

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

测试

听 GPT 讲 client-go 源代码 (9)

fliter

CORS就是跨域吗?

EquatorCoco

CORS web开发 跨域

你好,iLogtail 2.0!

阿里巴巴云原生

阿里云 云原生 iLogtail

接手外包团队开发的微服务项目,人麻了!

伤感汤姆布利柏

企业定制化 AI 解决方案:满足企业需求的智能服务

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

测试

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