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

谈软件架构(转)

阅读更多

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

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

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

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

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

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

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

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

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

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

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

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

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

分享到:
评论

相关推荐

    软件架构纵横谈.pdf

    《软件架构纵横谈》是张逸撰写的一部深入探讨软件架构设计原则、模式与方法学的著作,旨在全面解析从宏观架构到微观架构乃至纳米架构的多层次架构设计思路。本书通过对MMN架构(Macro-Micro-Nano Architecture)的...

    软件架构设计分层模型和构图思考.docx

    软件架构设计分层模型和构图思考 软件架构设计是一个复杂的问题,需要架构师具备系统思维、结构化思维、编程思维等多种思维模式。架构设计的核心作用是建立业务现实世界和抽象的 IT 实现之间的一道桥梁,要求架构师...

    软件架构设计的思想与模式

    软件架构设计是构建高质量软件系统的基础,它涉及到软件系统的全局组织和控制结构、组件间通信、数据访问协议、功能分配、物理分布、集成方式、伸缩性和性能等多个方面。软件架构师在软件组织中的角色举足轻重,负责...

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

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

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

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

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

    温昱作为一位资深的架构师,他的"架构设计方法经验谈"为我们提供了宝贵的见解和深入的理解。以下是根据标题、描述以及可能包含在PDF文档中的内容推测出的一些关键知识点: 1. **架构定义与角色**:首先,架构设计是...

    新浪架构师谈微博架构.pdf

    微博架构师谈微博架构 微博架构师谈微博架构是一篇关于微博架构设计的文档,该文档详细介绍了微博架构的设计理念、技术架构、数据库设计、性能优化等方面的内容。 微博架构的设计理念是基于用户关系的信息分享和...

    浅谈软件架构的可靠性

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

    浅谈单片机应用程序架构

    【单片机应用程序架构】是软件开发中一个关键的概念,特别是在单片机系统中,合理的架构设计能够提高程序的可读性、可维护性和效率。本文主要探讨了三种常见的单片机程序架构:顺序执行程序、时间片轮询法以及操作...

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

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

    浅谈汽车SOA架构开发和实施过程中的微服务化.pdf

    汽车SOA架构的开发与实施涉及到从传统架构向软件服务化转变的复杂过程,这要求工程师团队在实践中不断学习和积累经验。本文主要探讨了在汽车SOA架构开发中的微服务化策略。 微服务化是IT行业中SOA概念的一种具体...

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

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

    微软架构师谈编程语言发展

    ### 微软架构师谈编程语言发展 #### 关键知识点概览 1. **编程语言发展的多维度考量** - **历史背景**:每种语言都有其独特的历史发展轨迹,如VB从弱类型语言逐渐过渡到强类型语言,而C#自诞生以来即定位为强类型...

    人人网工程师谈移动Web开发架构.pdf

    不过,由于厂商自定义的碎片化问题,可能导致第三方软件适配上的挑战。 5. iOS平台:作为高端市场的主导者,iOS以其超炫的UI设计、良好的交互操作和海量应用占据市场。其成功在很大程度上取决于苹果手机的市场表现...

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

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

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

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

    第一章-谈freeswitch架构汇编.pdf

    "FreeSWITCH架构详解" FreeSWITCH是一款功能强大、灵活、可扩展的开源软交换机软件,能够提供强大的电话交换机功能。FreeSWITCH架构的设计目标是提供一个围绕在switching核心的模块化、可扩展、稳定、灵活的通讯...

    从运维系统开发谈安全架构设计

    在本文中,作者段继刚探讨了运维系统开发过程中的安全架构设计,结合了自身在运维领域的实际工作经验,分享了在系统架构设计中如何实现安全性的经验与思考。 首先,作者提出了运维人员的工作特点,这些特点包括维护...

Global site tag (gtag.js) - Google Analytics