0%

官方系统架构设计师教程-ch1-绪论

绪论

随着技术的进步,信息系统的规模越来越大,复杂程度越来越高,系统的结构显得越来越重要。对于大规模的复杂系统来说,对总体的系统结构设计比起对计算的算法和数据结构的选择已经变得更重要,在这种情况下,人们认识到系统架构的重要性,设计并确定系统整体结构的质量成为了重要的议题。系统架构对于系统开发时所涉及到的成熟产品与相关的组织整合问题具有非常重要的作用,而系统架构师正是解决这些问题的专家。系统架构作为集成技术框架规范了开发和实现系统所必需的技术层面的互动,作为开发内容框架影响了开发组织和个人的互动,因此,技术和组织因素也是系统架构要讨论的主要话题。在系统开发项目中,系统架构师是项目的总设计师,是生产企业新产品、新技术体系的构建者,是目前系统开发中急需的高层次技术人才。

系统架构师是近几年来在国内外迅速成长并发展良好的一个职业,它对系统开发和信息化建设的重要性及给IT业所带来的影响是不言而喻的。在我国,虽然系统架构师的职业在工作内容、工作职责以及工作边界等方面还存在一定的模糊性和不确定性,但它确实是时代发展的需要,并正在实践中不断完善和成熟。

微服务架构,参考文献
微服务参考文献
serverless参考文献
DevOps参考文献
领域设计

150min,选择题75道,1分一题

  • 多轮做题
  • 最后一轮做
综合知识考点找不到图片(Image not found)

90min,案例分析,问答题3道(25分一道,第一道必答,然后四选二)

  • 概念
  • 特点
  • 优点
  • 缺点
  • 应用场景

120min,论文,4选1

图片详情找不到图片(Image not found)

网课一共28h

系统架构的概念及其发展历史

系统架构的概念

架构是一个古老的研究领域。在现实中,很多人认为架构就是一个有关建造一个物理结构的学科。但是,在设计一个信息系统架构时,计划(规划)的概念把架构和建设分割开来。

古代的文明对架构的发展有三个主要的贡献。一是多个建筑结构的完美结合。例如在用于装饰和建筑元素中的横梁、拱扇和柱子间的结合。第二个是建筑装饰形式和模式的广泛普及,这当中许多已经成为东西方宝贵文化遗产的一部分,许多还在被用于今天的建筑当中。第三就是有序规划的概念,规划是架构的基石,也就是这三个贡献中最重要的。现代信息系统的“架构”要素亦继承了这三个要素,即$\color{red}{\text{构件、模式和规划}}$。

现代信息系统的“架构”本质上存在两个层次:一个是概念的层次,一个是物理的层次。而概念层次则包含了艺术、科学、方法和建设风格。物理的层次是指在一系列的架构工作之后而产生的物理结构及其相互作用的结果。

在实际工作中,为了有效地管理公司和运营业务,首先必须定义和建立一系列清晰的、实用的信息及其处理流程。这就是在一个企业中的企业总体业务架构观念,所谓软件架构必须支持这一观念。

目前,软件架构已经成为软件工程领域的研究热点。作为大型软件系统与软件产品线开发中的关键技术之一,已发展为软件工程领域的一个独立学科分支。由于所属的专业领域、学术研究和实践内容的不同,研究人员对软件架构有不同的理解和定义。这里,定义如下:

$\color{red}{\text{软件系统架构}}$ 是关于软件系统的 $\color{green}{\text{结构}}$ 、 $\color{green}{\text{行为}}$ 和 $\color{green}{\text{属性}}$ 的高级抽象。在 $\color{red}{\text{描述阶段}}$ ,其对象是直接构成系统的抽象组件以及各个组件之间的连接规则,特别是相对细致地描述组件之间的 $\color{green}{\text{通讯}}$ 。在 $\color{red}{\text{实现阶段}}$ ,这些抽象组件被细化为实际的组件,比如 $\color{green}{\text{具体类}}$ 或者 $\color{green}{\text{对象}}$ 。软件系统架构不仅指定了软件系统的 $\color{green}{\text{组织结构}}$ 和 $\color{green}{\text{拓扑结构}}$ ,而且显示了 $\color{green}{\text{系统需求}}$ 和 $\color{green}{\text{构成组件}}$ 之间的对应关系,包括设计决策的基本方法和基本原理。

