架构之美第十三章-美丽的架构

本文探讨了如何评判一个架构是否足够好,并提出了进入‘美丽架构艺术馆’的条件。通过分析A-7E舰载飞行处理器架构、朗讯5ESS电话交换机软件架构以及万维网的架构,展示了在实用性、构建性、持久性及开发人员满意度方面的考量。进一步,文章介绍了如何在不同系统和应用领域中识别和欣赏这些令人高兴的特征,同时强调了概念完整性的价值。

所有前面的方法都有助于我们判断一个架构是否“足够好”—也就是说,是否有可能指导开发者和测试者构建一个系统,并满足系统的利益相关人的功能和质量关注点。在我们每天使用的系统中存在着许多好的架构。

       但是,超越足够好的架构是怎样的呢?如果有一个“软件架构名人堂”,那会怎样?哪些架构会陈列在这个艺术馆的墙上?这个想法可能没有你想象的那么遥远—在软件产品线领域,这样的“名人堂”的确存在。(注1)进入“软件产品线名人堂”的条件包括获得商业上的成功、影响其他产品线的架构(其他产品线可能“借用、复制、窃取”这个架构)、拥有足够的文档从而让其他人“不必通过道听途说”就能够理解该架构。我们将为更一般的“架构名人堂”或“美丽架构艺术馆”的候选者设立怎样的条件呢?首先我们应该认识到,这是一个软件系统的艺术馆,而不是其他艺术馆,我们的系统构建的目的是为了使用。所以,我们也许从一开始就应该关注该架构的实用性:它应该每天被许多人使用。

             但是,在使用架构之前,它必须先构建,所以我们应该关注该架构的可构建性。我们会寻找那些具有定义良好的使用结构的架构,它们支持增量式构建,这样,通过每次构建迭代我们都能得到一个有用的、可测试的系统。我们也会寻找那些具有定义良好的模块接口、本来就很好测试的架构,这样,构建的过程就是透明的、可见的。

        接来下,我们想寻找那些展示了持久性的架构—也就是说,那些经过了时间考验的架构。我们生活在一个技术环境以从未有过的加速度变化的年代。美丽的架构应该预期到
变更的需要,允许期望的修改能够容易而有效地进行。我们想寻找那些避免了“衰老地平线”(Klein 2005)的架构,超过了这条“衰老地平线”,维护将变得代价极大,以至于不可能进行。
         最后,我们还想寻找这样一些架构,它们的特征让使用、构建、测试这些架构的开发人员和测试人员,以及由它而形成的系统的用户感到由衷的高兴。为什么开发人员会高兴?因为它让他们的工作变得容易,而且更有可能得到一个高品质的系统。为什么测试人员会高兴?作为测试过程的一部分,他们必须尝试模拟用户的行为。如果他们高兴,可能用户也会感到高兴。如果厨师对他的烹调的菜品感到不高兴,那么品尝这些菜品的顾客也可能会感到不高兴。

         不同的系统和应用领域为这些架构提供了许多机会,展示它们特有的令人高兴的特征,但概念完整性是一项跨越所有领域的特征,并且总是让人感到高兴。一致的架构学习起来更容易、更快,当知道了一点之后,你就可以开始预测其余的部分。不需要记住并处理特殊的情况,代码更干净,测试集更小。一致的架构不会为做同一件事情提供两种(或更多)方法,不会让用户浪费时间进行选择。正如Ludwig Mies van der Rohe所说的,好的设计,“少即是多”。爱因斯坦可能会说,美丽的架构就是尽可能简单,但不要过于简单。

         有了这些判别条件,我们推荐第一批进入“美丽架构艺术馆”的候选者。

         第一个是A-7E舰载飞行处理器(Onboard Flight Processor,OFP)的架构,它由海军研究实验室(Naval Research Laboratory,NRL)在20世纪70年代后期开发,在(Bass、Clements和Kazman 2003)有介绍。尽管这个系统从未实现量产,但它满足了所有其他的判别条件。这个架构对软件架构的实践曾经产生了巨大的影响,它展示在真实世界的系统中,将设计时的信息隐藏模块和使用结构与运行时的进程结构分离。因为美国政府资助并开发了这个架构,所以所有项目文档都提供给了公共领域。(注2)这个架构具有定义良好的使用结构,促进了系统的增量式构建。最后,信息隐藏模块结构为分解系统提供了清晰一致的准则,实现
