首页>参考读物>计算机科学与技术>软件工程及软件方法学

面向模式的软件体系结构,卷3
作者 : Michael Kircher, Prashant Jain
译者 : 鲍志云
出版日期 : 2005-10-09
ISBN : 7-111-16983-2
定价 : 29.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 169
开本 : 16开
原书名 : Pattern-Oriented Software Architecture:Patterns for Resource Management V3
原出版社: John Wiley & Sons
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

在任何类型的软件中,有效管理资源都是至关重要的。从移动设备中的嵌入式软件,到大型企业服务器上的软件,有效地管理内存、线程、文件、网络连接之类的资源对于让系统可以正常且高效地工作都很重要。
  我们经常在软件开发生命周期的后期才发现资源管理需求,而在这么晚的时候改变系统设计很困难。所以,在生命周期的早期执行这样的任务就很重要。因为属于不同领域的系统有不同的约束和需求,所以对某个特定系统或者配置很有效的方法对另一个系统就未必那么有效。
  本书用模式来描述在系统中有效实现资源管理的方法。这些模式描述得很详细,使用了几个例子,并且和POSA前两卷一样,给出了如何实现它们的指导。此外,这一卷还对资源管理做了透彻的介绍,并给出了两个案例研究,分别把这些模式应用于自组网络计算和移动射频网络。这些模式归于不同的资源管理领域,涉及了完整的资源生命周期:获取、管理和释放。

图书特色

图书前言

这本书是关于软件系统中的资源管理模式的。这些模式为软件构架师和开发者们在试图为软件系统提供有效且高效的资源管理方法时常常遇到的问题提供了解决方案。高效地管理资源,对于任意类型的软件的执行都是至关重要的。从移动设备中的嵌入式软件,到大型企业服务器中的软件,有效地管理内存、线程、文件或者网络连接之类的资源对于让系统正常并且有效工作都很重要。
  Pattern-Oriented Software Architecture(POSA)系列的第1卷[POSA1]广泛地引入了软件设计和构架中的通用模式。第2卷[POSA2]则专注于建立复杂的并发和网络软件系统与应用程序的基本模式。现在本卷则用模式来展现在系统中实现有效的资源管理所需的技术。
  书中的模式详尽展开,并且会有一些例子。同POSA的前几卷一样,本书为读者提供了如何实现这些模式的指导。此外,本书还对资源管理作了透彻的介绍,并且包含了两个案例分析,在案例中这些模式应用在两个不同的领域。书中展示的模式独立于任何实现技术(比如.NET、Java或者C++),虽然例子是用Java和C++给出的。模式根据资源管理的不同领域来分类,因此涉及了资源的完整生命周期:资源获取、资源生命周期和资源释放。
  本书中的模式广泛地覆盖了资源管理领域。我们在几年前开始基于自己创建很多不同软件系统的经验记录这些模式。大多数模式都曾经在主要的会议上展示过或者讨论过。但是,我们觉得还缺少这样的努力,把这些模式以模式语言的形式放到一起,并以可以把模式语言应用到多个领域的方式将其展示出来。
  资源管理的范围很广。随着新技术的出现,系统设计者和开发者面对的资源管理的挑战也时刻在变化。我们预计,随着时间的推移,人们会发现并记录更多的资源管理模式。本书的“结语”那一章谈论了发展资源管理模式语言还需要进行怎样的努力。

读者群
  本书是为所有的软件构架师、设计者和开发者而写的。他们可以用本书中描述的模式来解决通常每个软件系统都会遇到的资源管理的挑战。
  本书对计算机科学专业的学生也很有用,因为它可以提供对资源管理的现有最佳实践的概览。