简要的发展历史

企业软件架构(Enterprise Software Architecture),也叫做企业架构,是应用全面的和严格的方法描述一个针对信息系统、流程处理、个人和组织当前和/或未来行为的抽象结构集合,所以它们与组织的核心目标和战略方向结合,尽管一般来说与信息技术高度相关,但也与商业流程优化密切相关,因此也涉及商业模式、功能管理和过程架构。

企业软件架构的雏形来自企业建模的理论和思想。在20世纪80年代早期,除了学术界,很少有人对企业流程再造或企业建模的思想感兴趣,而且使用的理论和模型通常被限于某个信息系统的设计和开发。

到20世纪80年代中期,还在IBM工作的John Zachman首先引入“信息系统架构框架”的概念。Zachman被公认为是企业架构领域的开拓者,他认为使用一个逻辑的企业构造蓝图(即一个架构)来定义和控制企业系统和其组件的集成是非常有用的。为此,Zachman提出从信息、流程、网络、人员、时间和基本原理等6个视角来分析企业,并提供了与这些视角相对应的6个模型,包括语义、概念、逻辑、物理、组件和功能模型。

当时,Zachman并没有使用“企业架构”的概念。1996年美国的Clinger-Cohen法案(以前被称作信息技术管理改革法案)导致了术语“IT架构”的产生。这部法案的主旨是,美国政府指导下属联邦政府机构通过建立综合方法来管理信息技术的引入、使用和处置等。Clinger-Cohen法案要求政府机构的(Chief Information Officer, CIO)要负责开发、维护和帮助一个合理的和集成的IT架构(IT Architecture, ITA)的实施,当时的术语ITA,现在被解释为IT企业架构。

因此,企业软件架构的最早应用是在一些美国的政府机构,美国政府对企业架构应用的推动也发挥了十分重要的作用。自从Zachman框架引入后,首先是美国国家技术标准研究所在1989年发布NIST框架,从此联邦政府内出现了许多框架,其他联邦实体也发布了企业架构框架,包括国防部和财政部等。

1999年9月,美国联邦CIO委员会出版了联邦企业架构框架,它的意图是为联邦机构提供一个架构的公共结构,以利于这些联邦机构间的公共业务流程、技术引入、信息流和系统投资的协调等。

联邦企业架构框架定义了一个IT企业架构作为战略信息资产库,它定义了业务、运营业务所必须的业务信息,支持业务运行的必要的IT技术,响应业务变革实施新技术所必须的变革流程等要素。

随后,美国的管理和预算办公室(OMB)发布的OMB Circular A-130,要求机构记录和提交他们的初始的企业架构到OMB,并对架构发生的重大变革进行更新。这给了OMB一个责任,即帮助推动政府机构内和政府机构间的企业架构的开发,并支持通过使用IT来改进政府运营能力。

2002年2月,OMB建立了一个联邦企业架构程序管理办公室来开发FEA,它的作用是,在联邦机构程序内和跨机构程序间,通过跨部门的分析来找到重复的投资,找到相互的差距,有助于在联邦政府范围内的协作、互操作和交互作用。

企业软件架构的理念很快就得到咨询公司和研究机构认可,被Gartner收购的META Group是最早对企业软件架构进行分析和研究的主要咨询公司。2000年,META Group发布《企业体系机构桌面参考》,提供了一个经验证的实施企业软件架构的方法论,意图成功地构建业务战略和技术实施之间的桥梁。在咨询和研究机构带动下,IBM、微软、HIP、EDS等IT厂商也纷纷把目光集聚到了企业软件架构,希望能够从企业这个视角来定位其产品和服务。

随后,政府、应用企业、咨询和研究机构、厂商广泛参与,企业架构标准化的工作越来越重要,也产生了一些研究团体和标准框架。目前,业界最有名的企业架构框架是TOGAF(The Open Group Architecture Framework, Open Group架构框架),TOGAF是一个行业标准的架构框架,它可以被任何希望开发一个信息系统架构的组织在组织内免费使用。