了很强的概念完整性。作为嵌入式系统软件架构的榜样,A-7E OFP当然属于我们的艺术馆。

         我们想放入艺术馆的另一个架构是朗讯5ESS电话交换机的软件架构(Carney等1985)。5ESS取得了全球范围的商业成功,为世界各国的网络提供了核心电话网络交换。它成为性能和可靠性的标准,每个单元每小时能处理超过100万次的连接,平均每年非计划宕机时间少于10秒钟(Alcatel-Lucent 1999)。该架构的一些统一概念,如管理电话连接的“半通话模型”,已经成为电话和网络协议领域的标准模式(Hanmer 2001)。除了保持必须处理的通话类型的数目为2n(其中n是通话协议的数目)之外,半通话模式还在操作系统的进程概念和电话的通话类型概念之间建立起了联系,从而提供了简单的设计原则,引入了漂亮的架构一致性。在过去的25年中,开发团队涉及多达3000个人,他们发展并增强该系统。基于它的商业成功、持久性和影响,5ESS架构是我们艺术馆的一件好藏品。

        还有一个我们想放入美丽架构艺术馆的系统,它就是万维网(World Wide Web,WWW)的架构。它由Tim Berners-Lee在CERN创建,在(Bass、Clements和Kazman 2003)中有介绍。万维网当然已经取得了商业上的成功,它转变了人们使用因特网的方式。即使创建了新的应用、引入了新的功能,它的架构仍然保持不变。该架构的整体简单性促成了它的概念完整性,但有一些决定导致了该架构的完整性保持不变,如客户端和服务器端使用同一个库,创建分层架构以实现分离关注点等。核心万维网架构的持久性和它对新扩展、新功能持续支持的能力,使它当之无愧地进入了我们的艺术馆。


什么是建筑师?
夏天很热的一个日子里,一个外乡人沿着一条路在行走。他走着走着,来
到一个人跟前,此人正在路边敲碎石头。
“你在做什么?”他问那个人。
那个人抬头看着他;“我在敲碎石头。你以为我看起来像在干什么?现在
不要妨碍我,让我继续干活。”
这个外乡人继续沿着路走,不久他遇到了第二个在大太阳下敲碎石头的人。
这个人正努力工作,汗滴如雨。
“你在做什么?”外乡人问道。
这个人抬头看他,露出微笑。
“我在为谋生而工作,”他说,“但这个工作太辛苦了。也许你能给我一份更
好的工作?”
外乡人摇了摇头,继续前行。没多久,他遇到了第三个敲碎石头的人。太
阳正是最炙热的时候,这个人非常卖力,汗流如注。
“你在做什么?”外乡人问道。
这个人停了一下,喝了一口水,微笑着抬起他的手,指向天空。
“我在建一座大教堂。”他喘着气说。
外乡人看了他一会儿,说:“我们正打算开一家新公司。你来做我们的总建
筑师怎么样?”


            我们的最后一个例子是UNIX系统,它展示了概念完整性,使用广泛,拥有巨大的影响力。管道和过滤器的设计是讨人喜欢的抽象,允许我们快速构建新的应用。在描述架构、架构师的角色和创建架构时的考虑等方面,我们已经谈了很多,我们也简

单介绍了一些美丽架构的例子。接下来我们邀请你阅读后续章节中详细的例子,这些例子来自于那些技艺精湛的架构师,本书介绍了他们创建并使用过的那些美丽架构。

