当前位置:
文档之家› 技术培训_01_系统架构设计
技术培训_01_系统架构设计
时序图 – 示例1
UML - 活动图
• 活动图是UML用于对系统的动态行为建模的另一种常用工具,它 描述活动的顺序,展现从一个活动到另一个活动的控制流。活动 图在本质上是一种流程图。活动图着重表现从一个活动到另一个 活动的控制流,是内部处理驱动的流程。 • 在 UML 中, 活动图本质上就是流程图. 它用于描述系统的活动, 判 定点和分支等.
活动图 – 基本概念2
• 分叉与汇合: 分叉用来描述并发线程, 每个分叉可以 有一个输入转换和两个或多个输出转换. 每个转换都 可以是独立的控制流. 汇合代表两个或多个并发控制 流同步发生, 当所有的控制流都达到汇合点后, 控制 才能继续往下进行. 每个汇合可以有两个或多个输入 转换和一个输出转换. 在 UML 中分叉和汇合用一条 粗直线 表示 • 泳道: 泳道将活动图中的活动划分为若干组, 并将每 一组指定给负责这组活动的业务组织. 泳道区分负责 活动的对象, 明确地表示哪些活动是由哪些对象进 行的. 每个活动指定明确地属于一个泳道. 在活动图 中, 泳道用垂直实线绘出, 垂直线分隔的区域即为泳 道
性能
Html静态化
内容分发网络 图片服务器
数据库拆分 数据库读写分离
内容
架构设计过程 需求分析 确定关键需求 概念性架构设计 细化架构
验证架构
概念性架构设计
概念性架构就是对系统设计的最初构想,就是把最关键的设计要素和 交互机制确定下来,然后考虑具体技术的运用,设计出实际架构。 1)概念性架构通过主要设计元素及它们之间的关系描述系统 2)从“架构=组件+交互”的角度而言,概念性架构包括概念性组件 以及它们之间的抽象交互机制 3)概念组件往往是粗粒度的
安全性:是指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使 用的能力。(有些攻击的目的是使系统拒绝向合法用户提供服务,如 DDOS) 易用性:是指软件系统易于使用的程度。(从用户使用感受角度) 可用性:是指软件长时间无故障运行的能力。
运行期质量属性 - 2
可伸缩性:指当用户数的数据量增加时,软件系统维持高服务质量的能力。 即当业务量增大时,无需对软件系统本身进行编程级的修改,可以通过纵 向、横向伸缩来满足需求。 纵向伸缩:增加系统可使用的cpu、内存等资源 横向伸缩:增加服务节点,采用集群等分布式并行处理
1、尽早验证架构 2、原型法和框架 法
内容
架构设计过程 需求分析 确定关键需求 概念性架构设计 细化架构
验证架构Biblioteka 需求的三个层次需求主要分为业务需求、用户需求及软件需求三个层次,除此以外,每个 系统还有各种非功能性需求 业务需求 描述了为什么要开发一个系统,即希望达到的 总体目标 输出:《项目建议书》---项目愿景和范围 描述了用户能用系统来做些什么 输出:《用户需求说明书》
需求的质量属性
以超市收银系统为例说明不同类型的需求
系统建模语言 - UML
系统建模语言就是对模型的结构和行为进行描述,并且能够将知识和信息 通过模型传递给熟悉该描述语言的人。 最常用的建模语言:UML( UML(United Modeling Language, 统一建 模语言),目前已成为业界公认的标准建模语言 UML图主要分类如下:
开发人员设计和构建系 统时的限制条件,如运 行环境、开发语言、网 络限制等
需求的质量属性
质量属性
运行期质量属性 - 1
性能:是指软件系统及时提供相应服务的能力,包括速度、吞吐量和持续 高速性三方面。 速度:平均响应时间 吞吐量:单位时间处理的交易数 持续高速性:保持高速处理的能力,特别是随着请求增加的响应能 力和丢失率等
用例之间的关系 – 扩展关系
• 如果在完成某个功能的时候偶尔会执行另外一个功 能, 则用扩展关系表示.在 UML 中扩展关系用虚线箭 头加 “<<extend>>”, 箭头指向被扩展的用例
UML – 时序图
• 时序图用于描述对象之间的传递消息的时间顺序, 即 用例中的行为顺序来说明某个流程的详细步骤。 • 在 UML 中, 时序图表示为一个二维的关系图, 其中, 纵 轴是时间轴, 横轴代表在协作中各个独立的对象. 当对 象存在时, 生命线用一条虚线表示, 消息用从一个对象 的生命线到另一个对象的生命线的箭头表示. 箭头以 时间的顺序在图中上下排列.
用户需求
软件需求
描述开发人员需要实现什么 输出:《需求规格说明书》
架构设计 与开发
软件需求的类型
《需求规格说明书》中涉及的软件需求主要分类如下: 功能性需求 对产品的功能的描述 运行期质 量属性
软件需求
质量属性
对产品的功能描述的 补充,从不同方面描 述产品的各种特征
非功能性需求
开发期质 量属性
设计约束
实现A1
调用者
接口A
实现A2
架构原则3 – 高内聚、低耦合
高内聚: 内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是 一个模块内各个元素彼此结合的紧密程度高。 所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负 责一项任务,也就是常说的单一责任原则。 低耦合: 耦合指的是软件结构内不同模块之间互连程度的度量。模块之间 联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的 高低取决于模块间接口的复杂性,调用的方式以及传递的信息。 对于低耦合,粗浅的理解是: 一个完整的系统,模块与模块之间,尽可能的使其独立存在。 也就是说,让每个模块,尽可能的独立完成某个特定的子功能。 模块与模块之间的接口,尽量的少而简单。 如果某两个模块间的关系比较复杂的话,最好首先考虑进一步 的模块划分。这样有利于修改和组合。
时序图中的基本概念
• 对象: 时序图中对象使用矩形表示, 并且对象名称下 有下划线. 将对象置于时序图的顶部说明在交互开始 时对象就已经存在了. 如果对象的位置不在顶部, 表 示对象是在交互的过程中被创建的. • 生命线: 生命线是一条垂直的虚线. 表示时序图中的 对象在一段生命周期内的存在. 每个对象底部中心的 位置都带有生命线. • 消息: 两个对象之间的单路通信. 从发送方指向接收 方.
参与者(Actor): 与系统打交道的人或其他系统即使 用该系统的人或事物. 在 UML 中参与者用人形图标 表示
用例(Use Case): 代表系统的某项完整的功能. 在 UML 中使 用一个椭圆来表示
关系: 定义用例之间的关系 ------ 泛化关系, 扩展关 系, 包含关系
用例之间的关系 – 泛化关系
• 泛化关系: 表示同一业务目的(父用例)的不同技术实 现(各个子用例). 在 UML 中, 用例泛化用一个三角箭 头从子用例指向父用例. 以下是某购物网站为用户提 供不同的支付方式
用例之间的关系 – 包含关系
• 一个用例可以包含其他用例具有的行为, 并把它包含 的用例行为作为自身行为的一部分. 在 UML 中包含 关系用虚线箭头加 “<<include>>”, 箭头指向被包含的 用例
活动图 – 基本概念1
• 动作状态: 原子的, 不可中断的动作, 并在此动作完成之 后向另一个动作转变. 在 UML 中动作状态用圆角矩形 表示, 动作状态所表示的动作写在圆角矩形内部. • 分支与合并: 分支在软件系统中很常见. 一般用于表示 对象类所具有的条件行为. 用一个布尔型表达式的真假 来判定动作的流向. 条件行为用分支和合并表达.在活动 图中, 分支用空心小菱形 表示. 分支包括一个入转换 和两个带条件的出转换, 出转换的条件应该是互斥的, 须保证只有一条出转换能够被触发. 合并包含两个带条 件的入转换和一个出转换.
测试上线
《用户需求说明书》 《需求规格说明书》
《架构设计说明书》
软件产品 《测试用例》
架构设计过程
分析阶段
需求分析 架构建模
关键需求决定架构, 其余需求验证架构
架构设计阶段 概念性架构
确定关键需求
概念性架构设计
1、分析关键用例 2、明确架构模式 3、质量属性分析
实际架构
细化架构
验证架构
1、多视图分析法 2、开发原型程序
架构决定因素
关键需求决定架构,其余需求验证架构 架构决定因素=关键功能 + 关键质量+业务需求与约束
确定关键质量属性
不同质量属性之间往往具有互相制约性,无法同时达到高标准。根据 需求重要性和实现代价,进行权衡取舍或折衷处理。(如性能与大部 分其他质量属性存在冲突)
关键需求决策案例
目标 场景 •客户端,重复请求页面,Web服务器请求数多 负载压力大 •客户端,重复请求页面,页面生成逻辑重复执 行 •客户请求,来自不同ISP,页面跨网络传递慢 •客户端,大量请求图片资源,Web服务器压力 大 •客户端,大量请求图片资源,Web服务器无法 专门优化 •程序,大量申请数据,硬盘IO压力大 •程序,申请不同数据,DBMS缓存低效 •(环境:部署多个DBMS实例) 程序,更新数据,数据复制开销大 决策 代理服务器
包图 类图 用例 图 时序 图
对象 图
结构型
描述系统的 静态结构
UML
部署 图 活动 图
行为型
描述系统的 动态行为
协作 图
组件 图
状态 图
UML – 用例图
用例图(Use Case Diagram): 也称为用户模型图, 是从软件需求分 析到最终实现的第一步, 它是从客户的角度来描述系统功能. 用例图包含 3 个基本组件: 参与者(Actor), 用例(Use Case), 关系:
复杂需求
解决原始问题
子问题1 子问题2 子问题 n 模块1 模块2
软件 系统
模块n
架构原则2 – 封装、接口与实现分离
封装:隐藏对象的属性和实现细节,仅对外公开接口,具体的实现 细节对使用者而言是不可见的。 并且实现接口与实现相分离,可以在保持接口稳定的同时,对接口 的实现方式进行修改。 封装在模块化的基础上进一步简化了模块本身对外暴露的复杂度, 并且隐藏内部细节,以减少依赖。 被调用模块 (黑盒实现)