本书结构
  本书分成两部分。第一部分提供了对资源管理的主题以及资源管理的模式的介绍。第一部分展示的模式分成三章:资源获取、资源生命周期、资源释放,这同典型的资源生命周期相对应。本书的第二部分把这些模式应用于两个案例。
  本书的第一部分从问题领域的角度来看待资源管理,而第二部分则从应用程序领域的角度来看待资源管理。本书中的模式不是孤立的。事实上,在我们覆盖资源管理模式的整个过程中,我们大量引用了其他相关的值得注意的模式。对于每个这样的模式,我们都在“引用到的模式”一章中包含了摘要介绍。
  本书包含了很多使用模式的例子。虽然模式用的都是单独的例子,但讲案例的每一章都是用一个特定领域的例子来把所有的模式联系起来。这样就起到了一个完整的例子的作用,把特定领域中的问题和单个模式的使用放到了一起,以解决所提出的问题。这种方法让我们可以证明模式的广泛可用性,同时还展示了它们如何联系到一起。
  第1章“导引”正式引入了软件系统中资源管理的话题,并且定义了它的范围。这一章描述了为何有效地管理软件系统中的资源那么难。这一章还介绍了模式,并展示了如何用模式来应对资源管理的挑战。
  第2章“资源获取”描述了解决对资源获取有影响的作用力的模式。资源在使用前必须先获取。但是,获取资源不应该降低系统性能,也不应该造成任何瓶颈。对于大型资源或者只有一部分可用的资源,资源获取策略的调整是至关重要的。
  第3章“资源生命周期”描述了解决影响资源生命周期的作用力。资源可以有很不相同的生命周期。例如,有的资源会被频繁且密集地使用,还有些资源则只会被用到一次。当我们不再需要某一资源时,就可以释放它。但是,判断何时释放资源并不是那么简单。对资源生命周期的显式控制可能既令人厌烦又容易出错。为了解决这一问题,我们需要自动资源管理技术。此外,在某些特定的构架(比如分布式系统)中,可能多个资源必须共同工作以达成更大的共同目标。每个资源都有可能由自己的控制线程来管理,那么就需要协调多个资源的协作和整合。
  第4章“资源释放”描述了处理资源的有效释放的模式。当资源不再被需要时,就需要返回给资源环境,以优化系统性能并让其他使用者可以获取资源。但是,如果被释放的资源需要被相同的资源使用者再次使用,那么就必须重新获取资源,这就会影响性能。这里的挑战是如何找到正确的平衡并决定何时释放资源。此外,对资源管理操作(比如释放资源)的显式调用很令人厌烦。如何尽量减少资源管理的开销,同时还确保高效率和高可伸缩性呢?
  在第5章“资源管理准则”中,我们展示了进行资源管理的准则,这为在特定领域中高效地使用资源管理模式语言提供了指导。
  第6章“案例分析—自组网络计算”展示了如何用我们描述的模式来创建自组网络应用程序并满足它的资源管理需求。
  第7章“案例分析—移动网络”把所有的模式都整合进模式语言,并用这个模式语言来解决一个电信领域的案例的需求。
  在第8章“模式的过去、现在和未来”中,Frank Buschmann审视过去在POSA前一卷中做出的对“模式将走向何方”的预言,并进一步分析模式现在走到了哪一步,然后预测模式的未来。
  第9章“结语”为全书的内容收尾。该章包含了对资源管理领域将来可能会有什么样的成果的分析。
  “引用到的模式”简洁地描述了我们引用到的模式,“符号表示法”则解释了我们在书中用到的所有符号表示法。
  若读者需要补充材料,那么建议访问我们的Web站点http://www.posa3.org。这个站点包含了我们在模式中所展示的所有源代码,还包含了对模式自身的更新。随着时间的推移,资源管理模式语言所新增的内容也会包含在这个站点上。
  如果你有任何评论、建设性的批评,或者改进建议,请用e-mail发到authors@posa3.org。

导读
  本书的写法适合从头读到尾。但是,如果你知道要达到什么目的,那么就可以选择自己的阅读步骤。对于这种读法,下面的提示可能有助于你决定选择哪些主题以及用什么顺序来阅读:
  * 若要知道单独的模式在实践中如何使用,以及它们如何协作,可以先读模式的“问题(Problem)”和“解决方案(Solution)”小节,然后读第6章和第7章的案例分析。
  * 若想感受模式语言的广泛可用性,可以阅读第2章到第4章每个模式的摘要以及“已知应用(Known Uses)”小节。
  * 若要知道资源管理模式语言如何同现有的模式整合(特别是那些涉及资源管理领域的模式),可参见第1.5节“相关工作”。
  我们在扉页中概括了模式语言,列出了本节介绍的所有模式的摘要,从而提供了模式语言的概览。我们还展示了一幅描述模式之间关系的模式地图。

