如何将AI能力与大数据技术结合,助力数据分析治理等工作的效率大幅提升,优化大数据引擎的性能及成本? 了解详情
写点什么

REST 和分布式事务

  • 2009-06-17
  • 本文字数:1795 字

    阅读完需:约 6 分钟

对于 REST 和其他方法(尤其是Web 服务)孰优孰劣的讨论已持续了很长时间。简言之,在基于Web 的集成中使用REST 的优势何在。讨论继续进行着,但是一些人开始把讨论转移到在 REST(或 REST/HTTP)是否丢失了其他方法中存在一些理应具备的能力。分布式事务是其中之一,最近,一个 REST 讨论的邮件列表正来来回回地进行着,这个讨论是由 Bill Burke 就一个基于 RESTeasy 的实现向人们征求意见引发的。

相当简洁的 API。我想看到 Atom 链接是否可以取代已发布的 URI 模式,那样我们就可以限制系 统所暴露的 URI 的数量,使得它从整体上更灵活。 我还在想我们是否能标准化链接关系(Link Relationships)而不是数据格式,这样可能就能使 DTX 标准从必须一并定义数据格式的限制中解放出来。

这篇发文引发了一场围绕着 ACID 事务和基于补偿的事务之间的选择的踊跃讨论, Bob Haugen(ex-Choreology and OASIS BTP) 指出:

基本步骤:1:第一步,所有的参与者临时更新资源(不是通过状态,就是通过独立的临时资源)2 :一旦提交,所有的参与者更新资源的最终状态(或者创建“最终资源”)3:一旦放弃或取消,所有参与者删除临时资源,或者将临时资源标记为“已取消”,或者创建新的“已取消资源”。 这种模式还允许选择性地提交或取消,比如在竞价流程中使用。

似乎达成一致的是,基于和 Web 服务相同的原因,如果需要事务,那么扩展事务(补偿是一个具体的例子)将是可能的发展方向。 Mike Amundsen 补充道:

我更倾向于 Saga 模型,因为它是一个“乐观的”模式,而且我发现它在 HTTP 上建模更简单。从实用性来说,我可以不需要使用 saga 的细节(实现“向前补偿”或“向后补偿”)就可以为最初的交互建模。之后(有时是几周之后或几个月之后)在实施时,我可以在不影响客户端或代理的情况下添加补偿任务。

后来 Roy Fielding 也加入了讨论,他在几年前曾经说过……

这个话题多次出现在 webdav 和 http-wg 列表上。事务是一个资源,但是它和被请求资源之间的关系可以通过一个消息头字段来定义,该消息头把每一次请求定义成层级事务之中的顺序资源。换言之,服务器开始一个事务,每一次请求,将(事务的)URI 作为包含着请求号的消息头的字段传送给客户端,最后通过向事务的 URI 发送一个最终请求来取消或提交事务。我在 still-vapor waka 协议中基本上是这么做的。

然而时过境迁,Roy 的观点也有所变化。

如果你需要分布式事务的协议,那么你怎么可以说你的架构是基于 REST 的呢?简单来说,我看不到你如何能够从一种情形(在客户端使用 RESTful 应用状态,使用超媒体来决定状态间的过渡)到另一种情形(需要事务语言的分布式约定,而客户端如何告诉服务器来管理(客户端)的资源)。你正在考虑的问题很可能是多服务器之间的 CRUD 操作,而每次操作都是基于 RESTful 架构的。当所有操作完成时,客户端需要发起最后的请求来取消或确认(之前做的)更改,可能是与一个 TM 式(TM-Style)的管理资源交互,通知所有的服务提交所做的更新,从而使这组资源进入一个更持久或者公开的状态,就像登台服务器(staging server,即负责整个处理中某阶段工作的服务器)被用来准备要发布的内容。所有这些操作加起来可能等同于一个 ACID 事务。而它们跟 REST 客户端没有任何关系。就 REST 客户端而言,它在一个时刻只和一个资源交互,尽管有时候这些交互可能是重叠的或者异步的。除了依据资源的语义而在后台实现的约定机制之外(存在于独立的架构中,这里我们不关心它),REST 并无“事务协议”;除了为客户端提供(任意点上)的多选择的展现之外,REST 并不包含提交协议。而且,客户端事务协议的约定也没有必要,因为客户端只能在服务端提供的选择范围内进行选择。

这之后还有很多追踪邮件,比如扩展事务协议(不是 ACID)可以以 RESTful 方式用在何处,以及已经使用的何处的跟帖。但是,Bill Burke 插话说,讨论并已偏离了最初的主题:

我最初发帖的目的是,在客户端资源层以及资源 /TM 交互层,如何通过定义以及标准化若干链接关系来大大简化工作。

