分享
架构之美(精选版).pdf
下载文档

ID:3347634

大小:8.22MB

页数:107页

格式:PDF

时间:2024-03-02

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
架构 精选
精选版精选版 Diomidis Spinellis 等著 王海鹏 等译 顶级业界专家揭密软件设计之美 顶级业界专家揭密软件设计之美 免费在线版本 免费在线版本(非印刷免费在线版)(非印刷免费在线版)登录China-Pub网站购买此书完整版 了解本书更多信息请登录本书的官方网站 InfoQ 中文站出品中文站出品 本书由 InfoQ 中文站免费发放,如果您从其他渠道获取本书,请注册 InfoQ 中文站以支持作者和出版商,并免费下载更多 InfoQ 企业软件开发系列图书。本书主页为本书主页为 http:/ 注:封面图片选自 http:/ 商务合作: 读者反馈/内容提供: 目录目录 推荐序推荐序.i 译者序译者序.v 作译者简介作译者简介.vii 第第 1 章章 架构概述架构概述.1 1.1 简介.1 1.2 创建软件架构.7 1.3 架构结构.11 1.4 好的架构.15 1.5 美丽的架构.16 致谢.18 参考文献.19 第第 2 章章 两个系统的故事:现代软件神话两个系统的故事:现代软件神话.21 2.1 混乱大都市.22 2.2 设计之城.28 2.3 说明什么问题.35 2.4 轮到你了.36 参考文献.36 第第 3 章章 伸缩性架构设计伸缩性架构设计.37 3.1 简介.37 3.2 背景.38 3.3 架构.42 3.4 关于架构的思考.47 第第 4 章章 数据增长:数据增长:Facebook 平台的架构平台的架构.52 4.1 简介.52 4.2 创建一个社会关系 Web 服务.57 4.3 创建社区关系数据查询服务.64 4.4 创建一个社会关系 Web 门户:FBML.72 4.5 系统的支持功能.85 4.6 总结.90 推荐序一如何看到一滴水的美丽支付宝(中国)公司业务架构师大道至简作者周爱民(aimingoo)【一】架构是一个过程,而非一个结果。【二】在大多数人的谈论中,架构是一个目标产物,而作为架构师的责任就是去生产它。所以无论如何,架构是可以“做”出来的,而且也应该有一些“做”的方法、技术、技巧。有人问过我:架构的最主要产出是什么?我的答案是:图。这里面有两层含义:一层含义是如同建筑师描绘的蓝图一样,用于引导实施者;另一层含义是架构师头脑中清晰的目标系统。如果架构师头脑中没有系统清晰的图像,他是没有办法把它画出来的。【三】画家画的无非是物我。画物的画家,最终画的还是我见。所以,画家的笔最终描绘的是他自己心里的映像。【四】艺术是不可能被“生产”出来的,生产出来的,叫“艺术品”。【五】架构这个过程,是架构师洞见系统内在结构、规律、原则和逻辑的过程。真正的架构师是可以将自己放在系统中去的(例如作为系统中的任何一个角色),只有清晰地理解系统,才能简洁地描述它。而当架构师拿出了他所描述的“作品”的时候,架构这一过程就已经结束了。【六】一滴水滴落的过程中,有多少个形态的变化?In f o Q企业软件开发丛书架构之美精选版推荐序二架构的架构北京无限讯奇信息技术有限公司产品技术高级总监黄冬从编辑手里拿到厚厚的架构之美译稿时,恰巧是我刚刚讲完一场消息系统架构的讲座之后。而正是在昨天,一位想要创业的朋友跟我说要寻找一位懂得“架构”的高人与他一起创业。要知道与代码不同的是,“虚幻”的架构常常让人认为其有很多玄妙之处,只因它大多难以落在纸上。特别是与很多大师谈及架构时,经常落入他们的一些“陷阱”,并往往为自己达不到大师的精明与技巧而叹息。殊不知,被我们所津津乐道的这些架构,是他们在日常工作里经历了大量的错误、重复的尝试、无数的代码、长久的考验所积淀下来的只言片语。本书将数十人的经历与只言片语,经过深思熟虑后抽象出规律,使之可以不断复用。而另一方面,又将架构的过程娓娓道来,尝试让读者思考架构的过程与思路。在这里,更多的过程与思考被展现出来,更多的原因与为什么让我们了解。这本书里展现了很多绚丽的故事,犹如士兵阅读将军的传记一样,阅读本书将会让你更鼓起勇气追寻大师们的脚步,但永远要记住,每一滴汗水才真正是你成长路上的每一个记号,要在自己的工作里更深地去理解每一处不同,架构出属于自己的系统。感谢译者和出版者为我们带来这样一本传奇的架构故事书。In f o Q企业软件开发丛书架构之美精选版推荐序三美丽架构的含义腾讯R&D研发总监(Tencent Director Of R&D Development)资深技术专家(Senior Technology Expert)王速瑜古人形容美女之美:“增之一分则太长,减之一分则太短”,深刻地揭示了“恰到好处”的美丽含义。当我拿到架构之美书稿时,我发现美丽的含义如此相似。美丽至简。美丽的架构应尽可能简单,但不要过于简单。书中通过多种例子表达了这个最基本的道理。我见过很多大型的软件架构,从大型的电信网络管理系统,到大规模应用的互联网架构,以及企业级的ERP软件,系统总是遵循从无到有,从简单到复杂,再到简单这样的过程。最终,支撑这些大型系统稳定可靠运行的就是这个最基本的道理。美丽的架构应尽可能精益,并且是演进式发展的。当你架构一个亿万人同时在线的大规模网站系统的时候,你无法从一开始就提供最完善的解决方案,它应该是随着用户的增长而可扩展的。精益的思想让你避免了过度设计,也使架构不断演进,趋于完美。书中从企业级应用架构、用户级应用架构等多个角度提供了相应的解决方案,对于架构师无不是一顿美味的大餐。深夜看完这本书稿后,我发现,架构之美并不简单,它没有定法。但是,它将为架构师们提供一把进入“美丽架构艺术馆”大门的钥匙。拿起它,您将会开启这扇大门!In f o Q企业软件开发丛书架构之美精选版推荐序四美丽架构之道构建高性能Web站点作者Web架构实践者郭欣我无法给架构下一个简单的定义,因为任何定义都会束缚你对架构的无限想象。不可否认,架构师早已出现在人类几千年前的各项生产活动中,比如建筑、音乐。而在计算机软件及Web领域,架构的设计直接影响着系统的生产,比如开发过程和效率、代码和组件复用性等,同时也影响着系统的可用性、可伸缩性、性能、容量可预测性等。本书更加关注架构之美。美丽的架构同样无法定义,可它却一定是自然的、简单的、可复用的、人文的,甚至是外行人也可以细细品味其思想的。当我看到超市的多个收银台排满长队时,便想到服务器并发处理性能和容量;当我看到十字路口的车辆等待转弯时,便想到它通过缓存思想来提高交通吞吐率。那么如何设计出美丽的架构呢?从代码逻辑到物理网络,从单机到分布式,无数的技术可供架构师选择,如分层、组件化、服务化、标准化、缓存、分离、队列、复制、冗余、代理等,不过它们仍然只是“术”的范畴,而何时何处如何恰到好处地使用它们才是“道”的范畴,比如顿悟变化的道理,在博弈中寻找平衡,以系统化的角度来分析问题,寻找相对与绝对的奥秘、开放的心态然而,这个领域实在是太年轻了,我们需要更多的例子和经验,本书将让你大开眼界!In f o Q企业软件开发丛书架构之美精选版译者序架构与美王海鹏人们在生活和工作中发现美并创造美,软件开发和架构设计也不例外。架构之美体现了关注点的分离与结合。在软件设计中,设计师需要考虑多方面的关注点。漂亮的架构设计让这些关注点尽可能分离,然后以最简单的机制结合在一起,从而得到高内聚、低耦合的系统。例如在Darkstar项目中,架构师们考虑的重点就是如何将多人在线游戏的游戏逻辑与系统的可伸缩性分离开来,让游戏的开发者只要遵守少量的规则,就能够像编写单机游戏一样编写大规模多人在线游戏。又如REST架构风格,体现了对资源命名、请求处理和资源物理表现形式的关注点分离。资源的名称与请求资源时服务器的处理方式无关,请求者无需知道服务器端采取的技术,并且请求者本来就不关心服务器端的处理技术。资源的物理表示形式可以通过内容协商来决定,使系统可以支持多种物理表示形式,并可以方便地扩展。架构之美注重表达的简洁性。“Dont Repeat Yourself”,好的架构致力于消除各种类型的信息重复。从结构化程序设计中的子程序和函数,到面向对象程序设计中的继承,无不体现了对表达简洁性的特殊偏爱。在敏捷方法学中,消除重复则是重构的主要目的之一。爱因斯坦说:“让它尽可能简单,但不要过于简单。”我们需要考虑所有必须考虑的关注点,然后用简洁漂亮的架构体现我们的关注。同时,简洁的架构之美也降低了软件的总体成本,从这个意义上说,“简洁性”又可以称为“经济性”。架构之美需要解决实际问题,它既是艺术,也是生活。软件像建筑一样,它的美不能脱离它的实用价值。Bjarne Stroustrup说,人类文明运行于软件之上。每一个软件都有自己的架构,这些架构有的很美,有的不太美。从艺术的角度来说,美是创造矛盾并解决矛盾。架构的多关注点和表达简洁性就是一种矛盾,美丽的架构提供了这一矛盾的解决方法,让我们的内心产生一种愉快的感觉。In f o Q企业软件开发丛书架构之美精选版架构之美需要经过专业的学习才能更好地欣赏和创造。和所有的艺术之美一样,不是说不经过专业学习就不能欣赏,但是经过了专业的学习,就能更好地欣赏这种美的种种精妙之处。如果想要创造出这种美,那就必然要经过长期的专业学习。架构之美经过时间打磨。像Facebook面向数据的Web服务、FQL和FML架构,是在对应不同实际需求的过程中逐渐发展起来。在应用程序架构形成的过程中,设计者不断面对新的关注点需求,不断对已有的架构进行修改,并发展出新的架构组件。这就是所谓的“演进式架构”。只有变化是永恒不变的。在架构设计初期,设计者会将一些关注点有意推迟到将来考虑,例如持久和并发。对于这些暂不考虑的关注点,设计者对它们的实现方式尽可能不做任何假定,从而保留更多的可能性,让不同关注点之间的耦合尽可能小。架构之美没有定法。虽然有一些法则可供我们参考,却没有非如此不可的。金刚经云:“一切贤圣,皆以无为法而有差别。”参加本书翻译工作的人员还有蔡黄辉、徐锋、王海燕、李国安、周建鸣、范俊、张海洲、谢伟奇、林冀、钱立强、甘莉萍。在这本书的翻译过程中,我受益良多,因此郑重地向大家推荐它。xii译者序In f o Q企业软件开发丛书架构之美精选版作译者简介作者简介Till Adam在年轻时学习了哲学、比较文学、美国研究和音乐学,职业是音乐人。由于没有发财和出名,他转而攻读科学硕士,学习了数学、计算机科学和商业。多年从事自由软件的经历(特别是对KDE的贡献)教会了他编程,也为他带来了在KlarlvdalensDatakonsult AB工作的机会,目前他在该公司负责协调KDE的开发和其他与自由软件相关的活动。他和他的妻子、女儿住在德国柏林。Jim Blandy在1990年至1993年间为自由软件基金会维护GNU Emacs,和Richard Stallman一起发布了Emacs的第19个版本。他是Subversion版本控制系统的最初设计者之一。他也是CVS版本控制系统、GNU调试器(GDB)、Guile扩展语言库和一个编辑基因序列的Emacs程序的贡献者。他现在为Mozilla公司工作,工作内容是SpiderMonkey,即Mozilla的Javascript编程语言的实现。Jim和他的妻子、两个女儿住在俄勒冈州的波特兰。Mirko Boehm从1997开始就是KDE的开发者,在1996年至2006年间是KDE e.V.委员会的成员。他毕业于德国汉堡Helmut Schmidt大学的商业专业。在他的闲暇时间里,他阅读纸版书籍、与家人在一起,试图远离计算机。他目前在德国柏林为KlarlvdalensDatakonsult AB工作,负责跨平台软件和嵌入式软件开发。Christopher Dennis自2005年JCP项目开始时就是项目的主要开发者。Chris在牛津大学读博士时开始使用Java。此前,他使用过各种编程语言,从十六进制小键盘上编写的Z80机器码到PHP和JavaScript。他对特殊情况、编码技巧和偶尔有点丑陋的临时编码很有兴趣,喜欢用各种语言编写紧凑的、优雅的代码。Dave Fetterman是Facebook的工程经理,他在那里创建了Facebook平台项目。在2006年加入Facebook之前,他是一名软件工程师,参加Microsoft开发者部门的项目,包括.NET的通用语言运行环境(CLR)。他喜欢为其他开发者创建软件,也喜欢对愿意听的人发表长篇大论。他拥有应用数学的学士学位,并在2003年获得了哈佛大学的计算机科学硕士学位。Keir Fraser是XenSource的创始人之一,XenSource现在是Citrix Systems公司的一部分。他也是Xen系统管理程序的首席架构师。Keir在2002实现了Xen的第一个版本,作为他In f o Q企业软件开发丛书架构之美精选版在剑桥计算机实验室攻读博士学位时的一项娱乐。在该项目成为大规模的社区合作的过程中,他继续作为主要的开发者。他因在无锁并发控制方面的工作于2004年获得了博士学位,并在同年成为一名教师。Pete Goodliffe是一名程序员、专栏作家、演说家和作家,从来不在同一软件领域做过多的停留。Pete的热门书籍Code Craft(No Starch Press)是对整个编程追求的实际而有趣的调查大约600页,真是了不起!他对制革很有热情,而且不穿鞋。Georgios Gousios是一名职业研究者,接受的教育和软件工程有关,热衷于软件开发。目前,他正在希腊的雅典经济与商业大学完成他的博士论文。他的研究兴趣包括软件工程、软件质量、虚拟机和操作系统,他拥有英国曼彻斯特大学的科学硕士学位。Gousios为多个开源软件项目贡献过代码,并参与了各种学术项目和商业项目的研究与开发。他是SQO-OSS项目的项目经理、设计权威和主要开发成员,为评估软件质量探索一些创新的方法。在他的学术生涯中,Gousios在会议和杂志上发表了10篇技术论文。Gousios是ACM、IEEE、Usenix Association和Technical Chamber of Greece的成员。Dave Grove是IBM的T.J.Watson研究中心动态优化组的一名研究员。他的主要研究兴趣包括分析和优化面向对象语言、虚拟机设计和实现、JIT编译、在线反馈导向的优化和垃圾收集。他在1998年参加了Jalapeo项目,是这个优化编译器和适应式优化系统首个实现的主要贡献者。自Jalapeo在2001年作为Jikes RVM开放源码以来,他一直是JikesRVM核心团队和指导委员会的活跃成员。John Klein是软件工程研究所(SEI)的高级技术人员,他的研究方向是“众系统之系统”的架构方法,并帮助个人、团队和组织机构改进他们的软件架构能力。在加入SEI之前,John是Avaya公司的首席架构师。在Avaya,他负责开发多模式的代理、通信分析的架构,以及为各种客户交互产品创建并改进架构。在此之前,John是Quintus的一名软件架构师,在那里他设计了第一款获得商业成功的多渠道集成联系中心产品,并导致了Quintus兼并了另外两家公司,实现了产品组合的技术集成。在加入Quintus之前,John曾为多家视频会议和视频网络业的公司服务。他的职业生涯开始于Raytheon,在那里他为雷达信号处理、多光谱图像处理、并行处理架构和算法提供硬件和软件解决方案。John拥有Stevens技术学院的学士学位和Northeastern大学的硕士学位。他是ACM和IEEE计算机学会的成员。Greg Lehey的漫长职业生涯在德国和澳大利业度过,他曾为德国空间研究所工作,也曾为Univac、Tandem、Siemens-Nixdorf和IBM等计算机制造商工作,也曾作为一些没名气的软件公司的大客户,还曾做过独立的咨询顾问。他的活动范围很广,包括从内核开发到产品管理,从系统编程到系统管理,从处理卫星数据到为油泵编程,从生产xiv作译者简介In f o Q企业软件开发丛书架构之美精选版CD-ROM到把自由软件移植到DSP指令集上。他是FreeBSD核心团队的成员,也是澳大利业UNIX用户协会的主席。他是FreeBSD和NetBSD项目的开发者,也是PortingUNIX Software和The Complete FreeBSD,Fourth Edition(OReilly)的作者。他还以编写商业应用软件而闻名。Greg在2007年退休,将多出来的时间用于品味生活。现在,休闲活动占据了他的大多数时间,但这还不够,他还听古典木纹唱片、烹饪、酿啤酒(他开发了一个计算机控制的发酵系统)、做园艺、骑马和摄影。他也对一些历史题材感兴趣,包括古代的难解的欧洲语言。他的主页是:http:/ Louridas在20世纪80年代通过一台Sinclair ZX Spectrum开始涉足计算机。从那时起,他就开始用机器语言进行编程,而且非常喜欢编程。他在雅典大学信息系获得了计算机科学学士学位,在曼彻斯特大学获得了计算机硕士和博士学位。这些年来,他一直为私人机构开发软件,现在,他在希腊研究和教育网络(GRNET)工作。他也是雅典经济与商业大学(AUEB)软件工程和安全(SENSE)研究组的成员。他发表的文章范围很广,从人类学到加密,从仪表展示到软件工程。他特别喜欢寻找计算机世界和其他领域的联系。Stephen J.Mellor在为软件开发创建有效的工程方法方面,是国际公认的先行者。在1985年,他出版了广为阅读的Ward-Mellor三卷本Structured Development for Real-TimeSystems(Prentice Hall);在1998年,他的书首次定义了面向对象分析。Stephen还在2002年出版了Executable UML:A Foundation for Model-Driven Architecture(Addison-Wesley Professional)。他最近的一本书MDA Distilled:Principles of Model-DrivenArchitecture(Addison-Wesley Professional)在2004年出版。他在对象管理组织(OMG)中活动积极,是为UML添加可执行动作的协会的主席,他最近完成了可执行UML的标准。他是敏捷宣言的签名者之一。他是OMG架构委员会的两任成员,IEEE软件顾问委员会的主席,最近,他成为Mentor Graphics的嵌入式软件部门的首席科学家。Bertrand Meyer是ETH Zurich的软件工程教授,也是Eiffel软件的首席架构师,他领导并设计了EiffelStudio环境和大量的库。他是一些畅销书的作者,其中包括获得Jolt大奖的Object-Oriented Software Construction(Prentice Hall)。他也因为在对象技术和Eiffel方面的工作获得了ACM软件系统大奖和Dahl-Nygaard大奖,并获得了St.Petersburg州立技术大学的荣誉博士学位。他的研究对象涉及面向对象技术、编程语言、软件验证(包括测试、并发和规范方法)。他也是一名活跃的顾问和讲师。William J.Mitchell是MIT架构和媒体艺术与科学系的Alexander Dreyfoos教授,他领导着MIT媒体实验室和MIT设计实验室的Smart Cities团队。他以前曾担任MIT架构和计划学院的院长。他最近的新书是Worlds Greatest Architect和Imagining MIT(都由作译者简介xvIn f o Q企业软件开发丛书架构之美精选版MIT出版社出版)。Derek Murray是剑桥大学计算机实验室的博士生。他在2006年加入Xen项目,主要工作是通过重新设计控制栈来改进Xen的安全性。他现在的研究主要是改进大规模分布式系统的容错性,但他还是偶尔会涉及系统核心。Derek在2006年从爱丁堡大学获得了高性能计算专业的硕士学位,2005年获得了Glasgow大学的计算机学士学位。Rhys Newman在十多年前于牛津大学完成博士学位时,就开始使用Java,那时Java还只有几年历史。在他早期的研究中,他利用纯Java环境展示了高性能实时场景处理的实现方法,即使当时还是使用早期JIT化的JVM。从那时起,他同时在学界和业界工作,一次次证明Java平台实际上有多灵活、多高效、多快。在超过20年的软件工程生涯中,他获得了多个业界杰出技术奖项,最近他回到了牛津,承担了网格计算领域的突破性研究工作。JPC是最新研究工作的一部分。Michael Nygard致力于在全国帮助开发者提高水平和减少痛苦。他和他遇到的每一个人分享他对改进的热情和活力,有时甚至没有得到对方的同意。Michael花了20年中的大部分时间学习对专业程序员有意义的事,他关心艺术、质量和技艺。他总是愿意在那些全职的、真心投入工作的开发者(那些“觉醒的”开发者)身上花时间。在另一方面,他不能容忍缺乏兴趣或浪费潜力。Michael在近20年来一直是专业的程序员和架构师。在这段时间里,他为美国政府、军方、银行、金融业、农业和零售业交付了运营系统。通常,Michael都要面对他自己开发的系统。这种实际运营的经历改变了他对软件架构和开发的看法。他参与了一个Tier 1零售网站的初期开发,并且常常作为其他在线业务的“流动解决问题专家”。这些经验让他对在相当不友好的环境下构建高性能、高可靠性的软件有了独特的看法。最近,Michael编写了Release It!Design and DeployProduction-Ready Software(Pragmatic Programmers),该书获得了2008年的Jolt生产力大奖。他的其他文字可以在http:/ Rogers是曼彻斯特大学高级处理器技术研究组的研究员。他的博士研究工作是关于Dynamite二进制翻译器的,该技术实现了商用,现在是许多二进制翻译器产品的一部分,包括Apple的Rosetta。他最近的学术研究工作一直是编程语言设计、运行时环境和虚拟机环境,特别是如何自动创建它们并有效地使用并行技术。他是Jikes研究虚拟机的主要贡献者,是开发团队的核心成员。Brian Sletten是自由的、受过艺术教育的软件工程师,关注forward-learning技术。他曾担任过系统架构师、开发者、现场指导者和培训师。他在世界各地的会议上发表演讲,xvi作译者简介编辑注:此书由机械工业出版社引进出版,书名为代码质量(注释版),书号为:978-7-111-22671-0。In f o Q企业软件开发丛书架构之美精选版并为一些在线出版物编写关于面向Web技术的文章。他的经验涉及国防、金融和商业领域。他曾设计并建造了网络矩阵式交换控制系统、在线游戏、3D仿真/可视化环境、因特网分布式计算平台、P2P和基于Web的语义系统。他拥有William and Mary大学的计算机科学学士学位,目前居住在弗吉尼亚的Fairfax。他是Bosatsu咨询公司的总裁,该公司为Web架构、面向资源的计算、语义Web、高级用户界面、可伸缩系统、安全和其他20世纪末21世纪初的技术提供专业的咨询服务。Diomidis Spinellis是希腊雅典经济与商业大学管理科学与技术系的副教授。他的研究领域包括软件工程、计算机安全和编程语言。他也编写了两本“开放源码方面”的书,由Addison-Wesley出版:Code Reading(获得了2004年的软件开发生产力大奖)和Code Quality(获得了2007年软件开发生产力大奖,编辑注)。他也写了几十篇科学论文。他是IEEE Software编辑委员会的成员,负责定期的“Tools of the Trade”栏目。Diomidis是FreeBSD的提交者,也是UMLGraph和其他开源软件包、库和工具的开发者。他拥有软件工程的硕士学位和计算机科学博士学位,都是在Imperial College London获得的。Diomidis是ACM的高级成员,也是IEEE和Usenix Association的成员。Jim Waldo是Sun微系统实验室的杰出工程师,负责研究下一代大规模分布式系统。他目前是Project Darkstar的技术负责人,该系统是针对大规模多人在线游戏和虚拟世界而设计的多线程、分布式基础设施。在此之前,他曾是Jini的首席架构师,Jini是基于Java的分布式编程系统。Jim编写了The Evolution of C+:Language Design in theMarketplace of Ideas(MIT出版社),也是The Jini SpecificationAddison-Wesley的合著者之一。他曾是美国国家学术委员会的共同主席,编辑并出版了EngagingPrivacy and Information Technology in a Digital Age一书。Jim也是哈佛大学的辅助教师,在计算机科学系教授分布式计算和策略与技术相关的内容。Jim拥有马萨诸塞大学(Amherst)的哲学博士学位。David Weiss拥有Union College的计算机科学学士学位,并拥有马里兰大学的计算机科学硕士和博士学位。他目前是Avaya实验室的软件技术研究部的领导,他关注软件开发效率改进的普遍问题和Avaya软件开发过程改进的特殊问题。在第二个问题上,他领导了Avaya软件技术研究中心。以前,他曾是朗迅技术贝尔实验室软件生产研究部的主任,该部门负责研究如何改进软件开发的效率。在加入贝尔实验室之前,他是软件生产力协会(SPC)复用和度量部门的主任,该协会由14个大型的美国航空公司组成。在加入SPC之前,Weiss博士在技术评估办公室度过了一年的时间,在那里他与同事共同完成了Strategic Defense Initiative的技术评估。在19851986学年,他是Wang Institute的访问学者,在许多年里,他一直是华盛顿特区Naval研究实验室(NRL)计算机科学和系统部门的研究员。他也是一名程序员和数学家。Dave的主要研究方向是软件工程领域,特作译者简介xviiIn f o Q企业软件开发丛书架构之美精选版别是软件开发过程和方法学、软件设计和软件测量。他最为人知的是发明了软件测量的“目标-问题-测量指标”方法,软件系统模块化结构的工作,以及软件生产线工程的工作。他是Synthesis过程及其后继FAST过程的共同发明人。他与别人共同编著了两本书:Software Product-Line Engineering和Software Fundamentals:Collected Papers ofDavid L.Parnas(都由Addison-Wesley出版)。译者简介王海鹏1994年毕业于华东师范大学。拥有理学士(物理)和文学士(英国语言文学)学位。独立的咨询顾问、培训讲师、译者和软件开发者。已翻译十余本软件开发书籍,主题涵盖敏捷方法学、需求工程、UML建模和测试。拥有15年软件开发经验,目前主要的研究领域是软件架构和方法学,致力于提高软件开发的品质和效率。蔡黄辉江苏启东人。1999年毕业于上海交通大学,毕业后一直从事软件开发工作,主要使用Java做Web方面的底层开发。现居住在上海。联系方式:caihuanghui 。徐锋中国系统分析员顾问团(CSAI)软件工程首席顾问,中国软件技术大会杰出贡献专家,资深咨询顾问。主要研究领域为需求工程、系统分析与设计、软件估算,致力于推动软件工程方法论的落地应用。曾在程序员等媒体发表了实战OO、项目管理三步曲、大话Design等多个专栏文章,著有软件需求最佳实践、UML面向对象建模基础等多本书籍,翻译了UML 2.0实战、AOSD中文版、Cloud to Code中文版等多本相关技术书籍。xviii作译者简介In f o Q企业软件开发丛书架构之美精选版第 1 章架构概述John KleinDavid Weiss1.1 简介建筑师、音乐家、作家、计算机设计师、网络设计师和软件开发者都在使用“架构”这个术语,其他人也用(你有没有听说过“食物架构”?),然而不同的用法其结果也不同。建筑与交响乐完全不同,但都有架构。而且,所有的架构师都在谈论他们工作中的美,以及因此而导致的结果。建筑师可能会说,一座建筑应该提供适合工作或生活的环境,而且它应该看起来很美。音乐家可能会说,音乐应该能演奏,包含能够辨明的主题,而且它应该听起来很美。软件架构师可能会说,系统应该对用户友好、响应及时、可维护、没有重大错误、易于安装、可靠,应该通过标准的方式与其他系统通信,而且也应该是美的。这本书为你提供了一些美丽架构的详细例子,它们来自于各类计算机系统。相对来说,计算机是比较年轻的一个学科。因为年轻,所以不像建筑、音乐或写作等领域那样,有那么多的例子;也因为年轻,则需要更多的例子。我们希望这本书能满足这种需要。在你开始研究这些例子之前,我们希望你考虑以下两个问题:1)什么是架构?2)美丽的架构都有哪些特性?你会在这一章中看到架构的不同定义,每个学科都有自己的定义,所以我们将首先探讨不同学科中的架构有何共同点,以及人们试图用架构解决哪些问题。具体来说,架构有助于确保系统能够满足其利益相关人的关注点,在构想、计划、构建和维护系统时,架构有助于处理复杂性。13In f o Q企业软件开发丛书架构之美精选版1然后我们将介绍架构的定义,展示如何将这个定义应用于软件架构,因为软件是本书后面大部分例子关注的核心。这个定义的关键在于,架构由一组结构组成,这些结构的设计目的是让架构师、构建者,以及其他利益相关人看到他们的关注点是如何得到满足的。在本章末尾,我们将讨论美丽架构的特性,并引用一些例子。美的核心在于概念完整性即一组抽象和规则,在整个系统中尽可能简单地应用它们。在讨论中,我们将“架构”作为一个名词,它意味着一组工件,包括像蓝图和构建规范这样的文档。这些工件描述了要构建的对象,在这种描述中,该对象被视为一组结构。某些人也把“架构”作为一个动词,用来描述创建这些工件的过程,包括由此而导致的工作。然而,正如Jim Waldo和其他人曾指出的,没有什么过程可以保证你学了以后就能创造出好的系统架构,更不必说美的架构了(Waldo 2006),所以我们将更关注工件,而非过程。架构:“建造的艺术或科学;特别是设计和建造人类使用的建筑时的艺术或实践,同时考虑到美学因素和实用因素。”The Shorter Oxford English Dictionary(小型牛津英语字典,第5版)在所有学科中,架构都提供了一种方式来解决共同的问题:确保建筑、桥梁、乐曲、书籍、计算机、网络或系统在完成后具有某些属性或行为。换言之,架构既是所构建系统的计划,确保由此得到期望的特性,同时也是所构建系统的描述。维基百科上说:“根据这方面已知最早的著作,即Vitruvius的On Architecture,好的建筑应该美观(Venustas)、坚固(Firmitas)、实用(Utilitas);架构可以说是这三方面的一种平衡和配合,没有哪一个方面比其他方面更重要。”我们谈到交响乐的“架构(architecture)”,反过来,又将架构(architecture)称为“凝固的音乐”。Deryck Cooke,The Language of Music(音乐的语言)好的系统架构展示了架构完整性。也就是说,它来自于一组设计规则,这组规则有助于减少复杂性,并可以用于指导详细设计和系统验证。设计规则可能包含特定的抽象,这些抽象总是以同样的方式使用,诸如虚拟设备等。这些规则可能表现为一种模式,如管道和过滤器。在最理想的情况下,存在一些可以用于验证的规则,如“在设备失效时,所有某一类的虚拟设备都可以用任何其他同类的虚拟设备代替”,或“所有竞争同一资源的进程必须具有相同的调度优先级”。当代的架构师可能会说,待构建的对象或系统必须具有以下特征:具备客户要求的功能。能够在要求的工期内安全地构建。14第1章In f o Q企业软件开发丛书架构之美精选版2性能足够好。可靠的。可用的,并且使用时不会造成伤害。安全的。成本是可以接受的。符合法规标准。将超越前人及其竞争者。我们将计算机系统的架构定义为一组最小的特征集,它们决定了哪些程序将运行,以及这些程序将得到什么结果。Gerrit Blaauw 和Frederick Brooks,Computer Architecture(计算机体系结构)我们从来没有看到过一个复杂系统能够很好地满足上述特征。架构是一种折中决定改进其中一个特征常常会对其他特征产生负面影响。架构师必须确定怎样做是足够好的,方法就是发现特定系统的重要关注点,以及充分满足这些关注点的条件。架构观点中的常见思想是结构,每种结构都由各种类型的组件及其关系构成:它们如何组合、相互调用、通信、同步,以及进行其他交互。组件可以是建筑中的支架横梁或内部腔室、交响乐中的旋律、故事中的章节或人物、计算机中的CPU和内存、通信栈中的层或连接到一个网络上的处理器、协作的顺序过程、对象、编译时的宏、构建时的脚本。每个学科都有自己的一套组件和组件间的相互关系。从更大的范围来说,术语“架构”总是意味着“不变的深层次结构”。Stewart Brand,How Buildings Learn面对不断增长的系统复杂性,以及它们内部和相互之间的交互,由一组结构形成的架构提供了对付复杂性的主要手段,目的是确保得到的系统具备所要求的特征。结构为我们提供途径,将系统化解为一些交互的组件。每种结构都是为了帮助架构师理解如何来满足特定的关注点,如可变性或性能。展示某些关注点得到满足时,可能会影响到其他方面的关注点,但架构师必须能够说明所有关注点都已得到满足。网络架构:构成一个网络的通信设备、协议和传输链路,以及它们的组织方式。http:/www.wtcs.org/snmp4tpc/jton.htm 架构概述15In f o Q企业软件开发丛书架构之美精选版31.1.1 建筑师的角色在设计、构建和修复建筑时,我们指定关键的设计师为“建筑师(architects)”,并赋予他们广泛的职责。建筑师准备建筑最初的草图,展示外观和内部布局,与客户讨论这些草图,直至所有相关方都达成一致意见,认为展示的就是他们想要的。这些草图是抽象:它们关注建筑中某些方面的适当细节,而忽略其他的内容。当客户和建筑师在这些抽象上达成一致意见之后,建筑师会准备或监督准备更为详细的图纸,以及相关的文字规格说明。这些图纸和规格说明描述了建筑的许多“实质性”细节,如管道、壁板材料、窗户玻璃和电线等。在极少的情况下,建筑师简单地将详细规划交给建造者,建造者将根据规划完成项目。对更重要一些的项目,建筑师会继续参与,定期检查工作,并且可能会建议变更,或接受来自建造者和客户的变更建议。如果建筑师监督项目,仅当他确认项目充分符合了规划和规格说明的要求,项目才算完工。我们请一名建筑师是为了确保:1)设计满足客户的需要,包括前面提到的那些特征;2)设计具有概念完整性,处处运用了相同的设计原则;3)设计满足法规和安全的要求。建筑师职责的一个重要方面是确保设计概念在实现时得到一致的体现。有时候,建筑师也充当建造者和客户之间的协调人。哪些决定需要由建筑师做出,哪些决定由其他人做出,人们对这个问题常有不同意见,但我们清楚,建筑师将做出重要决定,包括所有对结构的可用性、安全性和可维护性产生影响的那些决定。音乐作曲与软件架构虽然人们常用建筑架构设计来类比软件架构,但音乐作曲可能是更好的类比。建筑师创建的是相对静止的结构(该架构必须考虑到人员和服务在建筑内的移动,以及承重结构)的静态描述(蓝图或其他图纸)。在音乐作曲和软件设计中,作曲家(软件架构师)创建一段音乐的静态描述(架构描述和代码),这段音乐以后将演奏(执行)许多次。在音乐和软件中,设计都依靠许多组件的交互来得到期望的结果,结果依赖于演奏者、演奏环境,以及演奏者所做的诠释。1.1.2 软件架构师的角色软件开

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开