文章目录
系统架构概述
-
1946年世界上第一台计算机(正式名称为"电子数字积分器和计算机",即 ENIAC)

-
冯·诺伊曼针 对 ENIAC的不足,提出了"离散变量自动电子计算机" (EDVAC),它由运算器 、控制器 、存储器 、输入 和输出设备 五部分组成。该计算机的内部运算采用二进制。

-
系统架构师就是项目的总设计师
- 他是一个既需要掌控整体又需要洞悉局部瓶颈,并依据具体的业务场景给出解决方案的总体设计人员;
- 他要确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员;
- 他要掌握技术团队的能力需要,给出项目管理方法,采用合适生命周期模型,具备以自身为核心形成团队的能力,并在项目进度计划和经费分配等方面开展评估,以预防项目风险。

-
系统架构的定义
- 架构:是体现在组件中的一个系统的基本组、他们彼此的关系与环境的关系及指导它的设计和发展的原则。
- 系统:组织起来完成某一特定的功能或一组功能的组件集。
- 系统架构:系统的一种整体的高层次的结构表示,是系统的骨架和根基,支撑和连接各个部分,包括组件、连接件、约束规范以及指导这些内容设计与演化的原理,它是刻画系统整体抽象结构的一种手段。
- 系统架构设计的目的 :对需要开发的系统进行一系列相关的抽象,用于指导系统各个方面的设计与实现,架构设计在系统开发过程中起着关键性的作用。
- 解决相对复杂的需求分析问题
- 解决非功能属性在系统占据重要位置的设计问题
- 解决生命周期长、扩展性需求高的系统整体结构问题
- 解决系统基于组件需要的集成问题
- 解决业务流程再造难的问题
- 系统架构设计是成熟系统开发过程中的一个重要环节,它不仅是连接用户需求和系统进一步设计与实现的桥梁,也是系统早期阶段质量保证的关键步骤。
- 软件架构(也可称为体系结构)是用来刻画软件系统整体抽象结构的一种手段,软件架构设计也是软件系统开发过程中的一个重要环节。
- 架构分析常用的方法 有:软件架构分析方法SAAM 、 架构权衡分析法ATAM 、 成本效益分析法CBAM 、 基于场景的架构再工程SBAR 、 架构层次的软件可维护性预测ALPSM 、 软件架构评估模型 SAEM等
- 架构设计 是指生成一个满足用户需求的软件架构过程。常用的方法有:
- 从工件描述中提取架构描述的工件驱动 (artifact-driven) 方法;
- 从用例导出架构抽象的用例驱动(use-case-driven);
- 从模式导出架构抽象的模式驱动 (pattern-driven) 方法;
- 从领域模型导出架构抽象的域驱动 (domain-driven) 方法;
- 从设计过程中获得架构质量属性需求的属性驱动设计(attribute-driven design) 方法
- 架构测试着重于仿真系统模型、解决架构层的主要问题。
- 测试方法主要包括架构测试覆盖方法、组件设计正确性验证方法和基于CHAM的架构动态语义验证方法等
- 软件架构 是软件生命周期中的重要产物,它影响软件开发的各个阶段:
- 需求阶段:把软件架构有的概念引入需求分析阶段,有助于保证需求规约和系统设计之间的可追踪性和一致性。
- 设计阶段:设计阶段是软件架构研究关注最早、最多的阶段,这一阶段的软件架构主要包括软件架构的描述、软件架构模型的设计与分析以及对软件架构设计经验的总结与复用等。
- 实现阶段:将设计阶段设计的算法及数据类型用程序设计语言进行表示,满足设计、架构和需求分析的要求,从而得到满足设计需求的目标系统。
- 维护阶段:为了保证软件具有良好的维护性,在软件架构中针对维护性目标进行分析时,需要对一些有关维护性的属性(如可扩展性、可替换性)进行规定,当架构经过一定的开发过程实现和形成软件系统时,这些属性也相应地反映了软件的维护性。
软件架构的常用分类及建模方法
- 典型的架构模型: 分层架构、事件驱动架构、微核架构、微服务架构和云架构等五类。
- 分层架构 (Layered Architecture) 是最常见的软件架构,也是事实上的标准架构。最常见的四层结构
- 表现层:用户界面,负责视觉和用户互动;
- 业务层:实现业务逻辑;
- 持久层:提供数据, SQL语句就放在这一层;
- 数据库:保存数据。
有的项目在逻辑层和持久层之间加了一个服务层 (Service), 提供不同业务逻辑需要的一些
通用接口。用户的请求将依次通过这四层的处理,不能跳过其中任何一层。

-
事件驱动架构:通过事件进行通信的软件架构。
- 事件队列:接收事件的入口;
- 分发器:将不同的事件分发到不同的业务逻辑单元;
- 事件通道:分发器与处理器之间的联系渠道;
- 事件处理器:实现业务逻辑,处理完成后会发出事件,触发下一步操作。

-
微核架构 (Microkernel Architecture) 又称为插件架构 (Plug-in Architecture):指软件的内核相对较小,主要功能和业务逻辑都通过插件实现。内核 (Core) 通常只包含系统运行的最小功能。插件则是互相独立的,插件之间的通信应该减少到最低,避免出现互相依赖的问题。

