“一千个读者有一千哈姆莱特”。同样的,1000个人谈架构会有1001种看法。 有时候,甚至同一个架构的名词在不同的上下文里面也会代表不同的意思。例如,对于“系统架构”这个名词,有人认为它只是指代一个系统各部分的逻辑视图,有人会认为它指代一个系统的物理视图。借用DDD的术语,我们没有对架构产生同一语言。架构是一个亟须消除歧义的概念。我在这里试图列举一些平常经常会提到的“XX架构”概念,并希望对它们进行梳理。
企业架构
首当其冲的是企业架构。第一个上来的概念就已经有不同的定义了。基本上每种企业架构的框架都对其有自己的定义。例如,以下是不同的企业架构框架对企业架构的定义:
Zachman:“信息系统架构(企业架构)是构成组织的所有关键元素和关系的综合描述。”
The OPEN GROUP(Togaf):“企业架构是关于理解所有构成企业的不同企业元素,以及这些元素怎样相互关联。”
Gartner: “企业架构是通过创建、沟通和提高用以描述企业未来状态和发展的关键原则来把商业远景和战略转化成有效的企业变更的过程。”
事实上Zachman当时并没有明确提出企业架构,而是提出了另外一个名词:信息系统架构。后来Togaf直接借用了这个名词,作为其4A架构层次里面的其中两层,后面会提到。
对于企业架构,已经很难形成一个业界公认的统一的定义了。但无论其定义怎样,企业架构要做的事情基本上就是为了实现企业的愿景,定义企业需要掌握哪些能力,需要构建哪些系统来提供支撑,他们之间的关系是什么,以及怎么实施和治理。
Togaf 4A架构
4A分别是指业务架构、应用架构、数据架构、技术架构。
业务架构
官方定义是:A representation of holistic, multi-dimensional business views of: capabilities, end-to-end value delivery, information, and organizational structure; and the relationships among these business views and strategies, products, policies, initiatives, and stakeholders
翻译过来大概就是:对全面、多维业务视图的描述,包括:能力、端到端价值交付、信息和组织结构;以及这些业务观点与战略、产物、政策、举措和利益攸关者之间的关系。其实顾名思义就是描述企业业务结构、价值以及与各方面关系的视图。
应用架构
官方定义是:A description of the structure and interaction of the applications as groups of capabilities that provide key business functions and manage the data assets
翻译过来大概是:对应用结构和交互的描述,这些应用是提供关键业务功能和管理数据资产的功能组。说白了就是为了支撑业务架构,需要哪些应用以及他们的关系。这与传统意义上常说的应用架构意思是相近的。
数据架构
官方定义是:A description of the structure and interaction of the enterprise’s major types and sources of data, logical data assets, physical data assets, and data management resources
翻译过来是:对 Enterprise 主要数据类型和来源、逻辑 数据资产、物理数据资产和数据管理资源 结构和交互的描述。顾名思义,描述数据的。
技术架构
官方定义是:A description of the structure and interaction of the technology services, and technology components
翻译过来是:对技术服务以及技术组件结构和交互的描述。与应用架构的区别是应用架构是应用的逻辑层展现,不涉及具体技术实施;技术架构是对应用架构实施落地的展现,设计具体的技术方案。还是举我喜欢的出行工具的例子,应用架构就是出行工具的模型图,技术架构就是把出行工具具化为汽车或者马车的设计图。从这个角度触发,我个人认为应用架构跟系统架构是类似的概念。对于系统架构,后面会提及。
其中应用架构和数据架构又合称为信息系统架构。
部署架构
没有公认的定义。但顾名思义,很好理解。例如,当出行工具的技术架构确认后,部署架构就是马车是要赤兔马还是血汗马,是要一匹马拉还是两匹马拉;汽车的话轮胎是要米其林还是普利司通,引擎是要自然吸气还是双涡轮增压。
系统架构
真正吊诡的概念来了。网上基本上找不到关于系统架构的公认的定义。但似乎每个人都经常使用这个名词。当我问人们要他们的系统架构图时,有时候他们会给我应用架构图,有时候会给我技术架构图,有时候是部署架构图,有时候甚至是业务流程图!但最让人感到惊奇的是虽然似乎每个人对这个名词的理解都不一样,但感觉好像又可以互相理解。基于系统架构,我更倾向于把它理解为跟应用架构一样,表示一个系统的逻辑层展现,不涉及任何技术与具体的实现。当然了,这只是我个人的理解。当我们在跟别人讨论系统架构的时候,一定要明确双方在一个明确的上下文中讨论。
IT架构
又是一个没有公认定义的概念。根据往常的经验,基本上除了企业架构和业务架构外,上述所提的所有架构都可以认为是IT架构的不同表示。这也意味着,当我们说IT架构时,别人往往是不知道我们想说什么的。所以要特别小心,我个人是不主张单纯说IT架构的。
最后,上一幅老图,压场总结。
SOA的核心主体是服务。所谓“服务(Service)” ,从业务角度而言,服务是一个可重复的经过标准封装的任务,例如: 检查帐号余额;开新帐户 等等…。SOA的目标是通过服务的流程化来实现业务的灵活性,所谓流程(Process)是由一系列相互关联的任务所组成,实现一个具体的业务功能。一个流程可以由一系列服务来实现。
标准架构图如下:
一个正确的框架,是指导我们开发和实施SOA架构的基础。由IBM提案,国际开放群组(The Open Group)提出了一个SOA架构的参考模型,这个架构框架目前是产业界最权威和严谨的SOA架构标准。The Open Group是一个非营利标准化组织,是一个厂商中立和技术中立的机构,致力于提出各种技术框架和理论结构,致力于促进全球市场的业务效率。The Open Group已有超过20年的标准制定与推广历史。在1996年,由X/Open与Open Software Foundation合并组成。The Open Group最有名是作为UNIX商标的认证机构。在过去,协会最出名的是其出版的Single UNIX Specification,它扩充了POSIX标准而且是UNIX的官方定义,其成员包括IT用户、供应商以及政府机构。The Open Group在中国的创始会员为金蝶集团,金蝶集团负责成立了中国分会。TOG在1993年提出的The Open Group Architecture Framework (TOGAF) 架构框架,是一套行之有效的企业架构。历经15年9个版本发展,支持开放、标准的SOA参考架构,已被80%的福布斯( Forbes)全球排名前50的公司使用。
根据这个模型,完整的SOA架构由五大部分组成,分别是:基础设施服务、企业服务总线、关键服务组件、开发工具、管理工具等。
SOA基础实施是为整个SOA组件和框架提供一个可靠的运行环境,以及服务组件容器,它的核心组件是应用服务器等基础软件支撑设施,提供运行期完整、可靠的软件支撑。
企业服务总线是指由中间件基础设施产品技术实现的、通过事件驱动和基于XML消息引擎,为SOA提供的软件架构的构造物。
企业服务总线ESB提供可靠消息传输、服务接入、协议转换、数据格式转换、基于内容的路由等功能,屏蔽了服务的物理位置,协议和数据格式。在SOA基础实现的方案上,应用的业务功能能够被发布、封装和提升(Promote)成为业务服务(Business Service);业务服务的序列可以编排成为BPM的流程,而流程也可以被发布和提升为复合服务(Composited Service),业务服务还可以被外部的SOA系统再次编排和组合。ESB是实现SOA治理的重要支撑平台,是SOA解决方案的核心,从某种意义上说,如果没有ESB,就不能算作严格意义上的SOA。
关键服务实现,是SOA在各种业务服务组件的分类。一般来说,一个企业级的SOA架构通常包括:交互服务、流程服务、信息服务、伙伴服务、企业应用服务和接入服务。这些服务可能是一些服务组件,也可能是企业应用系统(如ERP)所暴露的服务接口等等。这些服务都可以接入ESB,进行集中统一管理。
开发工具和管理工具:提供完善的、可视化的服务开发和流程编排工具,涵盖服务的设计、开发、配置、部署、监控、重构等完整的SOA项目开发生命周期。
按照这个模型,许多SOA解决方案是只提供部分实现。这个行业中,许多国内的企业为了搭上SOA的便车,经常以偏概全,混绕概念。应该说真正按照SOA的思想和模型来构建整个企业的IT架构的案例是非常之少的。许多国外厂商的宣传案例,基本上是停留在部署应用服务器,开发了部分WebService组件,可以实现部分数据集成,这个层次而已,而这些WebService是部署在ESB平台之上的,就已经很不错了。实现了服务流程重组,实现SOA治理的案例就更是很少见到了。
OASIS(一个SOA标准组织)给予出的SOA定义“SOA是一个范式,用于组织和利用可能处于不同所有权范围控制下的分布式系统。”
维基百科给出的SOA定义“面向服务的体系结构(Service-oriented architecture)是构造分布式系统的应用程序的方法。它将应用程序功能作为服务发送给最终用户或者其他服务。它采用开放标准、与软件资源进行交互并采用表示的标准方式。”。
要准确全面理解SOA,首先必须理解SOA的核心要素:
SOA的目标就是实现灵活可变的IT系统。要达到灵活性,通过三个途径来解决:标准化封装、复用、松耦合可编排。
互 *** 作(标准化封装)、复用、松耦合等SOA技术的内在机制,也是中间件技术和产品的本质特征。
标准化封装(互 *** 作性)
传统软件架构,因为封装的技术和平台依赖性,一直没有彻底解决互 *** 作问题。互联网前所未有的开放性意味着各节点可能采用不同的组件、平台技术,对技术细节进行了私有化的约束,构件模型和架构没有统一标准,从而导致架构平台自身在组件描述、发布、发现、调用、互 *** 作协议及数据传输等方面呈现出巨大的异构性。各种不良技术约束的结果是软件系统跨互联网进行交互变得困难重重,最终导致了跨企业/部门的业务集成和重组难以灵活快速的进行。
在软件的互 *** 作方面,传统中间件只是实现了访问互 *** 作,即通过标准化的API实现了同类系统之间的调用互 *** 作,而连接互 *** 作还是依赖于特定的访问协议,如JAVA使用RMI,CORBA使用IIOP等。而SOA通过标准的、支持Internet、与 *** 作系统无关的SOAP协议实现了连接互 *** 作。而且,服务的封装是采用XML协议,具有自解析和自定义的特性,这样,基于SOA的中间件还可以实现语义互 *** 作。
SOA要实现互 *** 作,就是通过一系列的标准族,来实现访问、连接和语义等各种层面的互 *** 作。
软件复用
软件复用,即软件的重用,也叫再用,是指同一事物不作修改或稍加改动就多次重复使用。从软件复用技术的发展来看,就是不断提升抽象级别,扩大复用范围。最早的复用技术是子程序,人们发明子程序,就可以在不同系统之间进行复用了。但是,子程序是最原始的复用,因为这种复用范围是一个可执行程序内复用,静态开发期复用,如果子程序修改,意味着所有调用这个子程序的系统必须重新编译、测试和发布。
耦合关系
SOA架构在松耦合解耦过程也发展到了最后的境界。传统软件将软件之中核心三部分网络连接、数据转换、业务逻辑全部耦合在一个整体之中,形成“铁板一块”的软件,“牵一发而动全身”,软件就难以适应变化。分布式对象技术将连接逻辑进行分离,消息中间件将连接逻辑进行异步处理,增加了更大的灵活性。消息代理和一些分布式对象中间件将数据转换也进行了分离。而SOA架构,通过服务的封装,实现了业务逻辑与网络连接、数据转换等进行完全的解耦。
总之,从科学哲学的角度来看,SOA是一个不断解构的过程,传统软件强调系统性,耦合度过高,所以需要松耦合(解耦);SOA也是一个组件粒度的平衡,集成电路趋势是集成度越来越高,软件发展的趋势是相反的过程;SOA是架构,更是方法,反映了人们对哲学思想的追求的原动力。
按照这个特性,SOA基本上来说与WebService并不是同一个概念,SOA并不一定需要WebService实现,理论上可以在其他技术体系下,实现SOA。但事实上,到目前为止,能够实现SOA架构风格的技术就是WebService,因为它的特性和厂商的支持力度,使得WebService成为了实现SOA实现技术的事实标准。也正因为WebService技术的成熟,才使得已经提出10多年了的SOA思想和概念,得以能够实现落地,成为一种可以使用的技术。这也就是回答了SOA和WebService的关系。
如何成为优秀的系统架构师
系统架构师的工作是复杂设计总体解决方案以及领域对象的逻辑和物理布局,这是一项在复杂环境中高风险、高影响力的活动。那么如何才能成为一名优秀的系统架构师呢,一起来学习学习吧!
1、软件架构的定义:
软件架构(Software Architecture)也称之为软件体系结构,它是一组有关如下要素的重要决策:软件系统的组织,构成系统的结构化元素,接口和它们相互协作的行为的选择,结构化元素和行为元素组合成粒度更大的子系统方式的选择,以及指导这一组织(元素及其接口、协作和组合方式)的架构风格的选择。换句话说,软件架构实际上是对系统整体结构设计的刻划,系统架构师是做全局的、整体的把握工作。架构的组成与决策是架构设计的两个基本概念。架构=>蓝图+规则+解决方案
软件架构是一个认识事物的过程:原型、发现、改进、再发现、再改进,这是软件开发的必由螺旋。
2、架构师成长路线图:
系统架构师已经不仅仅是技术精湛的技术专家,他需要与业务团队紧密合作,并且精通市场、业务与管理。从上升趋势来说,可以有三个层面的路线图:第一个层面,要关注系统思考。在这个层面,重要的不仅仅是掌握设计的知识点,而是更重视分析能力、创新思维能力的提升,需要更广阔的思路,这方面的空间相当非常大。这是第一层面的能力基础。第二个层面,要关注总结和指导,思维空间要转向群体。如何把已有的经验总结出来,并让这种智力资产真正发挥作用成为架构师上升第二层面的能力基础。第三个层面,要提升自身的全面修养。我们必须引发自己思维方式的变革,要培养组织力、领导力、创新力以及拥有激情,这是架构师上升第三层面的能力基础。
要看到自身的弱点,思路要宽,多思考
架构师并不是一个普通的技术人员,他对设计站的角度更高,需要的知识和能力结构更复杂,他需要具有其他人所没有的思想、眼光和感知世界的方法,必须突破已有的思维模式和行为模式,突破长期束缚自己的思维瓶颈,才可能达到自己从未达到过的高度。
架构师要养成每项工作都记录并分析的好习惯,以形成更扎实的工作风格。在每个项目完成都需要进行总结。
3、架构师要保持自己的竞争力:
架构师必须关注今天的IT技术、商业模式变革以及由此引发的软件产业变革的重大趋势,勤于思考并迎接新的挑战。一个人最核心的竞争优势是学习能力。架构师作为技术层面资深的一群,为了保持竞争力需要注意以下几个问题:(1)、保持激情:关键是信念。激情源自于信念,有了信念才会主动挑战自我,迎接挑战才会有激情,有了激情工作才会更有意思。(2)、创新思考:在工作中多尝试一些新方法,是维持自我能力的重要手段。(3)、逆向思维:逆向思维指的是使用与正常思路相反的思维方式去分析同一个问题,使思路多样化。逆向思维能够帮助人们冲破传统思维的束缚,克服惯性思维方式。从反方向考虑问题往往会取得出人意料的结果。
4、架构师要关注软件的新趋势:
目前传统软件危机暴露出的问题还未真正解决,新的挑战却已摆在眼前。在人们不断思考面临的挑战以及对策中,形成了一些新的趋势,包括:(1)、软件质量以服务质量形式展现,对质量的投资可获得更高的投资回报。(2)、软件过程扩展到用户,希望更多的用户深入参与到软件全生命周期。(3)、功能至上远远不够,用户体验得到空前重视。(4)、系统集成模式面临变革,软件、服务、终端、IT基础设施将形成更紧密的价值体系。(5)、研发要更多关注非功能性需求,如安全性质量、性能、可靠性、可扩充性、可伸缩性、可用性等,从而不断提高软件的价值。
知识就是力量==>信息就是力量
架构并不完全是概要设计。概要设计还是停留在图纸上,而架构必须证明这个技术路线可行,并且能够证明大多数质量风险已经得到了解决。
5、所谓设计就是解决问题的过程:
软件设计是一种思维活动,设计的魅力在于破解难题,通过直面问题的挑战,以及对相应解决方案的仔细推敲,才可能设计出真正有灵性的产品。(1)、设计不具普遍性:软件设计很少具有普通性,不同的目标需要不同的设计来支持。(2)、做出权衡:所谓软件设计,本质上就是在质量、成本、时间以及其它各种因素之间做出权衡。(3)、记录设计的理由(设计文档)。
多关注各种方面的架构设计
6、质量属性决定了架构风格:
一种架构的风格,很大程度上与设计者如何满足质量要求的对策有关。需求的功能和非功能两方面都可能有质量要求。具体归纳如下:(1)、与功能性有关的质量属性主要包括:A、正确性:是指软件按照需求正确执行任务的能力。B、健壮性:指的是在异常情况下,软件能够正常运行的能力。正确性与健壮性的区别在于,前者是在功能需求之内描述问题,后者是在功能需求之外描述问题。健壮性一般有两层含义:首先是容错能力,其次是恢复能力。容错指的'是发生异常情况不出错误的能力,而恢复指的是软件发生错误以后能恢复到没有发生错误钱的状态的能力。C、可靠性:是一个与时间相关的属性,指的是在一定的环境下,在一定的时间段,系统不出现故障的概率。通常用平均无故障时间来衡量。(2)、与非功能性有关的质量属性主要包括:A、性能:是指软件的“时间-空间”效率,而不仅仅是指软件运行速度。换句话说是速度要快而占用资源要少。性能=速度/资源。B、易用性:指的是用户使用软件的容易程度。C、清晰性:意味着工作成果易读、易理解。D、安全性:它的目的是系统应该具备防止非法入侵的能力,这既属于技术问题也属于管理问题。E、可扩展性:这反映软件适应“变化”的能力,包括需求、设计的变化、算法的改进和变化。F、可移植性:指的是软件不经修改(或者稍加修改)就可以在不同软硬件环境中使用的能力。
7、抵制前期进行庞大设计的诱惑:
(1)、架构应该具备易演化特征;(2)、项目开发周期不要超过6个月;(3)、分而治之:抓住真正的需求、分而治之(把大项目分成小项目)、设置优先级、尽快交付;(4)、增量式开发与交付:如果前期需求比较清楚,可以把一个大项目分成若干相对独立能够持续交付的部分,这样就可以把大问题分成若干小问题;(5)、迭代式开发与交付:如果前期需求不是太清楚,项目带有强烈的创新成分,可以使用具有强迭代的逐步求精的模型。
8、重构:
在不影响整体外部行为的前提下,不断地对软件进行细微的设计改进,这种渐进式的实践叫做重构。通过重构不仅能够降低维护成本,而且也为我们提供了改进代码质量的通用标准,并使我们能迅速添加新功能。从本质上说,重构根本上就是一个态度问题,而不全是技术问题。
在集中精力完成了代码逻辑以后,就需要集中精力做第二件事情,那就是重构。在对代码进行重构时,我们不会增加新功能,甚至也不会去修复bug。相反,我们会通过将代码变得更易于理解来提升代码的可读性。
重构要坚持不懈:(1)重构可以加快进度;(2)、重构应该是小步骤地进行;(3)、技术债务积累越多,重构的难度就越大。
9、对结构进行优化的基本原则:
在完成了功能逻辑之后,除了代码重构以外,很多情况下还需要重新审视一下软件结构,对结构进行重构。良好的结构设计需要遵循一些原则,而原则本身就是经验的总结。依据这些原则,我们就可以在设计中有良好的设计指向。如需求不变则不需结构。
结构的4条设计原则:(1)单一职责原则(SRP):也被称之为内聚性原则;SRP原则的描述为:就一个类而言,应该仅有一个引起它变化的原因;(2)、开放--封闭原则(OCP):OCP的关键是依赖于抽象。OCP原则的目的,是要求我们设计的软件实体(类、组件、函数等等)应该是可以扩展的,但是不可修改的。A、对于扩展是开放的:这意味着组件的行为是可以扩展的,当应用的需求改变时,我们可以对组件进行扩展,使其具有满足那些改变的新行为。换句话说我们可以改变组件的功能。B、对于更改是封闭的:对组件行为进行扩展时,不必改动组件的源代码,无论是动态链接库、DLL或者是Java的jar文件都无需改动。(3)、依赖倒置原则(DIP):使用传统的结构化设计所创建出来的依赖关系结构,策略是依赖于细节的,这是糟糕的,因为这样会使策略受到细节改变的影响。面向对象的程序设计倒置了依赖关系结构,使得细节和策略都依赖于抽象,并且常常是客户拥有服务接口。事实上,这种依赖关系的倒置正是好的面向对象设计的标志所在。DIP的原则是:A、高层组件不应该依赖于低层组件。二者都应该依赖于抽象;B、抽象不应该依赖于细节,细节应该依赖于抽象。(4)、接口隔离原则(ISP):这个原则用来处理“胖(fat)”接口所具有的缺点。类的“胖”(不内聚)接口可以分解成多组方法。每一组方法都服务于一组不同的客户程序。这样,一些客户程序可以使用一组成员函数,而其它客户程序可以使用其它组的成员函数。实际中当然也存在有一些对象,它们确实不需要内聚的接口,但是ISP建议客户程序不应该看到它们作为单一的类存在。相反,客户程序看到的应该是多个具有内聚接口的抽象基类。
10、关注变化、关注特征:
拥抱着变化而设计。让变化成为一个重要的设计要素,需求总是会发生变化。面向对象是个思维方式。基于接口进行设计。
软件复用(SoftwareReuse):是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。
软件重用,是指在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程。软件元素包括程序代码、测试用例、设计文档、设计过程、需要分析文档甚至领域知识。通常,可重用的元素也称作软构件,可重用的软构件越大,重用的粒度越大。
11、面向服务的架构(Service-OrientedArchitecture, SOA):
面向服务的架构成功的要点是服务识别。服务识别的基本过程:(1)、了解项目的性质;(2)、业务牵头,一定不是技术牵头;(3)、明确产品的战略目标;(4)、研究企业业务流程;(5)、重用行业制品;(6)、建立契约基线;(7)、完善服务属性等级矩阵(ARMS);(8)、使用业务敏捷场景仿真(BASS)进行测试;(9)、拥抱变更。
12、架构与框架的区别:
框架是一个软件,但架构不是软件,而是关于软件如何设计的重要决策。但是在引入软件框架以后,软件架构决策往往会体现在框架设计之中。不论是架构技术还是框架技术,都是为了解决软件日益复杂所带来的困难,而采取的“分而治之”的结果。架构的思维是先大局后局部,这是一种问题在抽象层面地解决方案,首先考虑大局而忽略细节。框架的思维是先通用后专用,这是一种半成品,还需要通过后期的定制才能成为具体的软件。
框架和架构的关系可以总结为两个方面:(1)、为了尽早验证架构设计,或者出于支持产品线开发的目的,可以把通用机制甚至整个架构以框架方式实现;(2)、企业可能存在大量可重用框架,这些框架可能已经实现了架构所需的重要机制,或者对某个子系统提供了可扩展的半成品,最终软件架构可以借助这些框架来构造。
框架设计最重要的部分,其实并不在于采用何种技术方案来实现,而是对已经存在的业务过程进行深入思考,寻找它们的共性,探究其中的规律,建立恰当的模式,然后选择恰当的技术实现方案。
带团队关键因素:决心、手段(方法)、激情、信心,技术不是关键因素。
13、把经验归纳总结成理论:
总结是两方面的,(1)总结过程:归纳出良好设计必须遵循的步骤,以及每一步骤的目标、解决什么问题、应该有什么样的思考点和思考方向。(2)总结模式(设计模式):模式是一种实践经验的总结,通过总结每个思考点的各种解决方案,并且和过程的节点装配在一起,形成能够指导他人的模式语言。
;引言 软件架构是一门学科,开始于 20 世纪 70 年代。面对不断增加的复杂性和开发复杂实时系统的压力,作为主流系统工程和软件开发的基本构造,软件架构应运而生。 与任何其他久经考验的学科一样,软件架构在诞生之初也面临许多挑战。软件架构表示系统的结构和行为方面。在早期为软件架构编写文档说明时,所使用的文本和图解表达常常不足或者不够精确。所需的是某种一致并得到充分理解的伪(或元)语言,以便将对软件架构进行表示和编写文档说明的不同方式统一起来。在学术研究的推动下,在用于开发有效软件架构文档说明的最佳实践和指导原则方面,工程和计算机科学领域已取得了长足的发展。 在本系列中,您将了解如何编写软件架构文档说明。了解编写文档说明的不同方面:系统上下文、体系结构概述、功能体系结构、 *** 作体系结构和体系结构决策。 在这第一篇文章中,了解软件架构是什么,以及为该学科的不同方面编写文档说明的重要性。 回页首软件架构不同的研究人员已解释了软件架构是什么,并且他们对有关如何最好地表示软件系统的体系结构具有不同的观点。其中没有哪一种解释是错误的;每种解释都具有自己的价值。Bass L 等人抓住了软件架构的本质: “程序或计算系统的软件架构是该系统的结构,包括软件组件、那些组件的外部可见的属性,以及那些组件之间的关系” 。 此定义重点关注由粗粒度的构造(软件组件)所构成的体系结构,可以将这些构造看作是体系结构的构建块。每个软件组件或体系结构构建块具有某些外部可见的属性,这是它向其他体系结构构建块公开的属性。软件组件的内部设计和实现细节不是系统的其他部分所关心的内容,系统的其他部分只是将某个特定组件视为一个黑盒。该黑盒具有某些所公开的属性,其他软件组件可以使用这些属性来共同实现业务或 IT 目标。软件架构在恰当的粒度级别标识体系结构构建块。软件架构还标识那些构建块如何彼此相关,并进行文档记录。 与软件工程相关的体系结构涉及到将单个系统分解或划分为一组可迭代地、渐进地和独立地构造的部分。各个部分彼此具有显式的关系。当组合在一起时,各个部分就形成了系统、企业或应用程序的体系结构。 关于体系结构与设计之间的区别,存在一些混淆。正如 Clements P 等人 所指出的,所有体系结构都是设计,但不是所有设计都是体系结构。需要绑定以使系统满足其功能性和非功能性需求和目标的设计本质上是体系结构。体系结构将体系结构构建块视为黑盒,而设计则处理体系结构构建块的配置、自定义和内部工作。体系结构将软件组件与其外部属性绑定在一起。设计通常要比体系结构松散得多,因为它允许以更多的方式遵守组件的外部属性。设计还考虑用于实现组件内部细节的各种方法。 软件架构可以递归地使用。请考虑一个属于某个系统的软件架构组成部分的软件组件 (C1)。软件架构师将该组件及其应该公开的属性、功能和非功能特性及其与其他软件组件的关系交给系统设计人员。设计人员在分析软件组件 C1 之后,决定将该组件分解为更细粒度的组件(C11、C12 和 C13),其中每个组件提供可重用的功能,这些功能将用于实现 C1 的要求属性。设计人员详细设计了 C11、C12、C13 及其接口。此时,对设计人员来说,C11、C12 和 C13 是体系结构构造(或组件);其中每个构造具有显式定义的外部接口。对设计人员来说,C11、C12 和 C13 是软件组件 C1 的体系结构,并且这些构造需要进一步的改进和设计,以处理它们的内部实现。通过将大型、复杂的系统划分为小型的构成部分并集中于每个部分,可以递归地使用体系结构。 体系结构使用共同满足行为和质量目标的体系结构构建块将系统绑定在一起。参与者必须能够理解体系结构。因此必须为体系结构编写足够的文档说明,下一个部分将对此进行讨论。 回页首编写体系结构文档说明的重要性参与者:体系结构的下游设计和实现用户。为体系结构的定义、维护和增强功能进行投资的人。向参与者传达您正在构建的系统蓝图的关键是为系统体系结构编写文档说明。软件架构通过不同的视图进行表示——功能、 *** 作、决策等等。没有任何单一视图能够表示整个体系结构。并非所有视图都需要表示特定企业或问题领域的系统体系结构。架构师将确定足以表示所需软件架构范畴的视图集。通过编写不同视图的文档说明并捕获每个部分的开发,您可以向开发团队和业务及 IT 参与者传达有关该不断发展的系统的信息。软件架构具有一组其预期要满足的业务和工程目标。体系结构的文档说明可以向参与者传达这些目标将如何实现。 为体系结构的各个方面编写文档说明,有助于架构师弥补用白板描述解决方案(使用框线图方法)与以对下游设计和实现团队有意义的方式表示解决方案之间众所周知的差距。体系结构的框线图留下了大量有待解释的空间。需要揭示的细节通常隐藏并令人混淆地固守在那些框线背后。 文档说明还可以促进创建切合实际并且可以系统开发(例如遵循标准模板)的体系结构构件。作为一门学科,软件架构是非常成熟的。您可以利用最佳实践和指导原则来为每种视图创建标准模板,以表示体系结构的某个部分或范畴。模板可以为架构师提供有关需要实际产生什么结果的训练。并且模板还可以帮助架构师执行强化训练——超越框线图技术。模板以更具体的术语定义体系结构,因此可直接追溯到解决方案预期要满足的业务和 IT 目标。 由于复杂性,典型的系统开发活动可能要花 18 个月左右的时间。人员缩减在设计和开发团队是司空见惯的事情,从而导致疯狂寻找恰当的替换人员。新的团队成员通常阻碍进度,因为他们必须经历一个学习过程才能成为高效的参与者。具有良好文档说明构件的软件架构可以提供: 对新团队成员进行有关解决方案需求教育的完美平台。有关解决方案如何满足业务和工程目标的说明。特定于问题领域的各种解决方案体系结构视图。对个人将处理的视图的重点关注。请考虑一个名为“体系结构决策”的假想构件(后续部分还将对此进行讨论)。此构件确定要解决的问题,并评估备选机制以解决该问题。此构件对为什么选择某种备选机制而不选择其他机制提供了论证。所确定的问题涉及到访问大型机 IBM DB2�0�3 表的机制。对两种备选机制进行了评估:使用 IBM MQSeries�0�3,或者使用 NEON Shadow Direct 适配器(一种供应商适配器)。尽管 MQSeries 具备相关功能并且花费较少,但是后者要稳定得多,并且在制定决策时,后者具有一定的优势。现在设想原架构师在一年后离开了该项目,新的架构师粉墨登场。新的架构师质问该团队为什么不使用 IBM MQSeries 来访问大型机 DB2 表。该团队很快返回到体系结构决策构件,并指出了做出该选择的原因。由于 IBM MQSeries 已在过去一年中经测试证明与另一个解决方案不相上下,并且由于其价格较低,于是对该决策进行了重新审视并做出更改以反映更新后的解决方案。 这个示例说明了为什么对系统软件架构的各个方面编写文档说明,是教育新团队成员和在最少的停机情况下帮助他们入门所必需的。 回页首体系结构的不同视图您已经了解到可以通过不同的视图来表示体系结构,每种视图集中于该体系结构的特定方面或范畴。正如 Bass L 等人 所指出的,视图 是由系统参与者编写和读取的体系结构元素或构造以及它们之间关系的内聚集合。 体系结构的功能 视图描述各个体系结构构建块、构建块之间的关系,以及如何将它们分配到体系结构中的不同层。 *** 作 视图(也称为技术视图)描述各个基础结构和中间件软件组件,这些组件为将要部署的功能体系结构组件提供运行时平台。对应用程序架构师而言,功能视图具有第一位的重要性。对基础结构架构师而言, *** 作视图是要重点关注的视图。 这两种视图采用不同的方法解决相同的问题,两种视图都需要从概念体系结构推进到物理实现。视图用于强调特定的体系结构范畴,同时有意地抑制其他范畴。 自从20 世纪 90 年代以来,已经存在许多不同的视图集。Perry 和 Wolf 提出,关于构建具有多种视图的体系结构(包括软件架构),存在一些非常有趣的要点。发表软件架构的 4 + 1 视图的 Kruchten 认为存在五种视图,这些视图组合起来可以表示软件架构。下面将描述前四种视图。 视图描述逻辑视图处理静态设计模型流程视图处理设计的动态视图物理视图处理如何将软件组件映射到硬件基础设施开发视图表示软件组件在开发时环境中的静态组织 第五种视图更多的是一种 Litmus Test 视图。它采用一组在体系结构上非常重要的用例(业务场景),并说明如何将四种视图的每一种视图中的体系结构元素集与针对那些元素的体系结构约束和决策结合起来,用于实现那些用例。 由Soni 等人 在Applied Software Architecture 中发表的另一种视图由四种构成软件架构的主要视图组成:视图描述概念体系结构视图从主要设计元素及元素间的关系方面描述系统模块互连体系结构视图描述功能分解和如何在不同的层中安排软件模块执行体系结构视图描述系统的动态结构代码体系结构视图描述如何在开发环境中组织源代码、二进制文件和库 软件架构出版物中描述了许多其他视图,但是介绍所有这些视图超出了本文的范围。对软件架构的不同视图进行仔细分析后表明,不同的研究结果之间存在大量的相似性。我们拥有一个最常用于表示系统软件架构的最优视图集合。 下一个部分将提供一些构件的概述,建议将这些构件用作可在软件开发生命周期的体系结构阶段生成的体系结构文档的最小集。 回页首文档说明对象 可以对软件架构的许多不同视图或方面做文档说明。对于任何中大型软件开发项目,建议您至少为以下体系结构构件集编写文档说明:系统上下文系统上下文对表示为黑盒的整个系统如何与外部实体(系统和最终用户)交互做文档说明。它还定义系统与外部实体之间的信息和控制流。系统上下文用于对系统所在的 *** 作环境进行澄清、确认和编写文档说明。外部系统的性质、其接口以及信息和控制流对体系结构中的技术构件的下游规范有帮助。体系结构概述体系结构概述通过简单的图示表示形式说明体系结构中的主要概念元素和关系。您可以产生包括企业视图和 IT 系统视图的体系结构概述关系图。概述帮助表示组织所需要的业务和 IT 功能。功能体系结构从以下方面描述 IT 系统的结构:IT 系统的软件组件的职责、接口、静态关系和协作来交付组件所需功能的方式。此构件在各个细化阶段中迭代地进行开发。 *** 作体系结构 *** 作体系结构构件表示计算机系统的网络,这些系统支持解决方案的某些性能、可伸缩性和容错等需求。此构件还运行中间件、系统软件和应用程序软件组件。此构件在各个细化阶段中迭代地进行开发。体系结构决策体系结构决策构件提供了对所有在体系结构上相关的决策编写文档说明的单一位置。决策通常涉及到但不限于: 系统的结构。标识中间件组件以支持集成需求。将功能分配到每个体系结构组件(体系结构构建块)。将体系结构构建块分配到体系结构中的各个层。遵守标准。选择技术以实现特定的体系结构构建块或功能组件。 对任何视为在体系结构上与满足业务和工程目标相关的决策编写文档说明。文档说明通常包括: 问题的确定。各种解决方案的评估,包括优点和缺点。选定的解决方案,包括足够的论证和其他将对下游设计和实现有帮助的相关详细信息。 本系列的其余部分将讨论如何对软件架构中的这五个构件编写文档说明。 回页首结束语 软件架构已经存在 30 多年了。过去几十年已见证了软件工程方面的大量工作。软件架构师在设计满足企业的业务、工程和 IT 目标的解决方案中起着中流砥柱的作用。为软件架构编写文档说明是极其重要的。您可以使用文档说明,就某个正在发展的系统与参与者进行交流。文档说明对于使新的团队成员迅速投入工作也是非常有用的,因为新的团队成员可以在实现解决方案时使用体系结构透视图作为上下文和边界前提。 关于什么在性质上是体系结构,什么在性质上不是体系结构,以及应该对系统的哪些方面做文档说明,一直存在大量的混淆。体系结构模板定义并标准化每种类型的构件中的内容,支持采用一致的方法来对软件架构编写文档说明。 在本文中,您了解了作为一门学科的软件架构,并了解了对体系结构的基本元素编写文档说明的重要性。您还阅读了建议作为文档说明最小集的体系结构构件的概述。请继续关注本系列的其他文章,它们将详述如何使用一组指导原则,以及如何对每个构件编写文档说明。参考资料 学习您可以参阅本文在 developerWorks 全球网站上的 英文原文。阅读已发布的软件架构定义的纲要。D Perry 和 A Wolf 撰写的“Foundations for the Study of Software Architecture”是关于软件架构的经典文章。阅读P Kruchten 撰写的“Architectural Blueprints - The "4+1" View Model of Software Architecture”。Applied Software Architecture 提供了用于产生高质量软件设计的实用指导原则和技术。在developerWorks 的 Architecture 架构专区中,获取用以提高您在体系结构方面的技能的各种资源。浏览技术书店,以了解有关这些技术主题及其他技术主题的相关书籍。讨论参与论坛讨论。访问developerWorks Blog,从而加入到 developerWorks 社区中来。关于作者Tilak Mitra 是 IBM 的一名高级认证执行 IT 架构师。他擅长 SOA,在 SOA 的业务策略和方向方面为 IBM 提供帮助。他还是一位 SOA 主题专家,帮助客户进行基于 SOA 的业务转换,并重点关注复杂和大型的企业架构。他目前的工作重点是围绕组合业务服务(Composite Business Services,CBS)构建可重用的资产,这些资产能够在多种平台上运行,例如 IBM、SAP 等的 SOA 堆栈。他生活在阳光明媚的南佛罗里达,闲暇时,他非常喜欢参加板球和乒乓球活动。Tilak 在印度加尔各答的 Presidency 学院获得了物理学学士学位,并且已经在班加罗尔的印度科学学院获得了电子工程学学士和硕士学位。访问 Tilak 的 blog,了解关于 SOA 的更多信息。您可以在 LinkedIn 上查看 Tilak Mitra 的个人简介。 关闭[x]关于报告滥用的帮助报告滥用谢谢! 此内容已经标识给管理员注意。关闭[x]关于报告滥用的帮助报告滥用报告滥用提交失败。 请稍后重试。关闭[x]developerWorks:登录IBM ID:需要一个 IBM ID?忘记IBM ID?密码:忘记密码?更改您的密码 保持登录。单击提交则表示您同意developerWorks 的条款和条件。 使用条款 当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。所有提交的信息确保安全。关闭[x]请选择您的昵称:当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。昵称:(长度在 3 至 31 个字符之间)单击提交则表示您同意developerWorks 的条款和条件。 使用条款 所有提交的信息确保安全。为本文评分评论回页首
1解决方案难写在哪里?很多人对写方案非常没有信心,一涉及到方案的事情,就束手无策,到处求人。作为一个公认的方案打手,意思是写方案就象打字员一样。 因为你不敢让你的同事知道你只能用很少的一点时间写方案,让他们担心方案的质量和进度保证,进而对自己的后续工作质量没有信心。写方案不难,知道怎么写才难。有结构就有思路,有思路就有方案。另外真正写方案的人,对自己写过的方案是永远不会满意的,只有这样,每次都会进步一点点,解决方案水平质量就会随公司能力不断增长。基本上原因可以归为四类:11 第一种是没有体系一旦用户要求提供关于PDM的方案,很多人大脑是一片空白,完全不知道从哪里下手。很多人说起自己的产品来,好象知道不少卖点,不过真要写出来,又觉得无从下笔。这种情况一般是写方案者不熟悉自己产品体系造成的,知道一两个甚至更多的产品卖点不难,但难就难在成体系,知识就是成体系的点构成的,而不是一句一句离散的说法构成的。因为这个行业从业人员说句不客气的话,大部分对所销售实施的管理系统并没有很深入的研究,都是半路出家,从头开始,在学习过程中熟悉,在熟悉过程中领悟。所以一下子去驾驭一个整体方案是很痛苦的。只有当一个人对一个产品思路有体系以后,才能够写出完整的方案,否则就是一个单元也要费尽脑汁。所以一个人要想写好一个方案,首先要把自己产品的来龙去脉,功能模块,适应领域,典型客户实施情况有一个全面的了解,这样才能建立一个完整的知识体系,然后逐步补充竞争对手知识和一些技术性知识,不断深化自己的知识体系。12 第二种是没有思路有很多用户看多了模板化的方案以后,想看一些针对他们自己的业务的个性化内容,这个时候有的人按照标准方案模板修改还勉强能对付,但对于个性化内容针对性方案就速手无策了。这种情况从根本上讲还是写方案者不熟悉企业业务造成的,写方案,特别是针对性方案不仅仅要求了解企业的需求,而且要知道这些需求是在何种业务需求下产生的,用户提出这样的要求到底想解决什么问题,把这个问题找出来,一般针对性解决思路就有了,有了思路,自然可以很好的写方案。所以一个人要写好方案,还需要了解下游客户的业务,了解业务最有效的方法就是亲自做几次详尽的业务调研,有了业务调研做基础,在调研过程中把握用户关注重难点问题,自然可以比较好的确定方案的个性化内容思路。解决方案就是把客户的利益和产品特性之间建立一个逻辑性的桥梁。13 第三种是没有素材一般不经常写方案的人,在写一个方案的时候,即使有想法,有思路,但往往也会很累,就是因为缺少足够的素材。很多项目现在都是投标,不同用户可能有不同投标的要求,这样很难用一个方案去适应所有的用户,因此在每个方案中都有一些需要准备的内容。这些内容基本上是通用的,但如果没有足够积累每次编制方案就需要花费大量时间去准备,造成方案完成周期过长。所以写好方案必须具备这三个条件,第一方案编制者对企业业务要很熟悉,或者有相关业务调研经验,第二方案编制者对产品非常熟悉,至少对自己产品功能模块作用很清楚,第三方案编制者手上有大量可公用的素材库。14 第四种是没有层次很多人刚和用户接触没有多久,为了表现自己对客户的重视,马上表示要提供方案,当然有的客户刚刚开始选型,也不知道到底要什么搞,也要供应商马上提供一个方案。结果拍胸脯容易,写方案难,自己写不出来只好求公司,公司没有安排专人了解情况,只好按模板制作一个,用户一看几个供应商内容都差不多,觉得不好,又总结出一些个性化要求,于是大家有开始折腾第二轮方案。其实方案编制在不同阶段有不同策略,不要轻易提供方案。刚开始接触是可以提供项目合作建议书,类似可行性报告,项目需要考察软件技术,可以提供标准的产品技术白皮书,到了经过售前调研,有所准备,在演示前后阶段和其它竞争对手刺刀见红的时候,才在知己知彼的基础上提供解决方案或者投标书。过早提供方案只能匆匆了事,时间紧急,质量自然不高,自然也就觉得方案难写。想急就又能解决问题的事情,本来就是一般人做不来的。方案想要写得好,一定要用心,用心就一定要耗时间,指望用几个小时写出一个高质量的方案是不可能的。如果你做了精心调研,你写不出一个好方案唯一缺的是技巧。写方案是一种技巧性工作,明白了这一点,大家都可以经过练习写出好的方案。21 第一个容易犯的错误:只有论点,没有论证不好的解决方案粗看起来非常厚重,其实都是功能罗列,象产品手册摘要版,不象方案书。不好的方案是一大堆内容,淹没在一堆纸里面,也不知道想说什么,给你一个厚度,证明我们的工作质量很高。我们国内许多的企业客户特别是大型企业都很在乎这点,认为可以从方案厚薄中看出对项目重视程度。如果你做了精心调研,你写不出一个好方案唯一缺的是技巧。写方案是一种技巧性工作,有个金字塔式的写做原理,也就是说文章一定是有结构的。所以真正好的方案,不一定厚,但能看出你用心,你认真。现在的解决方案一个不好的倾向是"长、厚、全",看起来面面俱到,其实对决策者没有帮助。所有的方案无差异性,每家供应商都说自己能解决这些问题,而且都有成功案例。结果所有的方案都无法给决策者简明的判断依据,不得不费更大劲去做产品演示和用户考察。其实很少有企业高管不知道自己的毛病,在企业你随便去找一个人,对问题都能讲一通,在企业你费很大劲可能都找不到一个人能告诉你这些问题可以怎样去解决。通观这个方案并没有研究为什么企业会产生这么多问题?问题是这些问题是什么产生的?为什么出这么多问题?而是不断说"我能!我能!选我,选我!"。如果不能找到解决这些问题的原因,简单地去解决这些现象,就象治病不能治根一样。这样一个模板化,自我膨胀化的方案想打动用户的心是非常困难的。不好的解决方案最大的问题就象写一篇议论文,能够发现问题(这个也是模板化的,可惜中国企业大部分没有意识到自己很多问题并不少见,总以为自己是特殊的一类企业),提出答案(搞信息化),但没有论证(为什么搞信息化和企业管理进步有联系呢?)。没有论证的东西不管内容陈列得多么繁复,名词多么吓人,但是无法打动用户,特别是那种理性的用户。看到方案时候,其实很多用户下不决心,他会感觉每家都差不多。如果从没看过方案的人,突然看到这几个方案,你为什么会感觉某个方案写得好呢,关键是有的方案图画的好,通过图,通过表,会感觉这个公司还不错,很规范。但对内容认可程度并不高,实际上没看懂。22 第二个容易犯的错误:业务解决方案成为功能列表解决方案省事的一种方法就是将产品功能描述作为技术方案内容进行罗列,或者参照软件用户手册罗列,这种解决方案不是按照用户业务去准备的内容,而是按照软件商自己的喜好去编制的解决方案是很难得到用户认可的。大凡按照功能列表组织的解决方案用户会有一个体会,庞大而庸长,但要看到自己想看到的部分非常困难。而且这种方案还有一个特点,一个问题反反复复的提,在业务背景中指出某个问题,讲一通,在价值分析中又重点解释一通,到了功能介绍时又将某个问题来龙去脉概要说明一下,给用户感觉是一堆资料的堆积,哪里体现出了方案的针对性呢?按功能列表准备方案的做法在很长一段时间内不会消失,这和我们普遍是4P销售人员,还缺少SPIN(顾问式)销售人员有关,在资源不足的情况下,要保证效率就只能提供功能列表方案了。)评论(0)
以上就是关于当我们在谈架构时,我们谈的是什么全部的内容,包括:当我们在谈架构时,我们谈的是什么、什么是SOA架构图、如何成为优秀的系统架构师等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)