软件架构:什么是软件Software架构?

  本文来自于 Rational Edge:这篇有关软件Software架构较新规则介绍个有关“架构” 4篇系列文章作者以定义规则关键术语开始继续探索设计出色架构对于架构所部署环境所起作用我们毫不怀疑世界正变得越来越依靠软件Software软件Software是诸如无处不在手机和复杂空中控制系统核心元素事实上如果没有软件Software例如eBay 和 Amazon等我们理所当然认为是创新企业将不可能存在甚至那些金融业零售业和公共部门等传统行业也相当依赖于软件Software在当今时代某种程度上我们很难发现个企业完全和软件Software不相关   高新企业为了生存因此他们所依靠软件Software必须能提供其所需功能;所需高质量;所承诺可用性和可接受价格

  这篇文章主题就是有关可以影响这些属性软件Software架构我所关注是“强软件Software系统”在IEEE中定义如下:

  个软件Software集成系统就是软件Software对于设计构建配置和整个系统发展具有深入影响系统[来自 IEEE 1471"架构定义" 部分]

  在本文中“架构”和“软件Software架构”是相同含义虽然这篇文章关注于软件Software集成系统但是应该注意软件Software集成系统仍然需要硬件来运行并且诸如可靠性和性能等品质是通过软硬件结合实现所以解决方案中硬件部分不能被忽略文中后面将更详细讨论这部分内容

  定义架构

  我们对于“架构”定义没有缺陷甚至存在支持定义集网站WebSite1 文中定义来自IEEE标准 1472000IEEE对强软件Software系统架构描述推荐实战参见IEEE 14712 定义如下其中重要部分用粗体字表示

  架构是在组件彼此间和和环境间关系引导设计发展原则中体现系统基本结构[IEEE 1471]

  这些标准还定义了以下相关概念:

  系统是为实现某个(些)特殊作用组件集合专用系统包括个人应用传统概念上系统子系统系统中系统产品线产品系列整个企业和其他利益集团个系统是为了实现个或多个任务而存在[IEEE 1471]

  环境决定了开发操作策略和其他影响系统设置和条件[IEEE 1471]

  任务是指系统为了实现对对象设置使用或操作[IEEE 1471]

  涉众是对于系统有利益关系或关注个人团队(Team)或组织[IEEE 1471]

  正如我们所见“组件”贯穿于这些定义正如有意留下个模糊概念来解释大部分架构定义没有提到“组件”IEEE 1471也不例外组件也许是逻辑上或物理存在技术上独立或特定规模大或规模小由于文章原因我使用了UML 2.0规范标准组件定义;并且我相当宽松使用这个概念来包含各种所遇到架构成分包括了对象技术组件(例如Enterprise JavaBean)服务模块遗留系统包应用这些是 UML 2.0中对“组件”定义:

  [组件]是包括内容系统模型部分且它显示是可替换组件定义了所需接口行为例如组件类似类型(type)它和所需接口行为(包括静态和动态语义)3

  这里定义包括了多种区别概念文中后面将有更详细介绍虽然工业界对于“架构”概念没有普遍共识但是有必要考虑些其他定义使得他们可以被遵照参照下下面定义重点处我已经用粗体表示

  架构是对软件Software系统组织结构部分和系统包含接口选择集合部分特定行为较大子系统部分构成和架构风格重大决定设置[Kruchten]4

  系统或计算系统软件Software架构是包含软件Software部分外部可见特性部分和他们的间关系系统结构[Bass et al.]5

  [架构]是系统组织结构和相关行为架构可被重复分解为通过接口互联部分关系和结合部相互作用部分通过接口相互作用部分包括类组件和子系统[UML 1.5]6

  软件Software架构或系统由组成系统结构相互作用和软件Software结构重要设计决定组成设计决定应成功实现所期望支持质量设计决定为系统开发支持和维护提供概念上基础 [McGovern]7

  虽然在某些方面定义有些区别但我们可以看到大部分是相同例如大部分定义都指出个架构关注于结构和行为仅关注于重要决定可以和架构风格受涉众和环境影响体现基于原因决定所有这些方面都在下面提到

  个架构定义结构

  如果你要求人们为你描述“架构”十分的 9人都会参照结构来解释这在有关构建或其他土木工程结构(例如桥梁)中非常常见虽然这些条目中其他属性(例如行为适当性和美学观念)也存在但是结构属性是最熟悉和最经常被提到

  我们对你会让某人来描述下他所工作软件Software系统架构点也不会感到奇怪他们将会给你展示份系统结构方面图表——无论这些内容是否是架构层组件或是分布结点事实上结构是架构基础属性架构会以各种形式展示他们自己且大部分架构定义是非常模糊个结构组件可能是个子系统进程数据库计算结点馈赠系统按需产品等等

  许多架构定义不但承认了他们自己结构元素而且还有结构元素组成关系(任何连接部分都需支持这样关系)接口这些部件都以区别方式被提供例如连接段可以是套接字同步或异步和某个协议相关等

  图1提供了结构元素例子这幅图显示了包含展示顺序进程系统结构部分UML类图我们看到有 3个类——OrderEntryCustomerManagement和AccountManagementOrderEntry类和CustomerManagement和AccountManagement类相连

  什么是软件Software架构?

  图1:UML类图显示了结构元素

  个架构定义行为

  和定义结构元素架构定义了这些结构元素相互作用这些作用可以实现所期望系统行为图2展示了允许系统支持在顺序进程系统中次序定义UML顺序图在这里我们能看到 5个交互作用Sales Clerk使用OrderEntry类创建了个顺序OrderEntry使得客户得到使用CustomerManagement类细节然后OrderEntry使用 AccountManagement类创建个次序用次序条目构建顺序

  什么是软件Software架构?

  图2:UML是序列图显示了行为元素

  图2和图1相连我们能从图2中有关交互作用定义得到图1中相关内容例如OrderEntry事例在被执行中要依靠CustomerManagement事例正如在图2中所示这种依赖就如OrderEntry和CustomerManagement间通信所反映依赖关系

  个架构关注于重要元素

  当个架构定义了结构和行为它不会在意所有结构和行为定义它只在意那些被认为是重要元素重要元素是那些有持久影响例如结构部分主要部分和核心行为相关元素和对诸如可靠性和可测量性等重要品质相关元素来说架构不关心这些元素细节架构重要性还可以以经济重要性来表达某些元素主要驱动者是创建成本和变更成本

  由于架构仅关注于重要元素它给我们提供了在考虑中系统个特殊透视图——和架构最相关透视图8在这种含义下个架构是个系统抽象可以帮助架构师管理复杂性

  我们仅仅应注意重要元素设置不是静态作为个需要被提炼确定风险可执行软件Software构建和经验整理总结结果重要元素设置可能会改变但是面对改变架构稳定性是好架构可执行架构进程架构师标志如果架构需要根据变化不断作出调整那么这不是个好标志但是如果架构相对稳定那么相反也对

  个架构可以平衡涉众需求

  架构是为了实现涉众需要而创造但是般来说不可能满足所有需求例如涉众可能会问特定时间框功能但是这两方面(功能和时间框)是互斥或者为了满足时间表而减少范围或者所有功能可以扩展时间框实现类似区别涉众的间可能有相互冲突需求所以应满足适当平衡性所以作折中是构建进程主要方面且妥协是架构重要属性

  仅仅提供个任务例子考虑如下涉众群各自所需:

  最终用户关心直觉正确行为性能可靠性可用性有效性和安全性

  系统管理员关注直觉行为管理和辅助监测

  业务人员关注有竞争力特性市场时效性对于其他产品定位和开销

  客户关注开销稳定性和计划性

  开发者关注清晰需求和简单而设计思路方法

  项目经理(project manager)关注追踪项目计划资源生产使用和预算可预见性

  维护人员关注易理解性致性和文档化设计思路方法和易修改性

  正如表中可看到对于架构师个挑战是涉众群不仅仅关注系统所提供需求功能他们所关注在实际中是不起作用在系统中他们不发生作用(例如有关成本和计划关注)但是这些关注体现了系统质量或局限非功能需求经常是架构师所关注最重要需求   个架构基于基本原理体现决策

  个架构重要部分不仅仅是最终结果架构本身而是他为什么是如此原因因此确信你已把使用这个架构和原因文档化就非常重要了

  这个信息和许多涉众都有关系尤其是那些维护系统这些信息对需要参考设计理由架构师来说非常有价值他们可以省去不必要步骤例如当需要重复架构和架构师重新审视所做决定时这些信息非常有用

  个架构可以符合个架构样式

  大部分架构来源于有相似关注共享系统这些相似性可被描述成某种特殊模式架构风格虽然经常是复杂和组合模式(由许多模式共同作用)种架构风格展示个经验法典并且有利于架构师重复使用类似经验架构风格例子包括分布式风格管道和过滤器风格数据中心风格基于规则风格等个系统可以包含多于个架构风格Shaw和Garlan描述如下:

  [架构风格] 按照结构组织模式定义了系统更具体架构风格定义了组件和连接型语法和连接思路方法9

  在 UML 中定义:

  [模式] 是对于普遍问题普遍解决方案10

  除了重复经验由于种风格以文档形式保存了使用它理由和它结构和行为所以架构风格应用使类似架构师工作变得容易起来

  个架构被其环境所影响

  系统贮存于环境中且环境影响架构这就是有时所提到“环境中架构”基本上环境决定了系统运行范围这些又决定了架构影响架构环境原因包含架构所支持商务环境系统涉众群内部技术限制(例如需要符合组织标准)和外部技术限制(例如对外部系统接口或遵守外部规则标准)

  相反如在Bass, Clements, 和Kazman所描述11架构可能还影响它环境不但是从技术前景架构创新改变了环境--例如它可能对拥有组织可重复使用价值有贡献——架构创新可能在技术方面改变环境

  当提到软件Software集成系统个必须被提到有关环境特殊部分为了软件Software有用性它必须执行为了执行软件Software运行在硬件的上所以最终系统是软硬件结合和诸如可靠性和性能等完美结合实现软件Software不能在单独硬件条件下实现这些功能

  IEEE 标准 12207-1995IEEE 信息技术标准 -- 软件Software生命周期过程定义了和的前IEEE1471区别系统(关注于软件Software集成系统)但和在系统工程方面定义相同:

  [系统]是包含了个或多个进程硬件软件Software工具和可以满足需求集合 [IEEE 12207]12

  s Engineering (RUP SE)Rational Unied Process配置包含个类似定义

  [系统]是提供为企业执行商业目或任务服务资源系统组件包括硬件软件Software数据和工作人员13

  在系统工程方面根据软件Software硬件和人使用定义事务例如如果性能为重那么可能决定某个系统元素硬件实现而不是软件Software或人个例子是为了给客户提供可用系统所以要给客户提供接口更复杂情况需要通过软硬件和人结合实现系统功能

  我们非常有趣注意到系统工程特别关注于对待软件Software和硬件因此避免把硬件和软件Software相比作为第 2级或是执行软件Software载体或是反过来

  个架构影响团队(Team)结构

  架构定义了组连贯相关元素例如顺序进程系统架构可能已定义了组次序入口计数管理客户管理实现外部系统集成持续性和安全性

  每组都会要求区别技术因此旦被定义好软件Software开发小组结构就非常有意义了但是情况经常是最初小组结构影响了构架而不是相反情况结果通常都是个不太理想架构“康威规律” 规定“如果你有4个编译小组那你会有4路编译器” 实际上我们经常会无意识地创建架构以反映创建架构组织

  但是完全从实际出发事实上这种有点理想观点经常是不实际当前小组结构和技术都有实际可能限制并且架构师必须考虑在内

  个架构呈现在每个系统中

  每个系统都有个架构即使这个架构没有被文档化或者如果系统非常简单且包含单元素对架构文档化很有价值文档化架构比没有考虑更周全——因此也更有效所以根据架构进程可以更细致考虑

  相反地如果架构没有文档化那么很困难来证明满足了诸如可维护性最佳适应性等需求似乎大部分现今存在无文档架构都有些随意性而不是目

  个架构拥有个特定范围

  有许许多多种架构最著名是和建筑和其他工程相关甚至在软件Software工程领域我们经常会遇到区别形式架构例如除了软件Software构架概念我们会遇到诸如企业架构系统架构组织架构信息架构硬件架构应用架构基础设施架构等你会见到其他类型每种类型都定义了个架构具体范围

  不幸产业界没有相互形式间协定所以导致了对同形式区别意思但是从图3中可以推断出这些形式范围当你们在考虑和讨论下面这张图时候你肯定会发现很多你区别意元素或是在你们组织中区别使用思路方法但是重要是——这些形式确存在却没有观点

  什么是软件Software架构?

  图3:区别领域范围

  图3展示元素有:

  软件Software架构——这篇文章主要关注点

  硬件架构——包括CPU, 内存硬盘周边设备例如打印机和连接这些元素部分



  组织架构——是些有关商业进程组织结构规则和职责和组织核心能力部分

  信息架构——包含组织好信息结构

  软件Software架构硬件架构组织架构和信息架构是全部系统架构子结构 企业架构和系统架构很相似包括硬件软件Software人员等但是企业架构和商业有很强联系它专注于商业对象联系专注于商业敏捷性和组织效率企业架构可能穿插于公司间

  正像人们期盼那样有相应形式架构师(例如软硬件架构师等)和架构(例如软硬件架构等)   现在我们已浏览过这些定义了但还有很多未回答问题企业架构和系统架构间有什么区别?个企业是个系统?信息架构和数据集成软件Software应用中数据架构是?不幸没有对这些问题答案

  对现在来说你会意识到这些区别但是产业界不存在对这些内容致定义因此对你建议只是选择那些和你组成相似形式并且合适定义他们至少你会获得某些致性并减少传达可能

  整理总结

  这篇文章关注于定义软件Software架构核心特性但是仍然有很多未被解答问题什么是软件Software架构师角色?架构师最重要活动是什么?从“建立架构”中能得到什么好处?这些问题将在后续文章中被解答



Tags:  什么是cs架构 软件架构的艺术 软件架构设计 软件架构

延伸阅读

最新评论

发表评论