6 体系结构设计

6.1 体系结构设计决策

非功能性系统需求主要有

  1. 性能:定位组件的关键操作,部署到同一个平台,减少通信次数
  2. 信息安全性:采用分层结构,重要资源放在内层,每层采用严格的信息安全有效性验证
  3. 安全性:安全相关的操作集中在一个或少数几个组件,降低成本和减少安全有效性验证
  4. 可用性:采用冗余组件以便更新替换和更新组件
  5. 可维护性:使用小粒度的自包含组件以便于更换。分离数据的生产者和消费者,避免数据共享

6.2 体系结构视图

  • 4+1 视图:
    • 逻辑视图:显示系统中对象和对象类的抽象,将系统需求和实体关联
    • 进程视图:显示运行时系统如何组织为一组交互的进程。对非功能系统特征的判断很有效
    • 开发视图:显示软件如何为了开发而被分解,即将软件分解成可由单独的开发人员或开发团队实现的组件。对软件管理者和程序员有用
    • 物理视图:显示了系统硬件和软件组件如何分布在处理器上。对系统工程师规划系统部署有用
    • 概念视图:系统的抽象视图,可作为把高层次需求分解为详细描述的基础
  • UML:在详细地文档化一个体系结构或使用模型驱动开发时使用
  • ADL:基本要素是组件和连接器,为特定领域涉及,或许可作为模型驱动开发的基础

6.3 体系结构模式

  • 模式的思想:作为一种表示、共享和复用软件系统知识的方法

名称 | 描述 | 实例 | 使用时机 | 优点 | 缺点 — | — | — | — | — | — | — 分层体系结构 | 将系统组织成分层结构,每层包含一组相关功能。每层提供服务给紧邻的上一层,因此最底层有可能是整个系统核心服务 | 存在于不同图书馆的共享版权文档的系统分层模型 | 在已有系统的基础上构建新设施使用;开发团队是分散的小团队,每个小团队负责一层功能;系统存在多层信息安全性需求 | 允许在接口不变时更换整层;每层可提供冗余服务以增加系统可靠性 | 很难分离各层,高层可能必须与低层交互;服务在每层被处理会降低性能 容器体系结构 | 系统所有数据在一个中央容器中管理,可被所有系统组件访问;组件不能直接交互,只通过容器交互 | 指挥和控制系统、CAD 系统和软件的交互开发环境 | 系统生成的大量数据需要持久保存;数据驱动系统中,每当容器中收入数据时触发一个工作或工具 | 组件是独立的,无需知道其他组件的存在;一个组件的变更可传播到所有的组件;所有数据得到一致的管理,因为数据存在同一个地方 | 容器是单点故障,容器会影响整个系统;所有通过容器进行通信会低效;容器分布到多个计算机会困难 客户机-服务器体系结构 | 系统功能以服务的形态存在,每个服务来自某个单独的服务器。客户机是使用服务和访问服务器的用户 | 电影和视频资料库 | 需要从很多地方访问共享数据;服务器可以复制,适用于系统负载经常变化 | 服务器可分布到网络上。一般性的功能可被所有客户机使用,但不需要被所有服务实现 | 每个服务是单点故障,不能阻止拒绝服务供给或服务器失败;依赖于网络和系统导致性能无法预知;服务器属于不同的机构时不易管理 管道和过滤器体系结构 | 每个处理组件(过滤器)是分类的,执行某个类型的数据转换。数据流从一个组件流向另一个组件 | 票据处理系统 | 数据处理应用(批处理和事务处理),一些不同的阶段处理输入数据,并产生响应的输出 | 易于理解并支持变换的复用;工作流风格与很多业务处理体系结构很匹配;通过变换的方式进行进化;可实现为顺序或并发系统 | 通信变换期间所传输的数据格式必须协调好;每个变换必须解析它的输入并写成约定的格式输出;增加了系统负荷,因为不能复用使用不兼容数据结构的函数变换

6.4 应用体系结构

常见的应用类型的体系结构

类型 描述 场景 适用的体系结构
事务处理应用 以数据库为中心,处理来自用户对信息的请求并更新数据库的数据,都是交互式系统 交互式银行系统、电子商务系统、信息系统和预订系统 管道和过滤器
语言处理系统 用户意图用形式化语言来表达的系统,语言处理系统将这种语言处理成一种内部格式,然后解释这种内部表示 编译器 容器和管道过滤器的复合模型
信息系统 所有涉及与共享数据库交互的系统都可看成基于事务的信息系统。信息系统允许对一个大信息库进行适当的访问 基于 web 的系统 分层

相关