从20世纪90年代中期开始,TOGAF已经被一些世界领先的IT客户和厂商开发和持续演进。与TOGAF类似的架构包括联邦政府企业架构框架、联邦政府企业架构指南、财政部企业架构框架、Spewak的企业架构规划、Zachman框架、OMG的MOD等。

企业软件架构实施的主体是企业,企业的需求才是软件架构发展的引擎。而企业软件的需求来源广泛,企业信息化需要支持市场需求、环境要求、经营需要、技术发展、用户要求以及法律需求,涉及企业的各个业务领域,而几乎所有领域都能够和信息技术相结合构成企业信息化项目。

软件架构的研究已发展为软件工程领域的一个独立学科分支,研究主要包括软件架构描述语言、软件架构的描述与表示、软件架构的分析与验证、基于架构的软件维护与演化、软件架构的可靠性等方面。

系统架构师的定义与职业素质

通常从组织上划分,架构师分为以下几大类:业务架构师(Business Architect)、主题领域架构师(Domain Architect)、技术架构师(Technology Architect)、项目架构师(J2EE架构师、.NET架构师等)以及我们本书所阐述的系统架构师(System Architecture)。

系统架构师的定义

系统架构师是系统或产品线的设计责任人,是一个负责理解和管理并最终确认和评估非功能性系统需求(如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等),给出开发规范,搭建系统实现的核心构架,对整个软件架构、关键构件、接口进行总体设计并澄清关键技术细节的高级技术人员。

系统架构师主要着眼于系统的“技术实现”,同时还要考虑系统的“组织协调”。因此,系统架构师是特定的开发平台、语言、工具的大师,对常见应用场景能及时给出最恰当的解决方案,同时要对所属的开发团队有足够的了解,能够评估该开发团队实现特定的功能需求目标的资源代价。可以说,系统架构师是信息系统开发和演进的全方位技术与管理人才。

系统架构师技术素质

系统架构师通常负责公司系统的架构设计与持续改进,承担从业务向技术系统转换的桥梁作用;协助项目经理制定项目计划和控制项目进度;需要承担技术管理工作,如负责组织技术研究和攻关,负责组织和管理技术培训工作,管理技术支撑团队并给项目、产品开发实施团队提供技术保障。因此一个好的系统架构师的技术素质十分重要,通常系统架构师需要具有系统思维的能力,还必须具备以下技术素质:

  • 具备丰富的一线大中型开方案设计及技术队伍管理经验。
  • 具备软件行业工作经验,熟悉业务领域的技术应用和发展。
  • 具有项目管理理论基础,并在应用系统开发平台和项目管理上有实践经验。
  • 对相关的技术标准有深刻的认识,对软件工程标准规范有良好的把握。
  • 具备C/S或B/S体系结构或特定领域软件产品开发及架构和设计的经验。
  • 具有面向对象分析(object-Oriented Analysis, OOA)、设计(Object-Oriented Design, OOD)、开发(Object-Oriented Programming, OOP)能力,精通UML和XML等,熟练使用Rational Rose、PowerDesigner等CASE工具进行设计开发。
  • 对相关编程技术(如PHP/.Net/JAVA)及整个解决方案有深刻的理解及熟练的应用,并且精通架构和设计模式(如WebService/J2EE),并在此基础上设计产品框架。
  • 精通大型数据库如Oracle、Sql Server、MySQL等的开发。
  • 对计算机系统、网络和安全、应用系统架构等有全面的认识。
  • 良好的团队意识和协作精神,有较强的内外沟通能力。

系统架构师管理素质

系统架构师管理素质是必须强调的。它包括远见、诚信、果断的领导素质。系统架构师是一个高效工作团队的建造者。作为核心的高层技术管理人员,架构师必须尽可能使所有团队人员的想法保持一致,为一个项目制订一个清晰的、强制性的、有远见的目标作为整个团队的动力,从而为达到整体目标所作的权衡提供基础。作为技术的领导者,系统架构师必须提供特定的方法和模型作为理想的技术解决方案;并排除各种非系统相关因素的影响。作为一个技术管理者,系统架构师在需要做出决定时,必须避免犹豫,必须具备及时解决技术问题的紧迫感和自信心。

