BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

阅读者(二十一):美丽的架构

| 作者 张逸 关注 9 他的粉丝 发布于 2012年9月14日. 估计阅读时间: 12 分钟 | 都知道硅谷人工智能做的好,你知道 硅谷的运维技术 也值得参考吗?QCon上海带你探索其中的奥义

美丽的架构究竟是怎样的?架构师们上下求索,孜孜以求,始终不得其解。归根结底,美丽这个词语总还是偏于感性认识,就仿佛音乐之美,绘画之美,不能以尺度来衡量,追求的其实是一种艺术的幽玄与妙悟,述之以规范,述之以标准,就未免落入下乘了。然而,软件架构终归属于工程学的范畴,不能一概以“只可意会不可言传”来搪塞,因为架构知识是可以传递的,架构文档是可以共享的,最重要的是,架构自身是可以评审、验证与实现的。

Stephen J. Mellor在《架构之美》序中,画龙点睛地勾勒出美丽架构的模样,即必须遵循的一些普遍原则,分别为:

  • 一处一个事实
  • 自动传播
  • 架构也包含构建
  • 最少量机制
  • 构建引擎
  • O(G),增长的阶
  • 抵制熵增

这些原则,其实就是架构师的智慧,没有足够深刻的理解与深入实践,是不可能给出如此言简意赅的架构建议的。按照我的理解,这些普适性原则其实就是在说明所谓美丽的架构,就是简单、一致、适应变化并能去除重复的架构。其实,泄露天机的一句话还是Mellor所言——美丽的架构用更少的机制做更多的工作。这就是《架构之美》一书不凡的开篇了。

若是一本平庸的书,必然会惧怕这样精彩绝伦的序,因为它愈发的美,就愈发能照映出正文的丑;它愈发的言之有物,又愈发会衬托出正文的空洞无味。 然而,若是内容也是如此的精彩绝伦,那就无异于锦上添花,珠联璧合了。通透点儿,就是齐活!这就好比一首歌曲的领唱者,倘若一开始就飙出高音,声入云霄。跟唱者没有点儿本事,恐怕就难以为继了;可要都是高手呢?那就真是一场音乐的盛宴了。《架构之美》合唱团荟萃了全球最为顶级的那部分架构师,所以说本书是架构的盛宴,似乎也不为过。

让我们先看看本书的第一部分《论架构》。第1章《架构概述》延续了序言的高屋建瓴,全篇介绍了架构师的角色、软件架构的含义、架构结构,并展示了什么才是好的架构,美丽的架构。虽然仅仅是一些概念的阐释,却仍然不乏真知灼见。例如在本书1.2节,给出了创建软件架构的如下意见:

  • 软件架构师的首要关注点不是系统的功能;
  • 考虑折中;
  • 运用“分而治之”的架构原则;
  • 概念完整性是架构最重要的特征;
  • 一份更完整的清单;
  • 架构会影响组织架构。

第2章《两个系统的故事:现代软件神话》的角度又有所不同。首先它注重实例,讲述了两个软件城市的故事;其次它突出对比,比较了混乱大都市性质的项目与“设计之城”。对比是最好的老师,如果你茫然不知一个系统究竟好在哪里,坏在哪里,通过引入对比,一切的好与坏都被放大,且清晰无比地被标示出来。Pete Goodliffe运用隐喻将设计看作是城市的规划与建设,有效地促进读者的理解,加深了整体认识。本章给出了设计的反模式与模式,引导我们对自己过往的设计进行反思,进行印证。例如,本章图2-4给出的“设计之城”最终架构,就很好地阐释了什么才是好的架构,因为该架构图如此地简单,既能清晰地表达设计者意图,又能很好地保证架构的一致性。同时,该图又突出体现了整个系统的核心功能,并通过引入管道-过滤器模式,建立了一个利于扩展、结构清晰的音频架构。

因为自己工作性质的原因,我重点关注了本书第二部分的内容,即对企业级应用架构的介绍。这也是我阅读本书收获最大的几章内容。例如第3章对伸缩性架构的介绍,以Darkstar开源项目的架构开发为例,较为全面地剖析了整个系统的架构过程。作者特别谈到了该项目支持游戏开发的特征,从而识别出可伸缩性以及并发处理对整个系统的重要性。这就好像是质量属性驱动,或风险驱动,先从最紧要、最核心的部分开始架构的分析,学会取舍,才能更好地遵循帕累托原则,将好钢用到刀刃上。作者对服务的分解代表了整个架构最重要的设计决策,每个服务承担了不同的职责,既保证了关注点分离,又能因为服务的独立性与自治性,保障系统的可伸缩性。例如通信服务中提供的会话服务(Session Service)与通道服务(Channel Service),就能够因为分离而降低通信机制的复杂性。这很好地体现了架构师的抽象能力,这种抽象既能简化模型,又能隐藏实现,保证系统的可移植与可伸缩。文章写到:

“既然所有通信都必须通过Darkstar会话或通道的抽象层,而这些抽象层又不暴露客户端与服务器通信的真实端点,那么在实体通信和通信起止端的实际位置之间就存在着一个抽象层。”

文中还提到了“元服务”的概念,我以为这是该架构设计的点睛之笔。

“这些元服务是网络层面的服务,对于游戏或虚拟世界的程序员是不可见的,但是它们对Darkstar栈中的服务是相互可见的。”

“由于元服务对于游戏或虚拟世界的程序员是不可见的,所以它们在任何时刻都可以改变,不会影响到游戏逻辑的正确性。”

