【TechTarget中国原创】问:RESTful事务和Web服务事务有什么区别?
答:首先,我们对术语稍加定义,以助于更好的理解。“事务”这一术语,大家通常第一反应是它没有区分是本地事务还是全局事务。当今几乎所有的数据库操作都是使用本地事务,Web服务和RESTful应用处理本地事务的方式完全一样。
因此,这个问题实际上属于全局事务的范畴——涉及多个数据库的事务,可能在不同的计算机上运行。这就是两者的不同点所在之处。我还要澄清一点,Web服务是一种技术,而REST是一种架构方法,这有点像要比较苹果和橙子有什么不同一样。
Web服务事务(OASIS已定义的WS-Transactions规范)旨在满足与现有的TP(Transaction Processing)基础设施兼容,基本上可以说是从大型机系统上演变过来的。而REST构架方法则是从Web中演变而来,是基于另一种完全不同的技术流。一些重要的区别之处源于大型机系统和基于Web系统的大相径庭之处。
大型机系统的设计初衷是假定这样一种环境,即资源和用户处于同一个组织机构的控制之下。而基于Web系统的设计初衷则是假定是在万维网的环境下,即独立又互相协作的系统处于不同的组织和个体的控制之下。现在的企业IT系统可以或多或少区分为Web出现之前的系统,以及为Web开发的系统。为Web设计的IT系统在某些方面的控制非常欠缺,如工作负载、正常运行耗时、为用户提供良好体验的需求等。这些不同的假定影响着事务,因为面对分布式访问共享数据或者共享状态的需求,它们提供的是非常不同的解决方案。
从技术层面来说,这两者最大的不同是在通信系统的设计上。从大型机设计演变而来的事务型通信机制是通过使用持久性session来共享不同程序间的状态。而在面向REST的系统上使用的通信协议HTTP不支持持久性session,因为session对扩展性造成负面影响。但如果你是在一个严格监控的环境下,那么这样的影响是可控的。
为了与现有的共享状态机制相兼容,Web服务事务会把共享的事物上下文传递到全局事务的所有参与者,这样每个参与者对共享状态的访问都可以和其他参与者进行协调。 而基于REST的事务则是假定在任一时间,全局事务中只有一方可以访问共享状态,类似于传递一个令牌。其他参与方不知道另一个参与方在做什么,他们对于共享状态的操作不能进行协调。他们只需要知道,当轮到他们时,接收到共享状态后必须做什么。在处理失败和恢复方面,这令REST系统需要截然不同的设计,因为它无法做到自动化处理。这需要在额外的应用层上进行设计和编码,这样的折中方式使得系统可以与Web的设想更好地匹配。