`
wbj0110
  • 浏览: 1553049 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

谈软件架构(转)

阅读更多

最近看了下《架构之美这本书》,摘录了部分书中的内容,在摘录书里面内容前先谈谈我自己对架构的看法。架构应该包括了功能性架构和非功能性架构两个方面的内容。我们常说的J2EE,DotNet标准架构框架更多的是非功能性架构的范畴;而谈的子系统,组件划分,接口设计,复用等内容涉及到功能性架构的内容。J2EE架构的标准模板很容易找到和借用,但是并不代表你是一个合格的架构师,架构师必须深入到功能性架构中,真正的做好需求和实现中间的桥梁。正如现在好的PPT模板一大堆,但是并不代表你能够做出好的PPT来,PPT的模板仅仅是术,而PPT内容和思维才是道,而这里又是我们经常讲到的模式的问题,即根据我们的目标如何选择相应的图表和模板来最合理,最简单的展现我们的内容。

从静态分析的角度来考虑,架构的核心即是分解和集成。我们面对的现实业务和需求可能太庞大了,如果不去分解我们的构建根本都无法下手,我们就无法真正理解业务细节。因此子系统和组件划分是分解重要内容,分解重要原则又是高内聚,松耦合。由于分解产生了组件间的交互,因此需要根据关注接口的分析和设计,架构师的一个关键职能就是要屏蔽系统本身复杂性,将复杂性作为一个黑盒控制在自己手里,对外只需要暴露尽可能简单的接口。而在分解的时候又必须要考虑集成,架构师在自己脑海里面已经有了目标系统的样子,他们会很有信心分解的组件能够通过当初定义的接口很好的集成在一起。正如汽车制造一样,所有的零备件都出来了却发现它们根本无法组装成一台汽车,这对架构师是最大的悲哀。系统都还没有出来,而架构师就能够游刃有余的做这些事情,靠的不仅仅是多年的设计和开发实践,更多的则是在实践过程中的抽象思维和模式总结。

从动态分析的角度来考虑,现实世界中的原始需求进入,最终出来的则是满足需求的功能实现,在这个过程中涉及到一系列的内部程序流转流程,前台界面,业务逻辑,数据访问,数据实体,公用组件等,这些层次之间应该怎样去交互是在架构设计中必须要考虑清楚的问题。在这方面我喜欢用架构机制这个词语,机制往往并不是静态词汇,因为要深究机制就必须要搞清楚事件触发,功能调用,访问顺序等一系列问题。简单的讲,架构机制要回答一个重要的问题,即你设计出的分布式框架如何能够满足输入的需求变成最终输出的功能,中间究竟经历了哪些步骤?安全性如何保证?性能如何保证?可扩展性又如何保证?要回答这些问题你都必须给出这些问题的解决方案的运行机制,而只有大家认可了运行机制,或者新出来的模块已经在新架构上运行验证了,才能够讲从架构框架上基本上已经成熟了。

架构本身不是目标,而简单实用并且支持灵活扩展的系统才是我们追求的目标。架构师思维意识里面更加重要的是实用性和经济性而非理想化,由于业务域和问题域的不同没有完全可以照搬的架构,在架构设计上追求一定的可扩展性,要杜绝过度架构和架构理想化的问题。就如何建造一个建筑,如果我们最终得不到一个实用的的建筑物,你再怎么向客户吹嘘你的设计图纸和建造框架如何合理都是徒劳的。

在《人月神话》里面谈到,给我看你的流程图而隐藏起你的表,我将仍然莫名其妙;而给我看你的表,我将不再需要你的流程图,因为它们太明显了。足见架构中静态分析的成分远远的大于了动态分析,而静态分析的重点即我们所说的对象,我需要观察现实世界有哪些对象以及这些对象之间存在的关系,而这些内容通过抽象之后正是我们谈的数据架构。在SOA的参考模型中ESB层面的重点则是通过流程分析和分解后形成的数据集成架构,有了这个才可能进一步的进行基于流程编排的动态架构。即我们先抛开流程,首先通过分解方法来找寻数据形成静态的数据架构,然后再结合流程来观察数据的形成和转化过程。

以下内容摘录自《架构之美》一书:

有人问过我:架构的最主要产出是什么?我的答案是图。这里面有两层含义:一层含义是如同建筑师描绘的蓝图一样,用于引导实施者;另一层含义是架构师头脑中清晰的目标系统。如果架构师头脑中没有清晰的图像,他是没有办法把它画出来的。

架构是一个过程,而非一个结果。架构是架构师洞见内在结构、规律、原则和逻辑的过程。真正的架构师是可以将自己放在系统中去的(例如作为系统中的任何一个角色),只有清晰地理解系统,才能简洁的描述它。而当架构师拿出了他所描述的作品的时候,架构这个过程就已经结束了。

美丽的架构应尽可能的精益,并且是演进式发展的。当你架构一个支持亿万人同时在线的大规模网站系统的时候,你无法从一开始就提供最完善的解决方案,它应该是随着用户的增长而可扩展的。精益的实现让你避免过度设计,也使架构不断演进并趋于完美。

美丽的架构无法定义,而它却是一种自然的,简单的,可复用的,人文的,甚至是外行人也可以细细品味其思想的。当我看到超市的多个收银台前排满长队,便想到服务器并发处理性能和容量;当我看到十字路口的车辆需要等待转弯的时候,便想到用缓存的思想来提高交通吞吐量。

如何设计出美丽的架构?从代码逻辑到物理网络,从单机到分布式,无数的技术可以供架构师选择;如分层,组件化,服务化,标准化,缓存,分离,队列,复制,冗余,代理等,不过它们仅仅是术的范畴,而何时何处如何恰到好处地使用它们才是道的范畴,比如顿悟变化的道理,在博弈中寻找平衡,以系统化的角度来分析问题,寻找相对与绝对的奥秘,开放的心态。

在软件设计中,设计师需要考虑多方面的关注点。漂亮的架构设计让这些关注点尽可能分离,然后以一种最简单的机制结合在一起,从而得到高内聚,低耦合的系统。爱因斯坦说过,“让它尽可能简单,但不要过于简单”,我们所需要考虑所有必须考虑的关注点,然后用简单漂亮的架构来体现我们的关注点,以体现架构设计的经济性。

架构提供一种共同的方法来解决我们软件开发中面临的实际问题,架构的核心是概念完整性,即一组抽象和规则,在整个系统中尽可能简单的使用他们。好的建筑应该通过美观,坚固和实用三个方面来衡量,而好的架构也正是这三方面的平衡和配合,没有哪一个方面比其它方面更加重要。

分享到:
评论

相关推荐

    软件架构纵横谈

    软件架构纵横谈

    软件架构纵横谈.pdf

    软件架构纵横谈.pdf 作者:张逸 ..

    系统架构师谈什么是软件架构

    系统架构师谈什么是软件架构.最近看了下《架构之美这本书》,摘录了部分书中的内容,在摘录书里面内容前先谈谈我自己对架构的看法。架构应该包括了功能性架构和非功能性架构两个方面的内容  最近看了下《架构之美这...

    DataFunSummit:2021年AI基础软件架构峰会PPT合集(27份).zip

    DataFunSummit:2021年AI基础软件架构峰会PPT合集(27份)。 AI芯片软件栈技术挑战和初探 地平线在软硬件协同设计的一些实践 当我们谈论框架时,我们在谈论什么 面向云计算的分布式机器学习优化实践 源于产业实践的...

    新浪架构师谈微博架构

    微博(Micro-Blog)顾名思义是微型博客,是一种基于用户关系的信息分享和传播平台,用户可通过浏览器、手机、及时通讯软件(MSN、 QQ、 Skype 等)及外部 API 接口等多种渠道发布 140 字以内信息[1]。 支持跨平台交流、 ...

    软件架构的理论综述论文

    随着IT技术的不断发展,越来越多的人把关注目光投入到了计算机软件领域,而软件构架凭借其...本文以软件构架为研究对象进行分析,从软件架构与软件框架的概念谈起,阐述了软件架构的发展历程,并总结了软件架构的过程特征。

    浅谈软件架构的可靠性

    软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地...

    【精心整理】系统架构设计师软考资料.zip

    系统架构设计师:软件架构师之路 系统架构设计师复习笔记 系统架构师论文范文50篇(含完整目录) 系统架构设计师各知识点思维导图(很全很详细) 2010年下半年系统架构设计师上午试题分析与解答 2009年下半年系统架构...

    温昱---架构设计方法经验谈

    温昱---架构设计方法经验谈,关于架构方面的心得和经验,有独到的见解和分析,详细请查看

    2021 AI基础软件架构峰会PPT汇总(29份).zip

    2021 AI基础软件架构峰会PPT汇总,共29份。 AI基础设施软件技术横跨深度学习算法、编程语言、编译器、数据库、分布式系统、高性能网络和AI芯片等多个前沿领域,是当前学术界和产业界共同感到兴奋的新领域。 一、AI...

    DaveHendricksen谈软件架构师如何沟通的原则

    对于一名合格的软件架构师来说,沟通能力是不可或缺的。来自汤姆森路透的资深架构师DaveHendricksen在《软件架构师的12项修炼》中提供了比较细致的分析和建议,其中对于沟通原则和策略给出了具体的建议。  对于一名...

    通信与网络中的浅谈软件架构的可靠性

    软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地...

    架构重构趋势谈

    其中,重构已经成为目前软件研发的关键环节,本文谈一谈架构重构发展趋势。“架构师就是设计架构的人”,这种理解太简单化了,没有反映出不同背景的软件企业、不同发展阶段的软件企业所重点关注的“主战场”的不同。...

    浅谈搜索软件对网络安全的影响.pdf

    浅谈搜索软件对网络安全的影响.pdf

    浅谈架构模式

    软件体系结构通常被称为架构,指可以预制和可重构的软件框架...MaryShaw在《软件体系结构:一门初露端倪学科的展望》中为“软件架构”给出了非常简明的定义:软件系统的架构将系统描述为计算机组件及组件之间的交互...

    QCon 2009 beijing全球企业开发大会ppt:15.从优酷网谈大型网站架构

    QCon 2009 beijing全球企业开发大会ppt:(共25个)...互联网企业天生必须与时间赛跑,如何快速软件开发,如何应对急速增长的访问,如何处理与日俱增的海量数据,本次演讲将从优酷网的经验来探讨大型网站的架构和优化。

    零信任网络安全最佳实践-SDP安全架构技术指南.zip

    零信任网络安全最佳实践-SDP安全架构技术指南\从零信任谈起--深入剖析以人为核心的业务安全.pdf 零信任网络安全最佳实践-SDP安全架构技术指南\零信任架构落地建设思路探讨.pdf 零信任网络安全最佳实践-SDP安全架构...

    运用RUP4+1视图方法进行软件架构设计

    要开发出用户满意的软件并不是件容易的事,软件架构师必须全面把握各种各样的需求、权衡需求之间有可能的矛盾之处,分门别类地将不同需求一一满足。本文从理解需求种类的复杂性谈起,通过具体案例的分析,展示了如何...

Global site tag (gtag.js) - Google Analytics