事务处理原理 第2版
原书名: Principles of Transaction Processing, Second Edition 原出版社: Morgan Kaufmann 作者: (美)Philip A. Bernstein Eric Newcomer [作译者介绍] 译者: 战晓苏 马严 丛书名: 国外计算机科学经典教材 出版社:清华大学出版社 ISBN:9787302240419 上架时间:2010-12-20 出版日期:2010 年12月 《事务处理原理(第2版)》为从事于应用程序开发、产品评估、系统设计、数据库管理和产品工程化等工作的各类人员提供了清晰、简明的指导。可帮助读者理解事务处理系统的内部情况,并描述了它们的工作原理以及如何最佳地使用它们。包括应用服务器的体系结构、事务通信范式,以及事务故障和系统故障的恢复机制。 《事务处理原理(第2版)》第1版发行以来的这些年,事务处理系统的使用已经发生了很大的变化。电子商务已经成为业务数据处理投资的主要焦点。例如,网上银行和网上股票购买、ebay拍卖,以及企业数据库管理。新的标准、新的技术和产品,以及新的语言允许web服务、rest/http和soa成为为企业应用程序设计的主导风格。借助于《事 务处理原理(第2版)》及其丰富的示例,读者能够开发、集成、部署和管理最高水准的事务处理应用程序。 目录回到顶部↑ 第1章 介绍 1.1 基础知识 1.1.1 问题 1.1.2 什么是事务处理 1.1.3 事务处理应用程序 1.1.4 事务程序的主要功能 1.2 tp系统的体系结构 1.2.1 面向服务的计算 1.2.2 硬件的体系结构 1.3 原子性、一致性、隔离性和持久性(acid) 1.3.1 原子性 1.3.2 一致性 1.3.3 隔离性 1.3.4 持久性 1.4 两阶段提交 1.5 事务处理性能 1.5.1 rpc.a和fpc.b基准 1.5.2 tpc.c基准 1.5.3 tpc.e基准 1.6 可用性 .1.7 系统样式 1.7.1 批处理系统 1.7.2 实时系统 1.7.3 数据仓库系统 1.7.4 其他系统类型 1.7.5 为什么要设计tp系统 1.8 tp系统配置 1.9 小结 第2章 事务处理抽象 2.1 介绍 2.2 事务 2.2.1 集合事务括号 2.2.2 事务标识符 2.2.3 链式事务 2.2.4 面向对象编程中的事务括号 2.2.5 嵌套事务 2.2.6 异常处理 2.2.7 保存点 2.2.8 使用保存点支持嵌套事务 2.3 进程和线程 2.3.1 为什么需要线程 2.3.2 实现线程 2.4 远程过程调用 2.4.1 事务rpc 2.4.2 绑定客户机和服务器 2.4.3 rpc走查 2.4.4 rpc的系统特性 2.4.5 如何比较rpc系统 2.5 共享状态 2.5.1 事务上下文 2.5.2 会话 2.5.3 无状态服务器 2.5.4 有状态应用程序 2.6 可伸缩性 2.6.1 扩展服务器 2.6.2 扩展系统 2.7 小结 2.7.1 事务括号 2.7.2 进程和线程 2.7.3 远程过程调用 2.7.4 共享状态 2.7.5 可伸缩性技术 第3章 事务处理应用程序体系结构 3.1 介绍 3.2 应用程序体系结构 3.2.1 多层体系结构 3.2.2 面向服务的体系结构 3.2.3 面向对象设计 3.2.4 简单请求 3.3 前端程序 3.3.1 前端程序层次 3.3.2 使用表单和菜单收集输入 3.3.3 构造请求 3.3.4 记录 3.3.5 web服务器 3.3.6 web服务器的状态管理 3.3.7 认证与加密 3.4 请求控制器 3.4.1 指定请求控制器功能 3.4.2 事务括号 3.4.3 请求完整性 3.4.4 进程结构 3.4.5 会话结构 3.4.6 安全性.. 3.5 事务服务器 3.6 事务中间件 3.7 数据库服务器与事务中间件 3.8 小结 第4章 队列化的事务处理 4.1 为什么使用队列 4.2 队列事务处理模型 4.2.1 从服务器的角度看排队 4.2.2 从客户端的角度看排队 4.3 客户端恢复 4.4 处理不可撤消的操作 4.5 队列管理器 4.5.1 对队列消息的操作 4.5.2 路由选择 4.5.3 调度器 4.6 发布.订阅 4.7 其他面向消息的中间件 4.7.1 基于代理的体系结构 4.7.2 基于总线的体系结构 4.7.3 比较代理与总线 4.8 队列式产品和标准 4.8.1 ibm的web slphere mq 4.8.2 oracle streams aq 4.9 小结 第5章 业务流程管理 5.1 介绍 5.2 业务流程定义 5.3 业务流程的执行 5.4 事务特性 5.4.1 隔离性 5.4.2 原子性 5.4.3 持久性 5.5 使流程状态持久 5.5.1 使用专用的运行时系统 5.5.2 使用队列请求 5.5.3 伪会话 5.5.4 使用日志 5.6 业务流程的其他模型 5.7 产品和标准 5.7.1 web服务业务流程执行语言 5.7.2 sql server服务代理 5.8 小结 第6章 锁定 6.1 介绍 6.1.1 正确性和两阶段规则 6.1.2 事务只通过读取写入来交互 6.1.3 保持事务握手 6.1.4 自动锁定 6.2 实现 6.2.1 锁管理器 6.2.2 锁的设置和释放 6.2.3 粒度 6.2.4 多粒度锁定 6.3 死锁 6.3.1 死锁预防 6.3.2 死锁检测 6.3.3 选择牺牲品 6.3.4 分布式死锁检测 6.4 性能 6.4.1 锁转换 6.4.2 锁抖动 6.4.3 锁定性能的数学模型 6.5 热点 6.5.1 延迟操作直到提交 6.5.2 乐观方法 6.5.3 批处理 6.5.4 分区技术 6.6 查询一更新问题 6.6.1 数据仓库 6.6.2 隔离度 6.6.3 多版本数据 6.6.4 多版本实现的细节 6.7 避免幻象 6.8 乐观并发控制 6.9 b.树锁定 6.9.1 b+树 6.9.2 b+树的插入 6.9.3 树锁定 6.9.4 b.链接优化 6.10 多粒度锁定 6.11 嵌套事务的锁定 6.12 小结 6.13 附录:基本的可串行性理论 6.13.1 历史等价 6.13.2 可串行性定理 6.13.3 两阶段锁定定理 第7章 系统恢复 7.1 系统故障的原因 7.1.1 强化环境 7.1.2 系统管理 7.1.3 硬件 7.1.4 软件 7.2 系统恢复的模型 7.2.1 检测进程故障 7.2.2 客户端恢复 7.2.3 服务器恢复 7.2.4 基于检查点的恢复 7.2.5 基于事务的服务器恢复 7.2.6 无状态服务器 7.3 数据库恢复概述 7.3.1 故障类型 7.3.2 恢复策略 7.4 系统模型 7.4.1 锁定假设 7.4.2 页面粒度操作 7.4.3 存储模型 7.4.4 日志 7.5 数据库恢复管理器 7.5.1 实现异常终止 7.5.2 实现提交 7.6 影式分页算法 7.7 基于日志的数据库恢复算法 7.7.1 实现提交 7.7.2 实现异常终止 7.7.3 实现重启 7.8 在基于日志的算法中优化重启操作 7.8.1 模糊检查点技术 7.8.2 操作日志化 7.8.3 用户技巧 7.9 媒介恢复 7.9.1 镜像硬盘 7.9.2 归档 7.10 小结 第8章 两阶段提交 8.1 介绍 8.2 两阶段提交协议 8.2.1 假设 8.2.2 准备就绪 8.2.3 协议 8.2.4 性能 8.2.5 阻塞 8.3 故障处理 8.4 优化和变化 8.4.1 再感染 8.4.2 协调转移 8.4.3 阶段零 8.4.4 推定异常终止 8.4.5 只读事务 8.4.6 合作终止协议 8.5 进程构成 8.5.1 独立事务管理器 8.5.2 列入事务中 8.5.3 进程树模型 8.6 用户一览表 8.7 小结 第9章 复制 9.1 介绍 9.2 复制的服务器 9.2.1 主一备份模型 9.2.2 复制资源 9.2.3 复制具有共享资源的服务器 9.3 在复制数据和更新间同步 9.3.1 单副本可串行性 9.3.2 复制更新 9.3.3 复制请求 9.4 单主站主副本复制 9.4.1 正常的操作 9.4.2 故障和恢复 9.4.3 具有多个从副本的主副本的恢复 9.4.4 一致性、可用性和分区兼容性 9.5 多主副本 9.5.1 分区操作可能十分有用 9.5.2 多主的更新传递 9.5.3 非盲更新 9.5.4 使用版本矢量检测复制冲突 9.5.5 冲突解决方案 9.5.6 维护版本矢量 9.5.7 版本矢量的更新规则 9.5.8 简化的版本矢量更新规则 9.5.9 示例回顾 9.5.10 再次讨论一致性、可用性和分区兼容性 9.5.11 microsoftsyncframework 9.6 其他复制技术 9.7 数据共享系统 9.7.1 锁定 9.7.2 高速缓存 9.7.3 记入日志 9.8 小结 第10章 事务中间件产品和标准 10.1 介绍 10.1.1 事务中间件的发展趋势 10.1.2 事务中间件编程模型 10.1.3 java ee与.net framework 10.2 web浏览器前端程序 10.3.netframework 10.3.1 开发前端程序 10.3.2 开发请求控制器和 10.3.3 rest/http支持 10.3.4 wcf部署选项 10.3.5 使用system. transactions进行事务管理 10.3.6 显式编程模型 10.3.7 与遗留tp监视器的集成 10.4 java企业版 10.4.1 开发前端程序 10.4.2 rest支持 10.4.3 开发请求控制器和事务服务器 10.4.4 使用java进行事务管理 10.4.5 与遗留tp监视器的集成 10.4.6 spring事务 10.5 面向服务的体系结构 10.5.1 基于web服务的soa 10.5.2 基于rest/http的soa 10.6 持久抽象机制 10.6.1 odbc和jdbc 10.6.2 存储过程 10.6.3 jpa 10.6.4 ado.net和ado.net实体框架 10.7 遗留的tp监视器 10.7.1 cics事务服务器 10.7.2 ims 10.7.3 tllxedo 10.7.4 acms 10.7.5 pathwayts/mp 10.8 tp标准 10.8.1 web服务.事务 10.8.2 xa接口 10.8.3 对象事务服务 10.8.4 jta 10.8.5 服务组件体系结构 10.8.6 osgi联盟 10.8.7 高级消息队列协议 10.9 小结 第11章 未来的发展趋势 11.1 介绍 11.2 云计算 11.3 可伸缩分布式计算 11.4 存储技术 11.5 流和事件处理 11.6 小结 缩略语表 参考文献说明 参考文献 为什么要阅读本书 40年来,事务处理一直是一项重要的软件技术。运输业、金融业、零售业、电信业、制造业、政府部门和军事等各个领域的大型企业都完全依赖事务处理应用程序来完成电子预定服务、银行业务、证券交易、订单处理、音乐和视频服务、运货跟踪、政府服务、电话交换、库存控制以及指挥与控制等功能。很多大型的硬件和软件供应商,例如IBM、HP、Oracle、Microsoft、Dell、Red Hat和EMC,其收益的很大一部分来自于事务处理系统。事务处理产品和服务的销售额每年高达几百亿美元。作为消费者,我们每天都在使用这一技术来取款、购买燃气、租影碟及网上购物。 事务处理系统的工作原理具体是怎样的呢?这一问题曾经只有商用数据处理领域的计算机专业人员感兴趣。但是现在随着事务处理在经济领域的广泛使用,各个领域的工程师们都对此有兴趣。尽管如此,专业人员却难以找到可读性强的、技术内容充实的、介绍这一复杂技术的书籍。而本书填补了这一空白。 绝大多数大规模事务处理系统的软件环境都基于事务中间件,事务中间件有助于将很多软件组件联合起来。这些组件包括驱动Web浏览器和其他设备的前端应用程序,将请求路由到能够运行它们的服务器的中间层应用程序,以及执行事务逻辑的服务器应用程序。常见的事务中间件包括IBM的CICS、Microsoft的.NET Enterprise Services,以及Java Enterprise Edition产品,如IBM WebSphere Application Server、Oracle的WebLogic Server和Red Hat的JBoss Application Server。本书的前半部分着重介绍事务中间件技术。 对很多软件工程师而言,事务中间件在技术上比较晦涩难懂,此技术是他们不太熟悉的一种软件粘合剂,需要用到的技术似乎不只是操作系统、数据库系统、通信系统和应用程序设计语言。本书通俗地介绍了事务中间件,解释了事务中回件对事务处理系统的性能、安全性、可扩展性、可用性、可管理性和易使用性所起的作用。本书的前半部分详细地介绍了事务中间件,包括事务中间件为应用程序编程人员提供的特性,以及如何构造事务中间件来提供这些特性。 事务抽象本身在很大程度上是通过数据库系统实现的。数据库系统确保每个事务作为一个整体而执行,确保每个事务不受其他事务的干扰,确保每个事务生成的结果在硬件和软件发生故障的情况下能够保留下来。此行为是通过锁定、写日志、通信协议和复制等技术实现的。这些技术是本书后半部分的主题。 本书介绍事务处理,旨在满足广大读者的需要,包括以下读者。 ·有兴趣构建事务处理应用程序的应用程序编程人员。 ·管理用于事务处理的数据库系统的数据库管理员。 ·设计要部署在事务处理系统上的应用程序的应用程序分析员。 ·相关领域(例如,数据库系统、操作系统和通信领域)的产品开发人员。 ·负责系统和应用程序产品的市场营销和技术支持工程师。 ·要了解该主题的计算机学科的本科生和研究生。 我们关注的是事务处理的工作原理,而不是如何构建事务处理应用程序。我们通过很多产品的范例来演示说明如何应用这些原理以及这些想法是在什么情况下产生的,但不可能详细地叙述每一种产品。本书介绍实用的且在产品中使用到的技术,并适当介绍实践当中不常用的一些好想法。 阅读本书除需要熟悉系统外,不需要预先掌握特定的技术。希望读者熟悉SQL和数据库系统,但这不是必需的。 阅读完本书之后,您会理解事务中间件的工作原理和何时使用事务中间件,以及事务中间件和数据库系统如何协同工作以支持可靠的分布式事务处理应用程序。还会迅速掌握如何使用任何事务中间件产品或数据库系统来支持事务处理应用程序的开发和管理。 第2版的新增内容 简单来说,第2版的新增内容很多。其中有几章是新增加的,有几章是重新编写的,其余各章也有很多内容是新增的或修订过的。 做这些改动的主要目的有两个。一是介绍自从12年以前第1版出版以来新出现的和修订的事务体系结构和技术。那时,基于Internet的电子商务刚刚兴起。而现在,它已经成为很多B2C(企业-对—消费者)和B2B(企业—对—企业)市场的主要部分。这部分市场的成长以及服务器硬件和操作系统的商品化使事务处理产品发生了根本变化。Web浏览器技术目前在与事务处理系统交互的各种技术中占据着主导地位。事务中间件已由联机事务处理监视器发展出很多新产品类别,它们可以很好地用于Internet上,如应用服务器、对象请求代理、面向消息的中间件和工作流系统。面向对象编程和面向服务体系结构已成为主流。数据库系统已成为更完善的事务处理环境。这些变化在此第2版中都会反映出来。 第二个主要目的是增加传统事务处理主题的广度和深度,使本书更加完善。在某种程度上,这基于第一作者将本书用作华盛顿大学研究生的计算机科学课程的教材所获得的经验。另外,第2版的也反映了技术的进步,这些以前新奇的技术现在已得到了广泛的应用。 . 具体来说,第2版的主要变化如下:关于事务中间件的3章完全是重写的,其中有两章是关于事务中间件原理的,有一章篇幅很长,介绍了示例产品和标准,包括Java Enterprise Edition和Microsost .NET的细节。有一章新内容是关于业务流程管理的。而关于锁定机制的一章则新增了内容,包括乐观并发控制、B树锁定、多粒度锁定和嵌套事务。同时还新增了TPC-E准则、状态管理、可伸缩性、影式分页、数据共享系统、一致性算法、基于日志的复制以及多主复制等内容。面向服务的体系结构(SOA)、REST和Web服务的概念贯穿全书。另外,在很多地方还对技术细节进行了小小的补充。每一章都有大的改动。 出版商在关于本书的网页上将提供补充材料。最开始,将只包括按章组织的问题选择,以后会逐渐增加其他的技术材料。 本书主要内容 购买了事务处理系统的企业希望系统提供快速服务,购买价格和操作都不太昂贵,而且希望随着使用的增加和新应用程序的不断增加,系统是可伸缩的。应用程序编程人员希望不受运行事务处理系统所要求的众多复杂的不同类型技术(如事务协议、消息协议、事务远程过程调用、持久性队列、多线程进程、资源池、会话管理和复制协议)的影响。应用程序编程人员的工作是理解企业想要事务做什么并编写程序完成它。系统软件应使应用程序能够在快速、高效、可伸缩和可靠的系统上运行。这就是本书前半部分(1~5章)主要介绍的事务中间件要完成的任务。第10章介绍当今的事务中间件产品和标准。 事务处理系统的用户想把系统看作事务的顺序处理器,认为它是一个无比可靠的处理器,一心一意执行他们的事务,执行整个事务(而不只是事务的一部分),并永久保存事务的结果。这有些苛求,并且根本没有描述系统内部真正发生的事情:系统并发地执行很多事务;系统时不时会由于软件和硬件错误而发生故障,且常常可能发生在最坏的时候(运行事务时);系统只有有限的存储能力。但是,通过组合使用各种欹件技术,系统的运转情况大体符合用户的期望。这些技术是第6~9章的主题。 随着计算技术的发展,事务处理技术也随之发展,以支持计算技术。第11章讨论一些主要趋势:云计算,可扩展的分布式计算,闪存,以及流和事件处理。 下面是各章概要。 ·第1章“介绍”简单概述了事务处理应用程序和系统结构。本章描述了面向服务的计算,事务的ACID特性,两阶段提交协议,业界标准的TPC性能准则,高可用性要求,以及事务处理与批处理系统、实时系统和数据仓库系统的关系。 ·第2章“事务处理抽象”描述了事务处理系统中使用的主要软件抽象:事务,进程和线程,远程过程调用,用来管理共享状态(如事务上下文、会话和cookie)的技术,以及可伸缩性技术(如高速缓存、资源池、分区和复制)。 ·第3章“事务处理应用程序体系结构”阐述了多层应用程序体系结构的作用,并详细深入地讨论了每一层:使用表单和Web服务器与最终用户设备通信的前端,包含事务加括号的请求控制器,以及执行事务的事务服务器。本章还介绍了事务中间件和数据库服务器是如何组织这些活动的。 ·第4章“队列事务处理”介绍了持久消息队列如何增加可靠性。本章提供了恢复场景的详细走查,展示了队列如何驱动发布-订阅以及基于代理和基于总线的面向消息的中间件。本章还以IBM的Websphere MQ和Oracle的Stream AQ为例阐述了队列管理器的内部特性。 ·第5章“业务流程管理”描述了作为多个相关事务执行的业务流程的创建、管理和监控的支持机制。解释了如何获得多事务请求的原子性、隔离性和持久性。概述了业务流程执行语言(DPEL)标准,并以Microsoft SQL服务代理(Service Broker)为例概述了业务流程机制。 第6章“锁定”展示了两阶段锁定的工作方式和原因,以及应用程序编程人员如何影响其正确性和性能。描述了锁管理器的实现和死锁处理。然后详细解释如何能够通过锁粒度、乐观方法、批处理、避免热点、避免幻象以及使用较低隔离度和多版本方法支持查询—更新工作负载等来控制性能。最后,本章介绍了B-树锁定和SQL数据库系统使用的多粒度锁定以及嵌套事务的锁定。 ·第7章“系统恢复”识别故障发生的原因以及事务如何帮助屏蔽所造成的影响。讨论基于检查点的应用程序恢复,使用无状态服务器简化恢复,以及使用进程对来减少恢复时间的暖备份和热备份系统。然后介绍数据库系统如何使用日志来恢复事务故障、系统故障和介质故障。介绍撤消和重做范式、日志算法的工作原理和原因、日志检查点、恢复算法、影式分页、一些流行的记录日志优化(包括ARIES算法)及归档恢复。 ·第8章“两阶段提交”详细介绍两阶段提交协议。详细介绍恢复的,展示用户必须参与的地方以及为什么必须参与。介绍流行的优化技术,如推定中止、阶段零和协调转换。解释数据库系统和事务管理器如何使用X/Open事务管理体系结构的XA接口进行互操作。 ·第9章“复制”描述复制服务器与复制资源之间的平衡,并展示如何将正确性标准——即单副本可串行性——分别运用于复制服务器与复制资源。介绍两种最流行的复制方法:主副本复制和多主复制。在主副本复制中,对主副本的更新只传播到从副本;在多主复制中,更新被运用于所有副本,然后传播到其他副本。还介绍了连接到共享数据库的复制高速缓存的同步,以及用于选出主复制、法定一致、建立最新状态和复制恢复等的算法。 ·第10章“事务中间件产品和标准”描述事务中间件流行的产品和标准,如Java企业版(Java Enterprise Edition)、Microsoft的.NET企业服务(.NET Enterprise Services)、遗留的事务处理监视器(CICS、IMS、Tuxedo、ACMS和Pathway)和其他面向服务的中间件。组件技术包括Windows通信基础(Windows Communication Foundation)、企业JavaBean、Java数据库连接器、Java事务API和Spring框架,它们出现在IBM、Oracle和Progress的产品中以及其他开放源码软件中。还介绍了OMG和X/Open的事务标准和OASIS的Web服务标准。 ·第11章“未来的发展趋势”介绍事务处理技术发展的主要方向:云计算平台,使用分布式计算组件组成可伸缩系统,用闪存取代磁盘,来自作为事务请求源的传感器设备的数据和事件流。 教师指导 在过去的25年中,本书的第一作者已经讲授了数十次事务处理课程。他最新提供的材料可在华盛顿大学计算机科学与工程系的网站上找到,其网址是http://www.cs.washington.edu/education/courses/csep545/,其中有作业、项目和演讲视频。 最适用于大学正规课程的教学大纲是在课程的前半部分讲授,即本书第1章涉及的内容以及后面的并发控制原理(6.1~6.4节)和恢复(第7章)。这些内容促使学生深入研究技术细节,通过组织起来的家庭作业,可以很好地领会这些技术细节,也可以应付常规考试。这使学生能够运用课程项目。 事务处理是一个系统工程问题,有很多交互部分。我们尝试了3种不同的课程项目,帮助学生理解各部分如何组成一个整体:应用程序的案例研究;使用商业产品(如Microsoft.NET或Java Enterprise Edition)构建应用程序;为运行分布式事务构建事务中间件系统。无论从学生还是从老师的角度来看,最后一个项目都是最有效的。因此,在最新的材料中,要求所有学生都完成此项目。 此项目构建一个旅游预订系统框架,包括航班、宾馆房间和汽车租赁。这就需要使用锁定和恢复、两阶段提交协议以及事务中间件来构建一个资源管理器,以满足上述需求。即使是全职专业编程的研究生,在只有10周的一个学季中完成上述工作,工作量也是相当大的。因此,我们提供了一些组件,学生可以从这些组件开始。软件可以从课程的网站下载。
用户评论