第4章《记忆留存》的作者Michael Nyard是获得Jolt大奖的《Release It!》一书的作者,长期战斗在一线扮演救火队员的角色,架构实证经验非常丰富。而本章在整本书中,也是工程实证主义表现得最为浓烈的一章。Michael完整地介绍了Creation Center项目的架构过程。作者通过明确事实,发现重要问题,然后识别关注点的方式来剖析架构,理解需求到功能实现的映射。作者的讲述都是经验之谈,因而总是显得言之有物。例如在讲解架构模块中的渲染管道时,提出了一种“快速失败”模式,遵循“快速失败、大声失败”的设计哲学。之所以运用这一原则,是因为系统的核心功能是生产照片。这样的生产过程不允许因为软件的原因而导致生产线停下来。这就决定了渲染管道的设计,必须在最早的过程中进行验证。

整章内容让我唯一感到恼怒的就是篇幅太短,许多步骤、技巧以及设计思想都是点到即止,终究有些隔靴搔痒的感觉。作者自己写道:

“我本可以花更多的时间和篇幅来描述每个类、每次迭代或每个设计决定,就像初为人父的人描述宝宝的每次打嗝和摇晃一样。”

我私心更希望Michael Nyard能做到这一点,可惜,这个说明读起来更像是偷懒的借口。

我很喜欢第5章《面向资源的架构:在Web中》。抛开Roy Fielding具有卓越远见以及超凡创造性的那篇博士论文不谈,就REST的讲解而言,本章很好地呈露了REST架构风格的原貌。其实,将REST架构风格引入到企业应用开发中,并非本篇作者的独特见解,譬如说《Rest in Practice》一书的作者,我的同事Jim Webber等人就是这一观点的坚决拥护者。如果对比本章与《REST in Practice》一书,感觉本章更像是《REST in Practice》的浓缩精华版,虽然作者完全不同。短短的篇幅,不仅给读者深入剖析了面向资源架构的本质特征,还对比了传统的Web服务,阐释了Web的性质,算是理清了REST的历史渊源,基本思想。这个基本思想就是“关注点分离”,REST就是将Web中的人机交互看做是人们感兴趣的资源、操作这些资源的动作以及选择收发这些资源的方式,从而得到名词、动词和表示形式三个重要概念。如文中所说:“REST方式的基本工作原理是分离关注逻辑命名资源、操作资源的方式,以及选择的表示资源的方式”。

当然,如果从Richardson提出的成熟度模型来讲,本章并未过多提及第三级服务的特征,即“Web感知的服务级别,支持超媒体作为应用状态的引擎的观念。【注:引自《REST实战(REST in Practice)》第27页。】”因为就Fielding博士的本意而言,REST是要将超媒体作为应用状态的引擎(Hypermedia As The Engine Of Application State,HATEOAS)。这或许是因为篇幅所限的原因吧。坦白说,这其实也是本书最大的硬伤。因为荟萃了如此众多的优秀架构师,势必不可能给出太多的空间让作者自由发挥。容量的限制决定了整本书的每一章节都是欲言又止的感觉。似乎讲解通透了,读起来又还不够明白。必须要再三研读,方才能明白字里行间的真意。

我仅仅是粗略地阅读了本书的第三部分,主要还是因为自己对系统架构的知识远远不够,没有这种基础,也就缺失了理解这些内容的资格。于是就畏难而退,跳到了第四部分和第五部分。第12章介绍的Akonadi框架从最初的层划分草案到最后“从里向外、而非自底向上”架构的演进,可谓深得我心。虽然架构策略以及系统背景并不相同,但就我这几年的架构经验来讲,我确实越来越重视内核模式在关注点分离中发挥的作用。许多系统的架构确乎都可以从纵向与横向进行分解,从而获得系统的应用逻辑架构与业务逻辑架构;然而从内核的观点来看,则可以理解为系统多个核心功能的交集,是整个系统的共同品质。它并不一定处于架构的最底层,如基础设施层所包含的内容;也不一定是公共的体现横切关注点的切面(aspect),而是系统最不可缺失的处于核心地位的高内聚职责。

第13章是Bertrand Meyer的大作,提供了很好的例子对比了函数式语言与面向对象语言的优缺点。其实本章的主要观点到如今已经没有太多人会反对。近几年函数式语言的迅猛发展,以及多语言开发的趋势已经说明了二者之间的互补性。本章最有价值的还是Meyer对函数式的推导与优势评价,以及包括对面向对象最基本要素如继承、多态、代理的剖析,这些内容对今时今日掌握面向对象设计技能,理解函数式编程本质思想,仍有非常大的参考价值。

在我这样杂乱的介绍下,本书听起来好像是一盘大杂烩。事实上它确实如此。因为全书涵盖的内容太多太广,以至于让人产生目不暇接之感。尤其对于术有专攻的开发人员来讲,要彻底吃透本书讲解的内容,无疑是一项艰巨的挑战。然而,如果从架构师所必须具备的技能来看,本书的内容其实并没有超出架构的范畴,因为架构师必须要见识广博,你才能针对不同的需求场景,面对不同的实现技术,选出最适合当前场景的恰如其分的架构方案。当然,在阅读时,千万不要在太多的技术细节中迷失自己,关键还是要把握美丽架构的基本原则。而这正是本书的主线,使得本书能够在散乱的主题中,还能做到“形散而神不散”。


给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

有试读章节吗? by chuan sun

有试读章节吗?

Re: 有试读章节吗? by Zeng Abrams

到处都有,电子书,纸质的出版书。

Re: 有试读章节吗? by Zhu Gian

omg by feng kazaff

老实说,很可能是我能力问题,在看这本书时,感到有些吃力,自己都能感觉到无法很好的吃透和消化书中的内容,这也是我没坚持看完的最大原因!
看到这片文章,打算找个时间,再复读一边,希望能顿悟

这个翻译真不咋样 by gong jim

这本书写得的确非常好,但真的需要资深背景的架构师来翻译。目前还真没看到一本翻译到其精髓的版本。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

5 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT