分布式系统

Why Do Computers Stop and What Can be Done About It

2013年5月18日 阅读(921)

作者:Jim Gray 1985

原文:http://www.hpl.hp.com/techreports/tandem/TR-85.7.pdf

译者:phylips@bmy 2013-04-30

译文:http://duanple.blog.163.com/blog/static/7097176720134189481819/

[序:早在互联网出现以前,Tandem Computers 就已经构建了具有高度容错性和可用性的系统。Tandem Computers 是最早从事容错服务器制造的厂商,它制造的机器广泛应用在银行证券等在线处理交易领域。本文即是Jim Gray在Tandem Computers工作期间所撰写的,文中揭示了Tandem Computers 的“NonStop”神话所依赖的那些重要技术:isolation、failing fast、transactional updates、process pairs、supervision。同时提出了容错领域的很多重要概念,诸如:Availability 、Reliability  、MTBF、MTTR。虽然这篇文章是写在1985年,距今已30年,但是影响深远,其中的很多内容即使在今天看来依然非常有意义。

虽然在之前的一些文章中已经对Jim Gray进行了一些介绍,但是在这里还是继续深入介绍一下吧,顺带也说一说Tandem Computers 。

Jim Gray(1944-2007),98年图灵奖得主,“For seminal contributions to database and transaction processing research and technical leadership in system implementation.”。生于加利福尼亚的旧金山,由他的母亲扶养成人。1961年高中毕业后到1971年的这十年,都是在大学里度过的。Gray最初计划主攻物理学。在参与一个与航空公司为期两年的合作项目后,更加加深了他对学术研究的向往。1966年毕业拿到数学和工程学学士学位后,他选择继续攻读研究生课程并开展研究工作。之后一年,一方面在新泽西的贝尔实验室进行工作,另一方面还参与了纽约大学科朗研究所一些课程学习。1967年,又回到了Berkeley,加入了新成立的CS系。1969年取得了博士学位,研究课题是上下文无关文法和形式语言理论。之后在IBM的资助下,又在Berkeley做了两年博士后。在此期间,他领导了名为CAL的分时系统(Timesharing System)研究项目,该项目旨在建立一个安全可靠的操作系统。

1971年,Jim Gray加入IBM位于纽约的沃森研究中心的通用科学部门(General Science Department)。在此期间他结识了John Cocke(因在编译器理论和设计、大规模系统架构及RISC方面的突出贡献,而获得1987年图灵奖)。在这里度过了一个冬天之后,Gray决定返回加利福尼亚,加入了IBM的圣何塞研究实验室(现今的IBM Almaden),该实验室主要与IBM的通用产品部门相配合,负责设计和制造计算机磁盘驱动器。那时数据库管理已成为研究热点,而正是作为该实验室一员的 Edgar F. Codd,此前发表了一篇深具影响的论文,在论文中提出了一种管理组织数据库系统的新方式—关系模型。在IBM以及其他地方已经有好几个项目开始尝试构建以关系模型为基础的实际系统。1973年,IBM决定将来自沃森和圣何塞实验室的人们合并到圣何塞的一个项目中。Gray不久也加入了这个项目,该项目就是著名的System R。该项目持续了5年—与Berkeley的Ingres一同—被认为是关系模型工业化的基石。Ray Boyce和Don Chamberlin为System R设计了被广泛使用的SQL查询语言。Gray是System R中的关键人物,通过结合他自身在系统和理论方面的丰富经验,提出了解决并发控制和崩溃恢复等相关问题的标准方法,提出了事务的概念。开发了能够在维护数据库一致性的情况下,支持多个事务并发执行以及崩溃后重启的技术。也正是因这些工作而使他获得了1998年的图灵奖。当System R的研究工作接近尾声的时候,Gray又开始投入到将这些技术产品化的工作中,并开始思考如何将这些技术扩展到分布式的场景中。

1980年,Gray跳槽到了Tandem Computers,在这里度过了接下来的十年。Tandem是在将容错性硬件和软件应用于商业系统方面的领军者。它们通过使用高速互联网络将独立计算机连接起来提供高扩展性。在Tandem Computers 期间,Jim Gray对该公司的主要数据库产品ENCOM PASS进行了改进与扩充,并参与了系统字典、并行排序、分布式SQL、NonStop SQL等项目。

Tandem Computers 成立于1974年,由四个惠普公司的工程师创立(James Treybig、 Mike Green、Jim Katzman、Jack Loustaunou)。他们的商业计划要求系统不会因为“单点故障”而宕机,同时与同类非容错系统相比,仅仅略微贵一些。Tandem公司认为,这是非常重要的商业模式,限制了额外的费用很重要,因为客户往往在制定程序解决故障时,容错硬件的成本太高。Tandem Computers公司的第一个系统是Tandem/16或称为T/16 (后来成为NonStop I以及其后推出的继任者,NonStop II) 。该系统的设计是在1975年完成,并在1976年出售给花旗银行。Tandem/16(或称为NonStop I)由2至16个处理器组成,每个有着约0.7 MIPS的运算能力,在内存、 IO总线,定制的跨CPU的计算总线与 Dynabus四个部分 实现双链接。这个创造了双链接的模块,使任何单一的总线故障(包括IO和Dynabus)并不会影响系统,仍然可以自由的调用的其他模块。1981年NonStop II发布。1983年的 NonStop TXP系统,增加了一倍多的速度为2.0 MIPS,并增加了物理内存至8MB。这些系统同样的使用了Dynabus,源于NonStopI的超越性设计使NonStop在未来得以延续。1986年进行重大升级的NonStop VLX系统发布,VLX使用新一代的Dynabus ,速率从13 Mbit/s增为至40 Mbit/s(共计20兆位/ s的独立总线)。他们还推出了FOX II ,使网络规模从1公里增加到4公里。1986年Tandem还推出了第一款容错SQL数据库—— NonStop SQL 。NonStop SQL包括了一些基于“守护者”的新功能 ,以确保跨越节点数据的有效性。 在节点增长数量与性能的线性指标上,NonStop SQL是相当领先的,而当时,大多数数据库往往在两个处理器时,性能已经趋向平稳。后继的版本发布于1989年,用于增值交易,在节点增加发方面,仍然在当时可圈可点。1997年,Tandem被康柏(Compaq)公司收购,2002年康柏又被惠普收购,现在NonStop成为了惠普的产品。

Gray认为关系型数据库模型和SQL数据访问语言也同样是在线应用的可靠基础,同时他也开始关注客户在对比来自各个软硬件提供商的产品时所遇到的困难。设计了面向终端用户的性能benchmarks,同时协助成立中立于厂商的组织—TPCC(Transaction Processing Performance Council)。这也激励厂商们不断地为改进产品做出努力。

Gray在容错方面的兴趣促使他与Tandem的客户们一起研究故障的起因。发表了来自于产品型容错系统相关统计早期论文(即本文),指出大部分系统故障主要源自于系统管理操作和软件bug。随着用户对地理上分布式的计算机系统和终端网络需求的增加,Gray研究了分布式情况下的可用性、一致性以及其他重要的系统属性。他在Tandem期间发表的很多技术报告和论文都是用来帮助客户规划他们的应用,帮助 Tandem工程师规划加强他们的产品,涉及了性能、可靠性、可用性以及易用性等多个主题。

在Tandem呆了10年后,1990年Gray转到了DEC,在接下来的四年他指导了RDB关系型数据库管理系统以及ACMS事务处理监控器的产品开发。此外,他还与Andreas Reuter完成了 “Transaction Processing: Concepts and Techniques”的写作。这本书最初源于1986年Gray为为期一周的研讨会准备的讲稿,到1992年写完,已经是800页了。这本书的完成对Gray来说是一个重要转折点的标志,此后他的工作开始转向事务处理之外的其他领域。

1994年,Gray离开了DEC,回到了Berkeley。1994到1995年间,Gray和Gordon Bell提议微软在旧金山建立一个专注于服务器和可扩展性的前瞻性开发实验室。微软接受了这个提议,在接下来的12年里,Gray为他自己设定了这样的目标:“to put all the world’s scientific data online, along with tools to analyze the data”。他与他在微软的同事以及几所大学一起构建了一系列系统,为针对大规模科学数据的访问、搜索和计算提供支持。

2007年1月28,Gray驾船出海后失踪。

 

说明:

Failure:当系统行为与所期望的不一致时我们就说系统发生了故障。

Error:error是一个系统状态,不进行纠正可能导致failure。一个error是否一定引发一个failure是由3个主要因素决定的:1.系统是否有冗余,有冗余,error就不一定导致failure;2.error持续时间,可能在产生破坏性后果之前error就消失了;3.用户可接受的某种行为底线,譬如有的系统每天都会有一定量的错误发生,在用户可接受的前提下,并不需要做任何纠正动作。

Fault:一个fault是一个error被证实的或者假定的原因。

这三者之间的关系是:faults produce errors which lead to failures.

 

13.Why Do Computers Stop and What Can be Done About It

You Might Also Like