致谢
  能向那么多支持我们写作本书的人表示谢意,我们感到很愉快。首先,我们要感谢我们的指导者Charles Weir,以及为本书审稿的Cor Baars、Frank Buschmann、 Fabio Kon、Karl Pr歴e、Christa Schwanninger、Michael Stal、Christoph St焎kjuergen、Bill Willis和Egon Wuchner。还要特别感谢硅谷模式小组的Trace Bialik、Jeffrey Miller、Russ Rufer和Wayne Vucenic为本书作出了极大贡献。事实表明,通过Wiki在因特网上协作,获取来自硅谷模式小组的反馈是非常有效的。
  我们还要感谢我们的EuroPLoP和PLoP审稿人,他们详尽地审阅了每个模式。他们是Pascal Costanza、Ed Fernandez、Alejandra Garrido、Bob Hanmer、Kevlin Henney、Irfan Pyarali、Terry Terunobu、John Vlissides和Uwe Zdun。我们还要感谢每一章的审稿人:Roland Grimminger、Kevlin Henney、Michael Klug、Douglas C. Schmidt、Peter Sommerlad和Markus V歭ter。Kevlin也为我们提供了支持,他提供了很多章节引用,审阅我们的图中对UML的使用,并给出了对空格使用的建议。
  我们还要感谢Kirthika Parameswaran,我们跟他一起为实现JinACE[KiJa04]的想法而工作。JinACE是一个类似Jini[Sun04c]的框架,但用C++实现。我们的工作激励我们对自组网络计算的概念进行更深的探索,并最终发现了它背后的模式。我们要感谢她通过长长的e-mail交互所进行的创造性讨论。
  我们很感激Douglas C. Schmidt,是他鼓励我们从模式语言的角度来看待我们对JinACE的研究。随后浮现的模式激励我们开始对资源管理模式语言的研究。
  此外,我们还要感激西门子公司技术部的模式团队:Martin Botzler、Frank Buschmann、Michael Stal、Karl Pr歴e、Christa Schwanninger、Dietmar Sch焧z和Egon Wuchner。
  我们还要感谢John Wiley & Sons出版社的联系人。他们为本书提供了很棒的支持。他们是Gaynor Redvers-Mutton、Juliet Booker和Jonathan Shipley。我们的技术编辑Steve Rickaby对于我们完善此书提供了很大帮助,跟他合作很愉快。
  最后,我们还要向Frank Buschmann致以特别的感谢。他不仅审校了本书,还贡献了“模式的过去、现在和未来”那一章。是他带来的灵感,是他的鼓励,帮助我们完成了此书。

图书序言

我从没想到会发生这样的事情:POSA系列新的一卷的作者竟没有一个属于“Party of Five”。但我为此感到骄傲!因为本书意味着新一代的优秀软件工程师成长起来了,并且在积极地把他们的经验贡献给模式社区;还因为本书意味着模式的理念依然在繁衍、成长。当然,我也为我们1996年的POSA愿景依然在激励模式创作者们增强、完善、发展我们的材料而感到骄傲。
  POSA这一卷所选的主题—资源管理,几乎对所有软件系统的成功都至关重要。或许这看起来显而易见,但仅仅在十年前,很多开发者还认为只有在嵌入式系统领域我们才需要关心资源管理问题。在桌面和企业领域,只有很少的开发者注意这个主题。为什么要关心像内存这样的资源呢?如果不够用了,只要升级机器就行了。我必须承认,在我职业生涯的早期阶段,我也持类似的观点,以为资源是取之不尽、用之不竭的。我那时的观点是多么错误啊!幸运的是,我曾被自己的错误绊了一跤,并很快吸取了教训。
  今天,很少有开发者会忽略资源管理的重要性。随着基于组件的系统、应用服务器的出现,随着运行于我们计算机上的应用程序的复杂性和规模的增长,人们开始意识到,小心地管理资源会对软件系统的质量产生多么大的影响。内存、CPU运算能力、线程、连接等资源都是有限的,即便对于最强大的系统也是如此。但人们期望,即便会有大量用户同时访问这些服务器,它们也应能为所有用户提供高质量的服务。这一冲突只能通过明确、谨慎地管理服务器资源来解决。“资源”这个术语并不仅限于内存或连接这样的底层概念。在今天的网络计算世界中,资源还可以包括被远程客户应用程序使用的组件和服务。多个客户应用程序常常会竞争访问这些组件和服务。确保所有的客户都获得足够好的服务也是恰当地管理资源所应关注的内容。
  不过,认识到资源管理的重要性和把资源管理做好是两码事。有效管理资源很困难,很有挑战性。如果你能做好,那么你的应用程序将具有高效率、稳定性、可伸缩性、可预期性和可访问性。如果你没有做好,那么在最好的情况下你的应用程序将提供很有限的操作质量,在最糟的情况下应用程序会失败,就那么简单。让容器来做资源管理并不是万能的解决方案,因为很多软件系统不能承受这样的基础设施的开销。即便可以用容器,你也需要理解容器是如何管理资源的,这样才能创建高质量的软件。很多应用程序使用了容器,但还是失败了,原因仅仅是缺乏理解。
  那么如何去理解呢?去哪儿找关于资源管理的挑战、应对挑战的解决方案以及解决方案的实施建议的资料呢?你拿着的这本书,POSA系列的第3卷,就是这样的资料之一。它展示了多年积累下来的资源管理经验和方案。大量的著名应用程序和中间件都证明了这些经验和方案的质量。把这些经验和方案用模式的方式表示出来可以让每个软件开发者都能接触它们。新手可以学会资源管理需要关注的基本问题以及基本的解决方案,专家则能交叉检查并评估各种方案,并阅读特定方案的细节。我还不曾听说有跟此书同样详尽的关于资源管理的资料。
  在一开始我说过,我为本书感到骄傲。你读过之后就会知道为什么。

