软件架构的研究内容主要涉及软件架构描述、软件架构设计、软件架构风格、软件架构评价和软件架构的形成方法等。
软件设计人员学习软件架构知识旨在站在较高的层面上整体地解决好软件的设计、复用、质量和维护等方面的实际问题。
定义 :软件或计算机系统的软件架构是该系统的一个(或多个)结构,而结构由软件元素、元素的外部可见属性及它们之间的关系组成。
软件系统架构是关于软件系统的结构、行为和属性的高级抽象。
软件系统架构不仅指定了软件系统的组织和拓扑结构,而且显示了系统需求和组件之间的对应关系,包括设计决策的基本方法和基本原理。
重要性:
软件架构的建立应位于概要设计之前,需求分析之后
架构的模型: 将 5 种模型有机地统一在一起刻画软件架构
“4+1”的视图模型
逻辑视图和开发视图描述系统的静态结构,而进程视图和物理视图描述系统的动态结构 。
(1) 逻辑视图 : 主要支持系统的功能需求 ,即系统提供给最终用户的服务 。逻辑视图中使用的风格为面向对象的风格,逻辑视图设计中要注意的主要问题是要保持一个单一的、内聚的对象模型贯穿整个系统。
(2) 开发视图 : 也称为模块视图 , 主要侧重于软件模块的组织和管理。
(3) 进程视图 : 侧重于系统的运行特性 , 主要关注一些非功能性的需求 , 例如系统的性能和可用性 。进程视图强调并发性、分布性、系统集成性和容错能力,以及逻辑视图中的主要抽象的进程结构。
(4) 物理视图 : 主要考虑如何把软件映射到硬件上 , 它通常要考虑到解决系统拓扑结构 、 系统安装 、 通信等问题 。
(5) 场景 (用例视图): 可以看作是那些重要系统活动的抽象 , 它使四个视图有机地联系起来 , 从某种意义上说,场景是最重要的需求抽象。分析人员和测试人员关心的是系统的行为,因此会侧重于用例视图;
软件质量特性包括功能性、可靠性、易用性、效率、可维护性、可移植性等 6个方面,每个方面都包含若干个子特性。
运行期质量属性
开发期质量属性
一般的质量属性场景(一般场景)指独立于具体系统、适合于任何系统的一般性场景;
具体的质量属性场景(具体场景)指适合于正在考虑的某 个特定系统的场景,具体场景通常是指从一般场景中抽取特定的、面向具体系统的内容。
可用性:
可用性战术的目标是阻止错误发展成故障,至少能够把错误的影响限制在一定范围内,从而使修复成为可能。战术分为:错误检测、错误恢复、错误预防。
① 错误检测:命令/响应、心跳(计时器)、异常(异常处理程序)
② 错误恢复:
③ 错误预防:事务、进程监视器、从服务中删除(如删除进程再重新启动,以防止内存泄露导致故障的发生)
可修改性:
包括局部化修改、防止连锁反应、推迟绑定时间。
① 局部化修改:在设计期间为模块分配责任,以便把预期的变更限制在一定的范围内,从而降低修改的成本。
② 防止连锁反应。降低模块之间有各种依赖性
③ 推迟绑定时间:在运行时进行绑定并允许非开发人员进行修改(配置)。
性能:
性能与时间相关,影响事件的响应时间有两个基本因素:资源消耗、闭锁时间
① 资源需求:减少处理事件流所需的资源、减少所处理事件的数量、控制资源的使用
② 资源管理:引入并发、维持数据或计算的多个副本、增加可用资源
③ 资源仲裁:先进/先出(FIFO)、固定优先级调度、动态优先级调度、静态调度(离线确定调度)
安全性:
① 抵抗攻击:
② 检测攻击:通过“入侵检测”系统进行过滤、比较通信模式与历史基线等方法。
③ 从攻击中恢复:
可测试性:
① 输入/输出:
② 内部监控。当监视器处于激活状态时,记录事件(如通过接口的信息)。
易用性:
① 运行时战术:
② 设计时战术:将用户接口与应用的其余部分分离开来,预计用户接口会频繁发生变化,因此,单独维护用户接口代码将实现变更局部化。这与可修改性相关。
③ 支持用户主动操作。支持用户的主动操作,如支持“取消”、“撤销”、“聚合”和 “显示多个视图”。
软件架构设计的一个核心问题是能否使用重复的软件架构模式,即能否达到架构级别的软件重用。
软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义了一个系统家族,即一个架构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。
(1)数据流风格:
区别:批处理是全部的、高潜伏性的,输入时可随机存取,无合作性、无交互性。而管道过滤器是递增的,数据结果延迟小,输入时处理局部化,有反馈、可交互。批处理强调数据传送在步与步之间作为一个整体,而管理过滤器无此要求。
(2)调用/返回风格:(分而治之策略)
(3)独立构件风格: 构件之间不直接通信
进程通信:构件是独立的过程,连接件是消息传递。
事件系统:(隐式调用)构件触发或广播事件,调用在这个事件中注册的所有过程
隐式调用系统的优点 :
缺点:
(4)虚拟机风格: 人为构建一个运行环境,解析与运行自定义的语言,增加灵活性
(5)仓库风格:
黑板系统主要由三部分组成:
除上述五种风格外,还有几个风格:
(1) 闭环控制架构(过程控制): 适合于嵌入式系统,涉及连续的动作与状态
当软件被用来操作以一个物理系统时,软件与硬件之间可以粗略地表示 为一个反馈循环,这个反馈循环通过接受一定的输入,确定一系列的输出,最终是环境达到一个新的状态。
(2)模型驱动架构(MDA) 采用了模型和技术分离的架构设计。
使用一定的建模标准(UML、MOF、XMI等)构建描述应用程序或集成系统的业务功能和行为的模型,这些模型独立于具体平台并且和实现具体业务功能和行为的特定技术代码分离,从而实现了业务和应用程序逻辑与底层平台技术的分离
MDA三大目标:轻便可移植性、互操作性和可重用性;
MDA三种核心模型:
(3)C2体系结构风格: 通过连接件绑定在一起的按照一组规则运作的并行构件网络。
C2风格中的系统组织规则如下:
① 系统中的构件和连接件都有一个顶部和一个底部;
② 构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;
③ 一个连接件可以和任意数目的其他构件和连接件连接;
④ 当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
C/S 架构是基于资源不对等,且为实现共享而提出来的;
C/S 结构将应用一分为二,服务器(后台)负责数据管理,客户机(前台)完成与用户的交互任务。
C/S 软件架构具有强大的数据操作和事务处理能力,模型思想简单
二层 C/S 结构局限:
三层 C/S 结构: 将应用功能分成表示层、功能层和数据层三个部分
不足:
(1)B/S 架构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。
(2)采用 B/S 架构的应用系统,在数据查询等响应速度上,要远远地低于 C/S 架构。
(3)B/S 架构的数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OnLine Transaction Processing,简称 OLTP)应用。
(1)Model 是对应用状态和业务功能的封装,我们可以将它理解为同时包含数据和行为的领域模型。Model 接受 Controller 的请求并完成相应的业务处理,在状态改变的时候向 View 发出相应的通知。
(2)View 实现可视化界面的呈现并捕捉最终用户的交互操作(例如鼠标和键盘的操作)。
(3)View 捕获到用户交互操作后会直接转发给 Controller,后者完成相应的 UI 逻辑。如果需要涉及业务功能的调用,Controller 会直接调用 Model。在完成 UI 处理后,Controller会根据需要控制原 View 或者创建新的 View 对用户交互操作予以响应。
MVP 避免了 View 和 Model 之间的耦合,降低了 Presenter 对 View的依赖。
MVP 的优点:
(1)模型与视图完全分离,我们可以修改视图而不影响模型。
(2)可以更高效地使用模型,因为所有的交互都发生在Presenter 内部。
(3)我们可以将一个 Presenter 用于多个视图,而不需要改变 Presenter 的逻辑。
(4)如果我们把逻辑放在 Presenter 中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。
MVP 的缺点:
由于对视图的渲染放在了 Presenter 中,所以视图和 Presenter 的交互会过于频繁。一旦视图需要变更,那么 Presenter 也需要变更了。
SOA 是一种在计算环境中设计、开发、部署和管理离散逻辑单元(服务)模型的方法。
SOA 是基于对象的,但是作为一个整体,它却不是面向对象的。
定义: 是一种粗粒度、松耦合的服务架构,服务间通过定义良好的、简单、明确的接口定义进行通信,客户端可以按特定顺序调用这些服务形成业务逻辑。
在 SOA 模型中,所有的功能都定义成了独立的服务。服务之间通过交互和协调完成业务的整体逻辑。所有的服务通过服务总线或流程管理器来连接。这种松散耦合的架构使得各服务在交互过程中无需考虑双方的内部实现细节,以及部署在什么平台上。
SOA 设计原则:
SOA 能够在最新的和现有的系统之上创建应用,借助现有的应用产生新的服务,为企业提供更好的灵活性来构建系统和业务流程。
功能 | 协议 |
---|---|
发现服务 | UDDI、DISCO |
描述服务 | WSDL、XML Schema |
消息格式层 | SOAP、REST |
编码格式层 | XML(DOM、SAX) |
传输协议层 | HTTP、TCP/IP、SMTP等 |
1. Web Service
图注:服务提供者和服务请求者是必需的,服务注册中心是一个可选的角色。例如,如果使用静态绑定的服务,服务提供者则可以把描述直接发送给服务请求者。
在采用 Web Service 作为 SOA 的实现技术时,应用系统大致可以分为六个层次,分别是底层传输层、服务通信协议层、服务描述层、 服务层、业务流程层和服务注册层。
2. 服务注册表:
提供一个策略执行点(Policy Enforcement Point,PEP),在这个点上,服务可以在 SOA 中注册,从而可以被发现和使用。
3. 企业服务总线:
ESB 是一种为进行连接服务提供的标准化的通信基础结构,基于开放的标准,为应用提供了一个可靠的、可度量的和高度安全的环境,帮助企业对业务流程进行设计和模拟,对每个业务流程实施控制和跟踪、分析并改进流程和性能。
ESB 是由中间件技术实现并支持 SOA 的一组基础架构,与 是传统中间件技术与 XML、Web Service 等技术结合的产物 ,是在整个企业集成架构下的面向服务的企业应用集成机制。
(1)支持异构环境中的服务、消息和基于事件的交互,并且具有适当的服务级别和可管理性。
(2)通过使用 ESB,可以在几乎不更改代码的情况下,以一种无缝的非侵入方式使现有系统具有全新的服务接口,并能够在部署环境中支持任何标准。
(3)充当缓冲器的 ESB(负责在诸多服务之间转换业务逻辑和数据格式)与服务逻辑相分离,从而使不同的系统可以同时使用同一个服务,不用在系统或数据发生变化时,改动服务代码。
(4)在更高的层次,ESB 还提供诸如服务代理和协议转换等功能。允许在多种形式下通过像 HTTP、SOAP 和 JMS 总线的多种传输方式,主要是以网络服务的形式,为发表、注册、发现和使用企业服务或界面提供基础设施。
(5)提供可配置的消息转换翻译机制和基于消息内容的消息路由服务,传输消息到不同的目的地。
(6)提供安全和拥有者机制,以保证消息和服务使用的认证、授权和完整性。
ESB 优势:
(1)扩展的、基于标准的连接。ESB 形成一个基于标准的信息骨架,使得在系统内部和整个价值链中可以容易地进行异步或同步数据交换。
(2)灵活的、服务导向的应用组合。基于 SOA,ESB 使复杂的分布式系统(包括跨多个应用、系统和防火墙的集成方案),使系统具有高度可扩展性。
(3)提高复用率,降低成本。
(4)减少市场反应时间,提高生产率。ESB 通过构件和服务复用,按照 SOA 的思想简化应用组合,基于标准的通信、转换和连接来实现这些优点。
微服务的核心特点为:小, 且专注于做⼀件事情、轻量级的通信机制、松耦合、独立部署。
微服务的优势:
微服务面临的挑战:
客户机/服务器系统开发时可以采用不同的分布式计算架构:
分布式系统开发分为5个逻辑计算层: