第一章 系统架构绪论

1.1系统架构概述

  • 冯·诺依曼结构计算机组成
    运算器,控制器,存储器,输入设备,输出设备五个组成
  • 新影响 系统的安全性,可靠性,可维护性,可移植性,安全性,可扩展性,可用性
  • 系统架构师 就是项目的总设计师,既要掌握整体又要洞悉局部瓶颈,能根据具体的业务场景给出解决方案的总体设计人员,要确认和评估系统需求,给出开发规范,搭建系统实现的核心架构,澄清技术细节,扫清主要的技术难点,要掌握技术团队的能力需要,给出项目管理方法,采用合适生命周模型,具备以自身为核心形成团队的能力,并在项目进度计划和经费分配等方面开展评估,以防项目风险

1.1.1 系统架构的定义

  • 定义
    1.架构 是体现在组件中的一个系统的基本组织,它们彼此的关系与环境的关系指导它的设计和发展的原则。
    2.系统是组织起来完成某一特定功能或一组功能的组件集
    3.环境或者上下文决定了堆这个系统的开发、运作、政策以及会对系统造成其他影响的环境和设置
    4.任务是由一个或者多个利益相关者通过系统达到一些目标的系统的一个用途或者操作
  • 系统架构作用:
    1.解决相对复杂的需求分析问题
    2.解决非功能属性在系统占据重要位置的设计问题
    3.解决生命周长、扩展性需求高的系统整体结构问题
    4.解决系统基于组件需要的集成问题
    5.解决业务流程再造难得问题
  • 软件开发中的现象问题:
    1.软件复杂、易变,其行文特征难以预见,软件开发过程中需求和设计之前缺乏有效的转换,导致软件开发过程孤男和不可控
    2.随着软件系统的规模越来越大,越来越复杂,整个系统的结构和规格说明就显得越来越重要
    3.对于大规模的复杂软件,相较于堆计算算法和数据结构的选择,系统的整体结构设计及和规格说明已经变得明显重要的多
    4.对软件系统结构的深入研究将会成为提供软件生产效率和解决软件维护问题的最有希望的新途径
  • 模块化开发方法:
    把一个待开发的软件分解成若干个小的而且简单的部分。采用相对复杂事物分而治之的经典原则。
  • 模块化开发遵循的规则:
    1.最高模块内聚。就是再一个模块内部的元素最大限度地关联,只实现一种功能的模块是高内聚的,具有三种以上功能的模块是低内聚的。
    2.最低耦合。不同模块之间的关系尽可能的弱,以利于软件的升级和扩展
    3.模块大小适度
    4.模块调用链的深度不可过多
    5.接口简单精炼,具有信息屏蔽能力
    6.尽可能地复用已有的模块
  • 基于模块化思想,提出了面向对象服务架构(SOA),它提供一组基于标准的方法和技术,通过有效整合和重用现有的应用系统和各种资源实现服务组件化,并基于组件化实现各种新业务应用的快速组装,帮助企业更好地应对业务的灵活性要求,
  • 组件具有可组装性和可插拔性,每个足迹按的运行仅依赖于平台或者容器,组件与组件之间不存在直接的耦合关系,
  • 应用集成是将一些基于不同平台或不同方案的的应用软件有机地集成到一个无缝的,并列的,易于访问的单一系统中,以建立一个统一的综合应用。
  • 重点:
    1.软件架构的描述与表示,软件架构分析,设计与重试
    2.软件架构发现演化与重用
    3.基于软件架构开发方法
    4.软件架构风格
    5.动态软件架构
    • 1.架构分析
      1.可分为结构分析,功能分析,非功能分析,目的是系统被实际构造之前预测其质量属性
      2.架构分析常用方法:软件架构分析方法SAAM,架构权衡分析法ATAM,成本效益分析法CBAM,基于场景的架构再工程SBAR,架构层次的软件可维护性预测ALPSM,软件架构评估模型SAEM
    • 2.架构设计
      架构设计是指生成一个满足用户需求的软件架构过程。
      架构设计常用的方法有:
      1.从工作描述中提取架构描述的工件驱动方法;
      2.从用例导出架构抽象的用例驱动方法;
      3.从模式导出架构抽象的模式驱动方法;
      4.从领域模型导出架构抽象的域驱动方法
      5.从设计过程中获得架构质量属性需求的属性驱动设计方法
    • 架构测试
      1.架构测试着重于仿真系统模型,解决架构层的主要问题,
      2.架构测试策略分为:单元,子系统,集成和验收测试等阶段的测试策略。
      3.测试方法主要包括:架构测试覆盖方法,组件设计正确性验证方法和基于CHAM架构的动态语义验证方法等。
    • 软件架构发现
      1.软件架构发现解决如何从已经存在系统中提取软件架构的问题,属于逆向功能
      2.软件架构演化是由于系统需求,技术,环境和分布等因数的变化而最终导致软件架构的变动,软件系统在运行是时刻的架构变化称为架构冬天性,而将架构的静态修改成为架构扩展
      3.软件架构复用属于设计重用,比代码重用更加冲向。架构模式就是架构复用的一种成果
    • 软件开发模型
      1.软件开发模型是跨越整个软件生命周期的系统开发、运行和维护所实施的全部工作和任务的结构框架,给出了软件开发活动各个阶段之间的关系
      2.软件开发模型:以软件需求完全确认的瀑布模型;在软件开发初期只能提供基础需求为前提的渐进式开发模型(螺旋模型);以形式化开发方法为基础的变换模型
    • 架构风格
      1.架构风格是针对给定场景中经常出现的问题提供的一般性可重用方案,它反映了领域中众多系统共有的结构和语义特征,并指导如何将各个模块和子系统有效地组成一个完整的系统
      2.软件架构风格主要:数据流风格,调用返回风格,独立组件风格,虚拟机风格和仓库风格
  • 软件开发各个阶段:
    1.需求阶段:报软件架构有的概念引入需求分析阶段,有助于保证需求规约和系统设计之间的可追踪性和一致性
    2.设计阶段:主要包括软甲架构的描述,软件架构模型的设计与分析,以及对软件架构设计经验的总结和复用等
    3.实现阶段:将设计阶段设计的算法及数据类型用程序设计语言进行表示,满足设计、架构和需求分析的要求,从而得到满足设计需求的目标系统
    4.维护阶段:需要对一些有关维护性的属性(如可扩展性,可替换性)进行规定,当架构经过一定的开发过程实现和形成软件系统时,这些属性页相应地反映了软件的维护性。

1.1.2软件架构的常用分类和建模方法

  • 1.软件架构的常用分析:
    分层架构、事件驱动架构、微核架构、微服务架构和云架构
    • 分层架构
      分层架构将软件分层若干个水平层,每层都有清晰的角色和分工,不需要知道其他层的系统,层与层之间通过结果口进行通信 常见四层结构:
      1.表现层:用户界面,负责视觉和用户互动
      2.业务层:实现业务逻辑
      3.持久层:提供数据,sql语句就在这一层
      4.数据库:保存数据
    • 事件驱动架构
      事件驱动架构是通过事件进行通信的架构,事件是状态发生裱花是软件发出的通知。分为四个部分:
      1.事件队列:接受事件的入口
      2.分发器:将不同的事件分发到不同的业务逻辑单元
      3.事件通道:分发器与处理器之间的联系渠道
      4.事件处理器:实现业务逻辑,完成后发出事件,触发下一步
      注意:简单项目可以把事件队列,分发器,事件通道合并为事件代理,分为事件代理和事件处理器两部分
    • 微核架构
      微核架构又称为插件架构,是指软件的内核相对较小,主要功能和业务逻辑都通过插件实现,内核通常指包含系统运行的最小功能,插件则是相互独立没插件之间的通信应该减少到最低,避免相互依赖的问题
    • 微服务架构
      微服务架构是服务导向架构(SOA)的升级,每个服务都是独立的部署单元,这些单元都是分布式的,相互解耦的。通过远程通信协议(比如rest,soap)联系。微服务架构分为三种实现模式
      1.RESTfulAPI模式:服务为通过api提供,云服务就是这种
      2.RESTful应用模式。服务通过传统的网络协议或者应用协议提供,背后通常是一个多功能的应用程序,常见于企业内部
      3.集中消息模式:采用消息代理可以实现消息队列、负载均衡、统一入住和异常处理。缺点是会出现单点失败,消息代理需要做成集群
    • 云架构
      1.云架构主要解决扩展性和并发的问题,是最容易扩展的架构.原因:将数据复制到内存中,变成可复制的内存数据单元,然后见业务处理能力封装为一个个处理单元。访问量增加,就新建处理单元,减少就关闭处理单元,主要需要数据持久化。
      2.云架构主要分为:处理单元和需虚拟中间件,
      处理单元实现业务逻辑,
      虚拟中间件负责通信,保持会话控制,数据复制,分布式处理和处理单元的部署
      • 虚拟中间件
        虚拟中间件分为四个组件
        1.消息中间件:管理用户请求和会话控制
        2.数据中间件:将数据复制到每一个处理单元,及数据同步
        3.处理中间件:负责协调处理单元
        4.部署中间件:负责处理单元的启动和关闭
  • 2.系统架构常用的建模方法
    • 1.结构模型
      结构模型(常用的):以架构的构件,连接件和其他概念来刻画结构。如并力图通过结构反映系统的重要语义内容,包括系统的配置,约束、隐含的假设条件、风格换个性质。
    • 2.框架模型
      框架模型:类似结构模型,但不太侧重描述结构的细节而更加侧重整体的结构。框架模型主要以一些特殊的问题为目标建立只针对和适应entire的结构
    • 3.动态模型
      动态模型是对结构或框架模型的补充,主要研究系统的大颗粒行为的性质,如描述系统的重新配置或氧化。
    • 4.过程模型
      过程模型是研究构造系统的步骤和过程,其结构是遵循某些过程脚本的结果。

1.1.3 软件架构的应用场景

  • 总结:
    现代大型软件,是混合风格,从不同视角描述大型软件系统的能力,并可保证软件系统的可靠性、可扩展性,可维护性等非功能属性的正确描述
    • 管道-过滤器风格适用于将系统分成若干个对立的步骤
    • 主程序/子程序系统和面向对象的架构风格可用于对组件内部进行设计
    • 虚拟机风格经常用于构造解析器或者专家系统
    • C/S和B/S风格设于数据和处理分布在一定范围,通过网络连接构成系统
    • 平台/插件风格适用于具有插件扩展功能的应用程序
    • MVC风格广泛地应用于用户交互程序的平台
    • SOA风格应用在企业集成等方面
    • C2风格适用于GUI软件开发,用于构建灵活和可扩展的应用系统等。

1.1.4 软件架构的发展未来

  • 发展主线:
    架构发展的主线可以归纳为:模块化编程/面向对象编程、构建技术、面向服务开发技术和云技术

本文参考文档:《系统架构设计师 第二版》