Frank Buschmann
西门子公司技术部门

  如果你曾做过较长时间的软件开发工作,你几乎肯定会经历过我称做“沿计算机内存小道回溯”的事情。这样的事情通常发生在开发者们相聚在社交场合的时候,比如在一起吃午饭时。开端总是无意的,一位开发者说起他最近解决的一个特别困难的问题。然后,另一个开发者不甘示弱,开始讲述自己征服另一个更难问题的故事。然后,其他人的每个故事中的情形都会更困难一些。直到最后,元老们开始讲他们那时用打孔卡片或者开关面板来编程的只有几个字节内存的古董机器的故事。我在等有没有哪一天会有人跟我说当他/她开始编程的时候,机器语言只有0没有1!
  开发者能够用上面的方式来攀比,因为编程天生就需要做出很多取舍。应用程序需要和别的程序分享计算资源。内存空间和磁盘空间不是无限的。CPU在一秒钟只能处理有限数量的指令。磁盘和设备输入输出可能会花比较长的时间。建立数据库连接和网络连接可能需要耗费很多时间和资源。在电子计算的历史长河中,硬件、操作系统、中间件和应用程序都取得了长足的进步。但是,虽然进步世人皆睹,但编程依然是关于做出正确取舍以便尽可能提高整个计算解决方案的效率的艺术。
  所有的应用程序都会管理某种资源,比如内存、网络或数据库连接、线程。但是,在资源管理方面编写并优化得好的程序和做得不好的程序之间有显著差别。对偶尔运行一小段时间的程序(比如基本的命令行工具或者图形配置界面)而言,忽略资源管理不算什么问题。但若要开发需要长期运行的健壮、高性能、可伸缩的应用程序(比如Web服务器、应用程序服务器、通告系统),那么对资源管理缺乏关注就意味着失败。
  本书中的模式都是关于资源管理的。概括地讲,资源可以获取、管理、释放。本书中展示的模式就用于以上3个领域。这些是对长期运行的应用程序的性能、规模、可伸缩性、延续性具有深远影响的主要领域。例如,很多应用程序都从堆上分配内存。对像Web服务器或应用服务器这样的程序来说,在请求处理代码路径中每一个从堆上分配内存的操作都降低了服务器的性能和可伸缩性,因为调用堆管理器以及获取和释放用来保护对堆的同步访问的互斥锁的代价高昂。这样的应用程序可以使用Partial Acquisition这样的模式,在进入请求代码路径之前就尽可能多地执行获取资源操作;并且使用Caching或者Pooling模式,以便保留资源用于下次请求,而不是释放资源并且下次重新分配。即便是有经验的开发者也会对资源管理模式的正确组合带来的性能和可伸缩性提升感到惊喜。
  本书继承了POSA强调实际方案的传统。我特别喜欢的是书中每个模式都包含了详细描述实现问题的小节,而且每个模式都包含一个详尽列出这个模式已知应用的小节。此外,还有两章讲述了具体的案例研究,展示了这些模式如何用于现实世界中的应用程序,还展示了在这样的应用程序中这些模式如何相互关联。归根结底,模式是对在真实应用程序中已经证实有效的方法的描述。作者在书中有效地对模式追根溯源并分析其影响,从而确保这些模式保持了同现实世界间的重要联系。
  软件模式通常会帮助我们决定在构架和设计中做出怎样的取舍,以及在何处取舍。毕竟编程工作是由人来做的,而模式可提升抽象层次,并有助于团队沟通他们的构架和设计。我从事中间件构架、设计和实现的工作已经有很长时间了,其间我多次成功地应用Michael和Prashant在本书中展现的模式。但遗憾的是,这是在这些方法被表示成模式之前,这意味着我和其他团队成员花了大量的时间来设计出我们自己的变体、实现它们、评估它们以决定取舍,并且基于评估结果优化和调整它们。现在,Michael和Prashant已经清晰而详尽地把这些方法用模式语言表达出来了,你和你的团队成员可以更简单地讨论它们,并理解它们的好处,判断在什么样的情形下使用它们最好,并理解实现它们时你需要注意的方方面面。
  当你已经用关于这些资源管理模式的知识和好的性能评估工具“武装”起来时,你可能会惊喜地发现你可以那么快、那么容易地大幅度提高应用程序的性能和可伸缩性。拥有了这样的技能,在下一次“沿计算机内存小道回溯”的时候,你的故事会让元老们都吃惊的。