系统架构师与其他团队角色的协调

关于系统架构师的定位,在很多资料中都没有明确的表述,这里可以参照系统开发中的主要角色的给出描述。

根据全国计算机技术与软件专业技术资格(水平)考试的安排,其中作为高级工程师级别的职位有项目管理师、系统分析师和系统架构师(这里的系统架构主要是指软件系统的架构)。考试大纲对这三个职位的要求和职责定义如下。

(1)项目管理师:掌握信息系统项目管理的知识体系,具备管理大型、复杂信息系统项目和多项目的经验和能力;能根据需求组织制定可行的项目管理计划;能够组织项目实施,对项目的人员、资金、设备、进度和质量等进行管理,并能根据实际情况及时做出调整,系统地监督项目实施过程的绩效,保证项目在一定的约束条件下到达既定的项目目标;能分析和评估项目管理计划和成果;能在项目管理进展的早期发现问题,并有预防问题的措施;能协调项目所涉及的相关人员。即项目管理师的主要职责是负责整个项目的实施和控制,协调各种资源(包括组织内部资源和客户资源)。

(2)系统分析师:熟悉应用领域的业务,能分析用户的需求和约束条件,写出信息系统需求规格说明书,制订项目开发计划,协调项目开发与运行所涉及的各类人员;能指导制订企业的战略数据规划,组织开发项目;能评估和选用适宜的开发方法和工具;能按照标准规范编写系统分析、设计文档;能对开发过程进行质量控制与进度控制;能具体指导项目开发。即系统分析师的主要职责是获取并分析用户的需求,形成规范化的文档,指导整个项目的开发,需要与客户不断的交流,熟悉应用领域的业务。

(3)系统架构师:能够根据用户需求,结合用户应用领域的实际情况,设计正确、合理的软件构架,维护系统构件及其接口,并确保系统构架具有良好的性能;能够对项目进行系统构架级的描述、分析、设计与评估;能够按照相关标准编写相应的设计文档;具有扎实的理论功底、广博的知识面,能够与系统分析师、项目管理师相互协作、配合工作。即系统架构师的职责更加强调整体的、宏观的系统设计,重点在架构级别上。重点要对架构进行描述、分析和评估。

图1-1 系统架构师的定位找不到图片(Image not found)

图1-1的上图反映了传统的系统开发:通过对用户的需求分析,组织必要的资源和设施,选择设计合适的架构,然后由项目经理统筹安排组织实施(包括人、财和物),这是一个反复互动,逐步契合的过程。

由上面所述可以看出,在传统的系统开发中,系统开发进度及统筹的管理主要由项目经理来完成,需求分析及技术实现主要由系统分析员或设计员来完成。由于项目经理、系统分析员或者程序员从各自职位角度出发产生冲突的制约,不可能很好地给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术,或者说最终难以确认和评估技术对需求实现产生的影响。所以我们把系统架构设计师定位在图1-1的下图中两个椭圆相交的部分,他负责整个系统的战略策划和技术实现。图1-1的上图说明架构设计先行和系统架构师、系统分析师、项目管理师三者的相互关系与作用。

系统构架师与项目经理的关系及区别

软件项目经理是指对项目控制/管理,关注项目本身的进度、质量、分配、调动、协调,管理好人、财、物等资源的负责人。对于软件项目经理来讲,职责包括项目计划、进度跟踪/监控、质量保证、配置/发布/版本/变更管理、人员绩效评估等方面。优秀的项目经理需要的素质,并不仅在于会使用几种软件或是了解若干抽象的方法论原则,更重要的在于从大量项目实践中获得的宝贵经验,以及交流、协调、激励的能力,甚至还应具备某种个性魅力或领袖气质(charisma)。一般来讲,技术人员重技术而倾向于忽视“人”的因素,而这正是项目经理管理活动的一个主要方面。项目经理还必须能够应付开发过程中大量的偶发事件和杂务。