-
微服务架构 (Microservices Architecture) 是服务导向架构 (Service-Oriented Architecture,SOA)的升级。每一个服务就是一个独立的部署单元 (Separately Deployed Unit)。 这些单元都是分布式的,互相解耦,通过远程通信协议(比如 REST、SOAP) 联系。

-
微服务架构分成三种实现模式:
- RESTfulAPI模式:服务通过API提供,云服务就属于这一类;
- RESTful应用模式:服务通过传统的网络协议或者应用协议提供,背后通常是一个多功能的应用程序,常见于企业内部;
- 集中消息模式:采用消息代理 (Message Broker) 可以实现消息队列、负载均衡、统一日志和异常处理,缺点是会出现单点失败,消息代理可能要做成集群
-
云架构 (Cloud Architecture) 主要解决扩展性和并发的问题,是最容易扩展的架构。云架构主要分成两部分:处理单元 (ProcessingUnit:实现业务逻辑) 和虚拟中间件 (Virtualized Middleware:负责通信、保持会话控制 (sessions)、 数据复制、分布式处理和处理单元的部署)。
- 虚拟中间件又包含四个组件:
- 消息中间件 (Messaging Grid): 管理用户请求和会话控制 (sessions), 当一个请求进
来以后,它决定分配给哪一个处理单元。 - 数据中间件 (Data Grid): 将数据复制到每一个处理单元,即数据同步。保证某个处理
单元都得到同样的数据。 - 处理中间件 (Processing Grid): 可选,如果一个请求涉及不同类型的处理单元,该中
间件负责协调处理单元。 - 部署中间件 (Deployment Manager): 负责处理单元的启动和关闭,监控负载和响应时
间,当负载增加,就新启动处理单元,负载减少,就关闭处理单元。
- 消息中间件 (Messaging Grid): 管理用户请求和会话控制 (sessions), 当一个请求进
- 虚拟中间件又包含四个组件:
-
系统架构的常用建模方法:结构模型、框架模型、动态模型和过程模型
- 结构模型:这是一个最直观、最普遍的建模方法。此方法以架构的构件、连接件和其他概念来刻画结构。并力图通过结构来反映系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格和性质。研究结构模型的核心是架构描述语言。
- 框架模型:框架模型与结构模型类似,但它不太侧重描述结构的细节,而更侧重整体的结构。框架模型主要以一些特殊的问题为目标建立只针对和适应问题的结构。
- 动态模型:动态模型是对结构或框架模型的补充,主要研究系统的"大颗粒"行为的性质。例如,描述系统的重新配置或演化。这里的动态可以是指系统总体结构的配置、建立或拆除通信或计算的过程,这类系统模型常是激励型的。
- 过程模型:过程模型是研究构造系统的步骤和过程,其结构是遵循某些过程脚本的结果。
架构设计师
-
系统架构设计师:
- 从组织上划分:业务架构师 (Business Architect)、 主题领域架构师 (Domain Architect)、 技术架构师 (Technology Architect)、 项目架构师 (Project Architect)和系统架构师 (System Architecture) 等5类
- 根据架构师关注的领域不同:将系统架构设计师分为4种:企业架构师EA(Enterprise Architect)、 基础结构架构师IA(Infrastructure Architect)、 特定技术架构师TSA(Technology Architect) 和解决方案架构师 SA(Solution Architect)。
-
架构设计师:系统开发的主体角色,他们通过执行一系列活动来实施架构设计。架构设计通过生成过程形成最终的产品架构,架构设计师的成果是创建架构。
-
架构设计师是系统或产品线的设计责任人 ,是一个负责理解和管理并最终确认和评估非功能性系统需求(如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等),给出开发规范,搭建系统实现的核心构架,对整个软件架构、关键构件和接口进行总体设计并
澄清关键技术细节的高级技术人员。
-
架构设计师的职责应该是技术领导,这意味着架构设计师除了拥有专门技能外,还必须拥有领导能力。
-
架构设计师在项目中的主要任务:领导与协调整个项目中的技术活动(分析、设计和实施等),推动主要的技术决策并最终表达为系统架构,确定系统架构,并促使其架构设计的文档化,这里的文档化应包括需求、设计、实施和部署等"视图"。
-
架构设计师作为项目的技术领导,他应熟悉业务领域知识并熟练掌握软件开发知识: 1. 掌握业务领域的知识 2. 掌握技术知识 3. 掌握设计技能 4. 具备编程技能 5. 具备沟通能力 6. 具备决策能力 7. 知道组织策略 8. 应是谈判专家
-
架构设计师综合的知识能力结构主要包括10个方面:(1)战略规划能力。(2)业务流程建模能力。(3)信息数据架构能力。(4)技术架构设计和实现能力。(5)应用系统架构的解决和实现能力。(6)基础 IT知识及基础设施、资源调配的能力。(7)信息安全技术支持与管理保障能力。(8)IT 审计、治理与基本需求的分析和获取能力。(9)面向软件系统可靠性与系统生命周期的质量保障服务能力。(10)对新技术与新概念的理解、掌握和分析能力。
-
架构设计师必须具备的6个角色特质:● 作为领导者;● 作为开发者;● 作为系统综合者;● 具备企业家思维;● 具备战略技术专家的权衡思维与战术思维;● 具备良好的沟通能力。