Steve Vinoski
IONA Technologies公司产品创新部门首席工程师

作者简介

Michael Kircher, Prashant Jain:Michael Kircher:  Michael和Prashant同POSA前两卷的作者紧密合作并且积极参与模式社区有好几年了。他们在各自的公司(西门子和IBM)中都在参与新技术和软件构架的研究与咨询。
Prashant Jain: Michael和Prashant同POSA前两卷的作者紧密合作并且积极参与模式社区有好几年了。他们在各自的公司(西门子和IBM)中都在参与新技术和软件构架的研究与咨询。

译者简介

鲍志云:暂无简介

译者序

这本书是专讲资源管理模式的。这在模式类书籍中是较为少见的。而资源管理这个话题却又是如此地重要,特别是对于24×7运行的大型系统,资源管理的成败对系统的成败有极大的影响。
  很多读者可能知道,现在敏捷方法很流行,人们开始觉得很多设计都可以在后期通过重构的方式加入,而不需要一开始就严密地思考并决定。关于这些设计的模式,实在可以“妙手偶得之”,而不必一开始就有意识地去用。
  但是,也有一些涉及系统全局的方面是很难通过重构的方式逐渐引入或者改变的(或者后期引入带来的变动太大,使得这样做显得不划算)。这些方面包括对国际化和本地化的支持、对多线程的支持、安全性、可移植性等等。这其中也包括了资源管理策略。
  所以,在设计系统之前,有必要先对资源管理模式有个全盘的了解,这样在设计时才能有意识地运用最合适的资源管理方法。
  在本书中,我个人最喜欢的是第7章的案例分析,该章描述了设计一个UTMS移动网络系统(包含基站、RNC、OMC)时遇到的挑战,以及如何从“模式弹药库”中找到合适的弹药来解决这些挑战。读来感觉淋漓尽致。这一章篇幅不长,但信息量很大,因为所有的细节都隐藏在模式名的背后。所以,为了读懂第7章,必须先读第2、3、4章。(事实上,这3章也可以当做资源模式管理词典,供你在工作中备查。)
  其实,这本书还有模式地图的作用,因为书中不仅提到了资源管理模式,还以此为主干展开,广泛引用了模式社区的大量其他著作和模式。这也算是一个额外的好处吧。将单个模式融入更宏大的模式地图(或者说在“模式语言”的语境中)来讲述,这也是POSA系列的特色之一。
  相信此译本可以带给读者愉快的阅读体验。若阅读过程中发现任何问题,可以发信到:wesley.bao@acm.org。

鲍志云
2005年7月

图书目录

第1章  导引 1
1.1  资源管理概览 2
1.2  资源管理的范围 3
1.3  模式的使用 5
1.4  资源管理中的模式 5
1.5  相关工作 7
1.6  模式格式 9
第2章  资源获取 11
2.1  Lookup模式 11
2.2  Lazy Acquisition模式 22
2.3  Eager Acquisition模式 31
2.4  Partial Acquisition模式 40
第3章  资源生命周期 49
3.1  Caching模式 49
3.2  Pooling模式 57
3.3  Coordinator模式 67
3.4  Resource Lifecycle Manager模式 78
第4章  资源释放 91
4.1  Leasing模式 91
4.2  Evictor模式 104
第5章  资源管理准则 113
第6章  案例分析—自组网络计算 115
6.1  概览 115
6.2  动机 116
6.3  解决方案 117
第7章  案例分析—移动网络 123
7.1  概览 123
7.2  动机 126
7.3  解决方案 126
第8章  模式的过去、现在和未来 139
8.1  过去的四年 139
8.2  模式的现状如何 142
8.3  模式明天将走向何方 142
8.4  关于模式未来的简短声明 145
第9章  结语 147
引用到的模式 149
符号表示法 153
参考文献 159
致谢 170

教学资源推荐
作者: Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides
作者: 窦万峰,杨坤,许敏,缪静娴,钱辰
作者: Ian Sommerville
参考读物推荐
作者: [美]夏丽蒂·梅杰斯(Charity Majors),[美]莉兹·方-琼斯(Liz Fong-Jones),[美]乔治·米兰达(George Miranda) 著
作者: [美] 迪恩?莱芬韦尔(Dean Leffingwell)等著
作者: (美)汤姆·迪马可(Tom DeMarco) 蒂莫西·利斯特(Timothy Lister)著