这似乎得到了一些邮件列表里的人的响应。事实上,后来 Alexandros Marinos 把大家引到一个基于 ACID 的协议,他和他的同事们正在实现这个协议。讨论依然继续着,但对于 REST 世界是否有合适的(扩展)事务,似乎并没有明确的答案。然而,几乎可以定论的是很多人认为分布式事务是需要的,基于某个或某些原因。

查看英文原文: REST and transactions?

2009-06-17 21:484817
用户头像

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

关注

评论

发布
暂无评论
  • REST 的缺点是什么?

    REST架构师邮件列表中最近的一篇帖子引起了Ganesh Prasad的兴趣,促使他总结了自己看到的REST(基于HTTP)在更动态的点对点环境中的若干问题,并提出了解决办法。他建议从Web Services处学习经验。他还提到自己一直致力于提出的Internet Draft规约。

  • 解答有关 REST 的十点疑惑

    在了解过REST之后,你肯定很想知道这个概念在介绍性的、“Hello, World”级场景以外能派上多大用场。本文,Stefan Tilkov解答了人们——尤其是那些深谙基于SOAP/WSDL的Web服务架构手法的人——开始研究REST时容易产生的关于REST的十点疑惑。

  • 扩展事务简史

    ACID 事务对于长时间跨度的用例是无能为力的。本文列举了有史以来在 CORBA 和 J2EE 社区中针对扩展事务处理的方法,阐述了 SOA 如何是更自然契合的解决方案,并解释了 WS-TX 和 WS-CAF 为什么可能是最终答案的原因。

  • 深入浅出 REST

    在这篇文章里,Stefan Tilkov对REST(表述性状态转移)——万维网背后的架构——做了一次非常实用的介绍,主要包括可确认的资源、链接和超媒体、标准方法、多重描述以及无状态通信等。

  • 聊聊微服务架构中的事务处理

    当从一个单体系统转向微服务架构时,处理分布式系统带来的复杂性是一个挑战。事务处理是其中的首要核心问题。在一个 Web 应用程序中使用本地事务完成的典型数据库事务,现在是一个复杂的分布式事务问题。在本文中,我们将讨论造成这种情况的原因、可能的解决方案以及使用 MSA 开发安全事务性软件系统的最佳实践。

  • 接口规范,是协作的合约

    对于接口规范,我们要有意识地使用下面的这条原则:接口规范是使用者和实现者之间的合约。

    2019-02-01

  • Apache RocketMQ 事务消息演进之路

    2018-12-18

  • Bill Burke 谈 REST-*、SOA/ROA 和 REST

    InfoQ最近对REST-*.org进行了报道,文章涉及REST-*的公告以及部分社区反应,引起了许多反响。最终,部分反馈也让REST-*.org做出了些改变。Infoq有幸采访了REST-*项目的带头人Bill Burke,以进一步了解详情。

  • RESTful 世界里的 Cool URI

    假想一下,如果要以最小的集成代价实现一个分布在全世界范围的信息空间,用它来共享机器可识别的数据,会怎么样?这是关于REST的吗?不是的。根据 SWEO的说法,这跟语义网有关。那些Cool URI有助于实现这种方式。所以,去看看RESTful SOA URI是不是也很“酷”可能是值得的。

  • API 风格(上):如何设计 RESTful API?

    今天,我们一起来看下如何设计应用的API风格,我会介绍两种常用API风格中的一种,RESTful API。

    2021-06-22

  • OASIS 发布大量新标准

    OASIS宣布了9个新的WS-*架构标准的发布,包括了新版本的WS-AtomicTransaction,WS-ReliableMessaging和WS-Trust。

  • CRUD 不适合 REST 吗?

    Arnon Rotem-Gal-Oz在他的新博文中指出REST不只是一组标准和API,只有遵循REST的架构原则才能享受它的全部好处。

  • REST 比 WS-* 更为接近 Web

    Bill Burke,RESTeasy项目的箭头人物,谈论了为何REST比Web服务更加接近Web的目标并且让你能在正确的层次上去关注互操作性,而不必担心WS-*标准所遭遇的那些问题。

  • 云计算呼唤基于事件的 API

    许多云计算应用,特别是资源管理能够从基于事件的方式中获益良多。William Vambenepe在他的新文章中讨论了定义云事件API的途径。

  • 换个角度解决问题:服务端推送技术

    这一讲介绍的几个服务端推送技术,都从一定程度上解决了 HTTP 传统方式 Pull 的弊端。

    2019-09-16

  • Ruby on Rails:如何分析一个软件的接口?

    看接口要先找到一条功能主线,对项目建立结构性的了解,再沿着主线把相关接口梳理出来,接着要看接口的风格。

    2020-06-05

  • 如何获取(GET)一杯咖啡——星巴克 REST 案例分析

    在这篇文章里,Jim Webber、Savas Parastatidis和Ian Robinson展示了如何在REST式应用里运用超媒体来推动应用的工作流。他们通过Gregor Hohpe的经典案例“星巴克不采用两阶段提交”举例说明了怎样运用Web的思想进行集成。

  • 文章:描述 RESTful 应用程序

    如果服务器不将它自己的名字空间控制在一个固定的资源层次下,客户端及更重要的客户端开发者将如何知道或发现资源的URI呢?在这篇新文章中,Subbu Allamaraju对如何描述RESTful API进行了讨论,文章重点集中于超媒体而不是诸如WADL或WSDL 2.0这类带外(out-of-band)描述格式的使用上。<a href="http://www.infoq.com/cn/articles/subbu-allamaraju-rest" target="_blank">直接点击阅读完整文章</a>。

  • API 开发者永不“REST”

    尽管HTTP是一个应用层(例如,L7)协议,但在API开发方面,HTTP实际上扮演着一个较低层次的传输机制的角色。

  • 服务端的业务架构建议

    服务端业务架构,主要是怎么做一个多租户的 Model 层。

    2019-09-10