在一个项目中,推动项目技术发展的是系统构架师。在技术方面,项目经理(项目管理师)配合系统构架师并提供各个方面的支持,其主要职责是与内外部沟通和管理资源(包括人),系统构架师则要负责提出系统的总体构架,并给出开发指导。

系统构架师与系统分析师的关系及区别

系统分析师(system analyst)是在系统开发中进行业务需求分析、系统需求分析、可行性分析、业务建模和指导项目开发的人。其工作特点是与行业专家、用户沟通,及时与项目经理(项目管理师)、软件架构师协商,分析项目具备的特点、成本、风险等,考虑实现的模型。系统分析师所面临的往往是有许多不确定性的事件,需要对这些不确定的事件进行分析、总结,使之得出一个相对可靠的确定性结论或实施方案模型。一般意义上讲,系统分析师的水平将影响系统开发的质量,甚至成败。在一个完善的系统开发队伍中,一般应有项目管理师、软件架构师、系统分析师、软件设计师、测试工程师、数据库工程师、程序员和质量保证人员等不同的职位,还需要有业务专家和其他辅助人员。对于大型企业或项目,如果一人承担多个角色,往往容易发生顾此失彼的现象。

系统分析师对业务系统进行分析、建模,他的任务、目标是明确的。系统架构师协同系统分析师的工作,建议系统分析师按什么标准,什么工具,什么模式,什么技术去思考系统。同时,系统架构师应该对系统分析师所提出的问题,碰到的难题及时地提出解决的方法。

系统架构师知识结构

软件系统架构师综合的知识能力结构包括9个方面,即:

(1)战略规划能力。

(2)业务流程建模能力。

(3)信息数据架构能力。

(4)技术架构选择和实现能力。

(5)应用系统架构的解决和实现能力。

(6)基础IT知识及基础设施、资源调配的能力。

(7)信息安全技术支持与管理保障能力。

(8)IT审计、治理与基本需求分析、获取能力。

(9)面向软件系统可靠性与系统生命周期的质量保障服务能力。

作为系统架构师,必须成为所在开发团队的技术路线引导者;具有很强的系统思维的能力;需要从大量互相冲突的系统方法和工具中区分出哪些是有效的,哪些是无效的。架构师应当是一个成熟的、丰富的、有经验的、有良好教育的、学习快捷、善沟通和决策能力强的人。丰富是指他必须具有业务领域方面的工作知识,知识来源于经验或者教育。他必须广泛了解各种技术并精通一种特定技术,至少了解计算机通用技术以便确定哪种技术最优,或组织团队开展技术评估。优秀的架构师能考虑并评估所有可用来解决问题的总体技术方案。需要良好的书面和口头沟通技巧,一般通过可视化模型和小组讨论来沟通指导团队确保开发人员按照架构建造系统。

因此,系统架构师知识维度可以总结为“多层次+多方面”。所谓多层次,意味着系统架构师必须在体系结构、计算机软硬件与网络基础知识、信息化基础知识、信息安全与可靠性基础知识等基本功的层面上受过良好的教育和快捷的学习能力;还须在系统架构设计方法、设计模式、设计流程以及各种模型等方面有丰富的经验,广泛了解各种构件产品和技术并精通一种特定领域的架构设计;进一步,还须在系统架构设计实践层面,有自己的认识和理解,同时具有很强的表述能力;所谓多方面,意味着系统架构师在每个知识层面上必须具有技术、管理、心理和艺术等多方面的知识和能力。这和系统架构师的多角色特点是相关的。本书也正是从这个角度来介绍系统架构的知识体系,即从系统构件、模式和规划三个方面的技术基础、原理和方法的角度编写而成的关于软件架构师的基本知识结构和水平的教材。

从开发人员到架构师

