「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

开发者应该书写他们自己的事务协调逻辑吗?

2008 年 1 月 16 日

Mark Little 是 Red Hat 的 JBoss 部门的标准主管和开发经理。他把大部分的职业时间都投入到了分布式计算和分布式事务协议上。他是好几个工作组的成员,这些工作组试图为Web 服务定义一个事务协议,比如BTP,WS-CAF 和WS-TX。

在十二月,Mark 发表了博文“大规模分布式事务”。他解释说,由于他过去从事复制(replication)协议方面的工作,他得出一个结论:为了获得性能和可用性,需要牺牲一致性。这与Werner Vogels 在 QCon 伦敦 2007 大会上的发言一致。

Mark 声称:

对事务来说,有一点也是一样的(译注:即和服务实现一样,事物实现也是各异的):事实上,如果你想将不同的服务和域粘合在一起,在 Web 服务中这是必须的。在服务边界的背后,它们中的一部分可能并不是使用相同的事务实现。

他指出,其他人比如 Pat Helland 也考虑过放宽事务能力。Mark 用海森堡测不准原理(Heisenberg’s Uncertainty Principle)来阐明他的观点:

你可以知道所有的参与者的任一状态,但不知道何时到达;反之亦然。

他还给我们指出 WS-BP 规范是 WS-CAF(组合应用框架)规范集的一部分:

业务流程事务模型和传统的 2PC 事务模型的一个关键差异是它假定成功。也就是说 BP 模型是乐观,它假设失败的案例是少数,在需要情况下可以被处理或者离线解决,或者通过重试(replay)/ 空操作(void)/ 补偿(compensation),但不会始终是自动的,经常需要人工交互。

这个方法在 Pat用于阐明他的论文的例子中得到回应:

考虑一个买房者以及他和第三方担保(escrow)公司的关系。购买者和第三方担保公司达成一个信任协议。卖家、抵押公司、以及事务中涉及的所有其他方也是如此。 当你签了一份购买一套房子的文件,你并不知道交易的结果。你承认,除非第三方担保公司倒闭你才会是不可靠的。控制决策的唯一方是第三方担保公司。这是一个两方关系的星型(hub-and-spoke)集合,被用于一大群当事人在不使用分布式事务下取得一致意见。

Pat 补充:

当你考虑几乎无限规模的情形时,再去回想两方关系就很有意思了。这可以通过从两方试探 / 取消 / 确认 (就像传统的工作流) 逐步进行构造。

Greg Pavlik,也是许多 Web 服务事务规范的合作者,开始思考不同的方面

应用系统可能包含协调者的角色,在某种程度上它变得越来越不清晰,为什么协议的必要性要远大于业务逻辑本身?

这里有些需要被应用开发人员理解的模式。它们可能被一些框架支持。但是有一点很明显:事务管理不会在上下文中扮演主要角色。

Mark 答复,是的,

[他不] 认为分布式 ACID 事务(译注:原子性 Atomicity、一致性 Consistency、隔离性 Isolation、持久性 Durability)在大规模系统上有很大的前途。

但是,

仍然有一个可靠的协调者,它控制状态转换、在故障和恢复的时候“做正确的事情”。

去年夏天,Juval Löwy ——IDesign.net 的首席架构师——在一个播客(podcast)里暗示了相似的结论

当几个软件代理参与执行一个公共工作单元的时候,重新发明专用事务协议去完成状态调整不是一个好主意。

查看英文原文 Should developers write their own transaction coordination logic? - - - - - -

译者简介:王志雄,长期从事软件开发工作,项目集中在 EAM 和设备点检管理领域。2004 年转入 JAVA 领域,曾经在项目中使用过 Hibernate、Struts、Spring 等。关心软件技术和相关工具的动态,将其中成熟的技术和工具应用到实际的项目之中。关心开源软件的发展动态以及软件过程和敏捷开发的实践探索。

2008 年 1 月 16 日 03:14387

评论

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

java-注解,最新Java笔试题分享

JVM调优资料

Java 程序员 后端

为移动通信争一先:Massive MIMO的进化三部曲

脑极体

安卓对RISC-V支持的操作实战

未来开发者

安卓 risc-v 嵌入式开发

Java 线程池原理分析,一举拿下腾讯美团滴滴offer

JVM调优资料

Java 程序员 后端

Java中高级核心知识全面解析,Java入门教程免费视频

JVM调优资料

Java 程序员 后端

uni-app技术分享|开源demo视频呼叫arcall uni-app端技术实现

anyRTC开发者

uni-app 音视频 WebRTC 移动开发 视频通话

FunTester框架Redis压测预备

FunTester

redis 性能测试 测试框架 FunTester 测试发开

华为云PB级数据库GaussDB(for Redis)揭秘第一期:Redis与存算分离

华为云数据库小助手

redis GaussDB GaussDB ( for Redis ) 华为云数据库

2021最新38道Spring大厂面试题,你碰到过哪道,电商秒杀Java面试题

欢喜学安卓

Java 程序员 后端

Java中高级核心知识全面解析(1),Java开发实战

JVM调优资料

Java 程序员 后端

CMake

Changing Lin

9月日更

一,二,三,基层治理数字化「三步走」

浪潮云

云计算

5年Java经验字节社招:半月3次面试,Java资料

欢喜学安卓

Java 程序员 后端

低代码与专业代码有什么区别?

低代码小观

程序员 开发者 低代码 开发工具 低代码开发平台

Java内存区域总结(堆

程序猿一枚

Java 程序员

四张图带你搞定原型和原型链

法医

JavaScript 前端 9月日更

2021-07-26 日期时间类,万字总结

欢喜学安卓

Java 程序员 后端

Java 小记 — RabbitMQ 的实践与思考,Redis灵魂14问

JVM调优资料

Java 程序员 后端

5分钟掌握JVM常用选项及相关知识,工作面试够用了,牛客网Java开发高频面试题

欢喜学安卓

Java 程序员 后端

Java8-Stream:2万字20个实例,价值2000元的Java学习资源泄露

JVM调优资料

Java 程序员 后端

安卓支持RISC-V架构的技术剖析

未来开发者

IoT 安卓 risc-v 嵌入式开发

JAVA的基本程序设计结构

IT蜗壳-Tango

9月日更

2021 Java开发 最全笔记 建议收藏!

欢喜学安卓

Java 程序员 后端

2021年1月8号,linux网络编程面试题

欢喜学安卓

Java 程序员 后端

Java中高级核心知识全面解析(2),腾讯Java面试

JVM调优资料

Java 程序员 后端

Java中高级核心知识全面解析(3),Java编程入门到精通

JVM调优资料

Java 程序员 后端

Java反射的简单入门

程序猿一枚

Java 程序员 后端

NFT盲盒玩法详解,盲盒系统开发

合肥艾数199四②43⑧797

# 技术栈知识点巩固,开发多年HashMap原理不知道

欢喜学安卓

Java 程序员 后端

1年半经验,21条MySQL性能调优经验

欢喜学安卓

Java 程序员 后端

Java反射之Method的invoke方法实现,全栈系统化的学习路线

程序猿一枚

Java 程序员 后端

开发者应该书写他们自己的事务协调逻辑吗?-InfoQ