发现更多内容

Android开发两年:动脑学院2019android

android 程序员 移动开发

Android开发从零开始,动脑学院视频百度云

android 程序员 移动开发

[TcaplusDB知识库]TcaplusDB机器初始化和上架指南

tcaplus

nosql 腾讯云 运维 TcaplusDB 国产数据库

[TcaplusDB知识库]TcaplusDB之常规单据

tcaplus

数据库 nosql 腾讯云 运维 TcaplusDB

Android工作经验6年,动脑学院vip课程分享

android 程序员 移动开发

[TcaplusDB知识库]腾讯云TcaplusDB合理分配存储空间的秘籍

tcaplus

nosql 腾讯云 运维 TcaplusDB 国产数据库

[TcaplusDB知识库]启动TcaplusDB进程

tcaplus

nosql 腾讯云 运维 TcaplusDB 国产数据库

Android开发人员不得不收集的代码,2021年您应该知道的技术之一

android 程序员 移动开发

[TcaplusDB知识库]腾讯云TcaplusDB的“骨骼”架构介绍

tcaplus

nosql 腾讯云 运维 TcaplusDB 国产数据库

Android工程师跳槽经验分享,资深大牛带你了解源码

android 程序员 移动开发

[TcaplusDB知识库]TcaplusDB事务管理之错误排查

tcaplus

nosql 腾讯云 运维 TcaplusDB 国产数据库

IM开发干货分享:万字长文,详解IM“消息“列表卡顿优化实践

JackJiang

即时通讯 IM

Android开发实战,动脑学院android全套

android 程序员 移动开发

Android已死,享学课堂

android 程序员 移动开发

[TcaplusDB知识库]TcaplusDB之运维单据

tcaplus

nosql 腾讯云 TcaplusDB 国产数据库

Android工程师最容易遇到4个瓶颈是什么,安卓开发入门教程

android 程序员 移动开发

[TcaplusDB知识库]数据库支撑底盘引擎计算层介绍

tcaplus

数据库 nosql 腾讯云 运维 TcaplusDB

[TcaplusDB知识库]如何通过TcaplusDB客户端管理数据库

tcaplus

nosql 腾讯云 运维 TcaplusDB 国产数据库

[TcaplusDB知识库]TcaplusDB运维之日常巡检

tcaplus

nosql 腾讯云 TcaplusDB 国产数据库

[TcaplusDB知识库]TcaplusDB机型管理指南

tcaplus

nosql 腾讯云 运维 TcaplusDB 国产数据库

Android开发全套学习!享学课堂Android架构师课程

android 程序员 移动开发

[TcaplusDB知识库]手动查看TcaplusDB线上运行情况

tcaplus

nosql 腾讯云 运维 TcaplusDB 国产数据库

[TcaplusDB知识库]TcaplusDB机器下架指南

tcaplus

nosql 腾讯云 运维 TcaplusDB 国产数据库

Android开发入门教程!动脑Android

android 程序员 移动开发

[TcaplusDB知识库]TcaplusDB新增机型指南

tcaplus

nosql 腾讯云 TcaplusDB 国产数据库

[TcaplusDB知识库]腾讯云TcaplusDB到底有多安全?

tcaplus

数据库 nosql 腾讯云 运维 TcaplusDB

Android岗,享学课堂架构师vip

android 程序员 移动开发

Android开发两年:扔物线课程怎么样

android 程序员 移动开发

[TcaplusDB知识库]运维平台-TcaplusDB事务管理

tcaplus

nosql 腾讯云 运维 TcaplusDB 国产数据库

《软件开发的201个原则》(中译本)出版了

百度开发者中心

最佳实践 方法论 软件开发 新书推荐

[TcaplusDB知识库]集群管理操作指南

tcaplus

数据库 nosql 腾讯云 运维 TcaplusDB

REST和分布式事务_SOA_Mark Little_InfoQ精选文章