第一部分 论架构 第1章 架构概述  13 1.1 简介  13 1.2 创建软件架构  19 1.3 架构结构  23 1.4 好的架构  27 1.5 美丽的架构  28 致谢  30 参考文献  31 第2章 两个系统的故事:现代软件神话  33 2.1 混乱大都市  34 2.2 设计之城  40 2.3 说明什么问题  47 2.4 轮到你了  48 参考文献  48 第二部分 企业级应用架构 第3章 伸缩性架构设计  51 3.1 简介  51 3.2 背景  52 3.3 架构  56 3.4 关于架构的思考  61 第4章 记忆留存  67 4.1 功能和约束  68 4.2 工作流 69 4.3 架构关注点  70 4.4 用户反应  90 4.5 结论  90 参考文献  90 第5章 面向资源的架构:在Web中  91 5.1 简介  91 5.2 传统的Web服务  92 5.3 Web  94 5.4 面向资源的架构  99 5.5 数据驱动的应用  102 5.6 应用面向资源的架构  103 5.7 结论  108 第6章 数据增长:Facebook平台的架构  109 6.1 简介  109 6.2 创建一个社会关系Web服务  114 6.3 创建社会关系数据查询服务  121 6.4 创建一个社会关系Web门户:FBML  129 6.5 系统的支持功能  142 6.6 总结  147 第三部分 系统架构 第7章 Xen和虚拟化之  151 7.1 简介  151 7.2 Xenoservers  152 7.3 虚拟化的挑战  154 7.4 半虚拟化  155 7.5 Xen的变换形式  158 7.6 改变的硬件,改变的Xen  163 7.7 经验教训  165 7.8 延伸阅读  166 第8章 Guardian:一个容错操作系统环境  169 8.1 Tandem/16,将来所有的计算机都会像这样构建 170 8.2 硬件  170 8.3 物理布局  172 8.4 处理器架构  172 8.5 处理器间总线  178 8.6 输入/输出  178 8.7 进程结构  179 8.8 消息系统  179 8.9 文件系统  183 8.10 轶闻趣事  188 8.11 弊端  189 8.12 后继者  190 8.13 延伸阅读  191 第9章 JPC:一个纯Java的x86 PC模拟程序  193 9.1 简介  193 9.2 概念验证  195 9.3 PC架构  198 9.4 Java性能技巧  199 9.5 把4GB放入4GB:这不起作用  200 9.6 保护模式的危险  203 9.7 从事一项毫无成功希望的斗争  206 9.8 劫持JVM  210 9.9 终极灵活性  220 9.10 终极安全性  222 9.11 第二次做会更好  223 第10章 元循环虚拟机的力量:Jikes RVM  225 10.1 背景  225 10.2 与运行时环境相关的传言  227 10.3 Jikes RVM简史  229 10.4 一个自足执行的运行时自举  230 10.5 运行时组件  234 10.6 经验教训  246 参考文献  247 第四部分 最终用户应用架构 第11章 GNU Emacs:滋长的特性是其优势  251 11.1 使用中的Emacs  252 11.2 Emacs的架构  254 11.3 滋长的特性  260 11.4 另外两个架构  262 第12章 当集市开始构建教堂  267 12.1 简介  267 12.2 KDE项目的历史和组织结构  269 12.3 Akonadi  274 12.4 ThreadWeaver  289 第五部分 语言与架构 第13章 软件架构:面向对象与面向函数  299 13.1 概述  299 13.2 函数式示例  302 13.3 函数式解决方案的模块性评价  305 13.4 面向对象视图  313 13.5 面向对象模块性的评价和改进  319 13.6 代理:将操作封装到对象中  323 致谢 328 参考文献 328 第14章 重读经典  331 14.1 所有东西都是对象  335 14.2 类型是隐式定义的  342 14.3 问题  348 14.4 砖块和灰浆建筑架构  352 参考资料  359 跋 漂亮地构建 363
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值