软件架构师一般都是具备计算机科学或软件工程的知识,由程序员做起,然后再慢慢成长为架构师的。在国内,很多大学目前还没有设立软件架构的学位课程,随着IT业界对设计和架构的兴趣日渐高涨,在学校课程中增加部分相关内容已不能满足产业发展的需要。一方面,大学要加强软件架构学课程的建设,另一方面,软件架构师的成长还应该有一个实践的教育过程,并不是简单地通过学校的理论学习或者通过某软件公司的认证就能成为合格的软件架构师。除了在学校学习信息系统综合知识外,软件架构师的大部分知识和经验将来自实际开发工作。根据软件架构师的任职条件,一名合格的软件架构师的成长应该经历8年以上的软件项目开发实际工作经验。一般需要经历程序员、软件设计师等阶段,然后再逐步成长为软件架构师。

当然,并不是每一位程序员经过8年后都可以成长为软件架构师。一个软件工程师在充分掌握了软件架构师工作所必需的基本理论和技能后,如何得到和利用机会、如何利用所掌握的技能进行应用系统的合理架构、如何不断的抽象和总结自己的架构模式、如何深入行业总结规律,成为能够胜任分析、架构为一体的精英人才,这是机遇、努力和天赋的综合结果。

就目前来看,国内软件架构师的培养途径主要有两种方式:一种是大学(软件学院)教育方式,另一种是个人自我培养然后再进行相应的培训和认证。但是,不管哪种方式都有其不足之处。

软件学院的培养方式能够系统的学习软件架构师必需的知识体系,但是,软件架构师不是简单的通过理论学习就能够培养出来的,软件学院的学生可能缺乏必要的设计、开发经验和相关的领域知识。尽管软件学院也强调给予学生实践的机会,但毕竟这种机会是有限的。即使有充分的机会,也没有足够的时间在实践中获得广泛的检验和验证。也包含一些管理因素,如有关“三分之一的师资来自企业”的规定,在部分软件学院中也没有得到真正落实,导致传授给学生的还是一些纯理论知识。

自我培养方式的主要对象是具有一定年限的软件开发和设计人员,如Microsoft、IBM、Sun等公司的软件架构师认证对学员的基础并没有具体的要求,只要交纳规定的费用,然后进行几天的集中培训,通过考试就发给学员证书,甚至不需要考试就直接发放证书。这些开发人员在自我培养的过程中不一定能够系统的学习软件架构师的理论知识,他们只具有一定的开发和设计经验,仅仅经过几天的培训,是不太可能培养出合格的软件架构师的。而且,作为某个厂商的培训和认证,其最终目的是培育自己的市场,培养一批忠诚的用户或产品的代言人,而不是为中国培养软件架构师。

在国外,软件架构师的培养与认证具有严格的过程,明确规定了教育目标、认证的要求和学习课程等方面的内容。下面,介绍三个组织的软件架构师的认证情况。

UC Irvine

在UC Irvine的软件架构师认证计划中,为了拿到软件架构师C级认证,学员必须完成11个单元的必修课程和至少4个单元的选修课程。这些课程如下:

  • 必修课程:软件系统建模和分析概论(2个单元)、系统分析基础(3个单元)、用户需求的分析和文档化(3个单元)、软件架构项目(3个单元)。

  • 选修课程:信息系统项目管理(2个单元)、系统性能建模(2.5个单元)、管理业务改进项目(2.5个单元)。

UC Irvine的软件架构师认证要求学员具有业务系统建模,决定用户需求,评价业务过程的能力,掌握项目管理技术,能设计完善的、具有最佳可适应性和可扩展性的架构。该认证程序以一门实践课程结束,在实践课程中,学员从头开始,设计一个大规模软件解决方案的架构。

CMU/SEI

SEI在软件架构师方面的认证包括三个职位,分别是软件架构师、ATAM评估师和ATAM主任评估师。这些认证都需要学习两年的课程。其中软件架构师需要学习的课程有:软件架构原理与实践、软件架构文档化、软件架构设计与分析和软件产品线。

iCMG

iCMG对软件架构师的认证强调7个层次的课程学习。

软件架构师作为软件的总设计师,其水平和能力直接决定了软件系统的总体性能,对软件架构师的认证是十分重要和紧迫的。全国计算机技术与软件专业技术资格(水平)考试设立系统架构设计师级别的认证考试,是解决软件架构师认证问题的重要途径。