标签:
《架构之美》读后感
唐凯风
2014301500366
架构是系统设计的一部分,它突出了某些细节,并通过抽象省略掉了另一些细节。软件系统的架构包括行为上的和结构上的。外部行为描述展示了软件如何与用户、其他设备和外部设备进行交互,也就是需求。结构描述展示了软件如何被划分为多个部分,以及这些部分的关系。
架构的设计受到许多因素的制约,架构是好是坏并没有统一的标准。这取决于人们对软件的需求、软件被构建和运行的环境,以及软件团队本身的特点等等因素。评价软件好坏有很多指标,例如性能、安全、可伸展性等等。一般来说,这些指标是很难全部满足的,试图改进其中一个往往会对其他指标产生负面影响。所以从某种意义上来说,软件架构是折中的游戏。对于一组功能需求和品质需求,没有唯一的正确架构。
《架构之美》没有太多空洞的概念和论述,而是抛砖引玉地展示多个实际的项目。通过对它们架构利弊的分析,以及相关的思考,给读者提供了有益的启发
书中提到了很多有关一个优秀的架构师应该具备的品质很吸引我的眼球,好的架构师首先关注的并不是系统的功能而是系统需要满足的品质,它指明了功能以何种方式交付才能被系统的利益相关者普遍接受,系统的结果包含了这些stakeholders的既定利益。成功的架构师的两项重要实践是:让利益相关者参与和同时关注系统的功能的品质和功能。
书中介绍了什么样的的架构才算是美丽的架构,美丽的架构在开始时,要关注其实用性,好的架构应该是每天被很多人使用的;使用架构之前,我们还要考虑它必须要能够被构建(可构建性);接下来就是关注架构的可持久性,好的架构应该能够经得起时间的考验,能够考虑到未来的变更,允许期望的修改;最后,要寻找一些能让人高兴的架构(开发人员、测试人员、用户等),这就要求架构必须满足概念完整性,这样的架构才易懂,易用,才会做到简单而又不过于简单。几个比较常见的美丽架构的例子有:A-7E舰载飞行处理器的架构;朗讯5ESS电话交换机软件架构;万维网;UNIX系统。
在后来的章节中,又介绍了“混乱大都市”和“设计之城”两个项目,将两种比较,形象的说出了好的架构与差的架构的一些特性。“混乱大都市”的最大问题是重复,它没有考虑好软件设计中最关键的品质,内聚和耦合。它的失败经验很值得我们借鉴:缺乏预见性和对架构的整体思考。版本的发布周期过于漫长;系统没有弹性,可扩展性差;代码问题很严重,没有统一的命名规则和命名结构,导致新员工面对复杂的代码结构,感觉压力比较大,从而又造成了员工的跳槽和士气低等问题;团队的内部政治问题严重,没有团结精神,缺少凝聚力。
相比之下,“设计之城”的成功就是吸取了它的经验教训,从一开始,项目的目标就很明确,在以后的开发过程中的代码必须支持所设定的要完成的功能,这样就形成了一个通用的目标的代码集,在以后的使用过程中可以适用于很多产品的配置。开发团队动态的遵守架构设计,开发人员们密切合作,共同创建一组干净、一致、密切合作的软件。如何Conway法则中所说的,团队的组织方式也如同软件的组织方式;坚持保持品质的信念;
要有单元测试和很好的自动化测试。它的里面提到了一个新的原则:YAGNI(You Aren’t Going To Need It)即在你不需要他的时候,不要急着先去设计它。这大大提高了架构的品质,在设计之初只是设计系统中最重要的部分,余下的部分延迟到需要的时候再进行分析和设计,这样可以很好的解放思想。
一个好的架构的形成不仅是架构师的功劳,还有团队的集体合作,主要因素:确实进行有意为之的前端设计;设计者有很好的素质和经验;在开发过程中,保持清晰的设计观点;授权团队负责软件的整体设计;不要害怕改变设计;让合适的人加入到团队中,让团队保持健康的工作关系;在合适的时候做出决定;好的项目管理和合适的最后期限。
在后来介绍架构伸缩性的时候以常见的在线游戏的设计为例,这类软件对系统的伸缩性要求很高,要能实时伸缩,减少延时。随即提出了两种解决方案:分区和基于地理位置,每个地理区域的玩家运行在一台服务器上。
在介绍数据增长对架构影响的时候以以Facebook为例,说明了Facebook的独特平台是如何解决了数据迅速增长的情况下系统的架构是如何维持稳定的。Facebook的独特平台主要是有一下几个部分组成的:
Facebook API是为了实现通过一个外部可以访问的Web服务来提供Facebook数据,实现应用可以利用在Facebook上的用户社会关系数据,但是不能直接访问。
Facebook的FQL的提出是为了解决从其平台API获取数据比获取内部数据的开销大得多的问题,FQL提供的是一种查询服务。类似内部数据采用的模式,实现外部数据访问模式。它能让开发者更快的处理它的请求,能够以比API更好的力度来访问数据,同时保持了SQL类似的语法。
FBML的提出时基于这样一个实际问题:对于社会关系应用来说,要获得引人注目的关键性用户数,支持它的社会关系网络上的用户必须要能注意到其他用户在利用这些应用进行交互;外部应用不能够使用Facebook没有通过Web服务暴露出来的哪些核心数据元素。FBML是一种数据驱动的标记语言,在社会关系站点上创建应用执行和显示的内容,让用户在一个受信任的环境下操作。
标签:
原文地址:http://www.cnblogs.com/tangkaifeng/p/5615205.html