目录
1
一、软件架构的概念
二、软件架构风格
(1)数据流风格
(2)调用/返回风格
(3)独立构件风格
(4)虚拟机风格
(5)仓库风格
三、架构描述语言(ADL)
四、基于架构的软件开发
五、质量属性
六、软件架构评估
七、软件产品线
软件产品线的建立方式
软件产品线——组织结构
八、构件与中间件技术
九、Web架构设计
软件架构重要考点
*软件架构的概念(***)
*软件架构风格(*****)
*架构描述语言ADL(***)
*特定领域软件架构(***)
*基于架构的软件开发(****)
*软件质量属性(*****)
*软件架构评估(*****)
*软件产品线(***)
*构件与中间件技术(****)
*Web架构设计(*****)
一、软件架构的概念
一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系。
体系结构并非可运行软件。确切地说,它是一种表达,使软件工程师能够:
- 分析设计在满足规定需求方面的有效性。
- 在设计变更相对容易的阶段,考虑体系结构可能的选择方案。
- 降低与软件构造相关联的风险。
架构设计就是需求分配,即将满足需求的职责分配到组件上
二、软件架构风格
(1)数据流风格
批处理序列
构件作为一系列固定顺序的计算单元,构件之间只通过数据传递交互。每一步必须在前一步结束后才能开始,数据必须是完整的,以整体的方式传递。
管道-过滤器
每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。
早期编译器就是采用的这种架构。要一步一处理的,均可考虑采用此架构风格
(2)调用/返回风格
主程序/子程序
单线程控制,把问题划分为为若干个处理步骤,构件即为主程序和子程序,子程序通常可合成为模块。
面向对象
构件是对象,对象是抽象数据类型的实例。
层次结构
构件组织成一个层次结构,连接件通过决定层间如何交互的协议来定义,每层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层。
层次结构的优点
(1)支持基于可增加抽象层的设计,允许将一个复杂问题分解成一个增量步骤序列的实现。
(2)不同的层次处于不同的抽象级别
(2)为软件复用提供了强大的支持
缺点
(1)并不是每个系统可以很容易低划分为分层的模式
(2)很难找到一个合适的,正确的层次抽象方法
(3)独立构件风格
进程通信
构件是独立的过程,连接件是消息传递。
事件驱动系统(隐式调用)
构件不直接调用一个过程,而是触发或广播一个或多个事件。(注意是触发,关键字是触发)
(4)虚拟机风格
解释器
具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用,其缺点是执行效率比较低(关键字是自定义需求的场景)
基于规则的系统
有相应的知识库作为支撑,一般用于人工智能领域和DSS(辅助决策)中。
(5)仓库风格
数据库系统
就我们用的那些MySQL,oracle等等啊,大致就是这种意思
黑板系统
包括有知识源,黑板,控制三部分。黑板是一个全局数据库,就是相当于一个共享的。具体例子:信号处理,语音识别,问题规划,编译器优化等。
超文本系统
构件以网状链接方式相互连接,类比于HTML的超文本链接
现代集成编译环境一般采用这个这种架构风格
上面说的五种风格是主要的,后面的架构风格也要求掌握
(1)闭环控制架构(过程控制)
当软件被用来操作一个物理系统时,软件和硬件之间可以粗略地表示为一个反馈循环,这个反馈循环通过接受一定的输入,确定一系列的输出,最终使环境达到一个新的状态。适用于嵌入式系统,涉及连续的动作与状态。(关键看有没有从环境中取值,然后不断地去调整平衡)
(2)C2风格
(3)层次架构风格
MVC架构风格
Model(模型)
View(视图)
Controller(控制器)
MVP架构风格
View
Model
Presenter
MVP是MVC的变种,实现了V和M之间的解耦,并且更好的支持单元测试;业务逻辑在P中,界面事件由C处理
MVVM风格
(4)富互联网应用(RIA)
思想:第一次打开缓慢,但是之后的运行快,表现力强。原因是第一次打开时将常用的资源都下载到了本地。
(5)基于服务的架构(SOA)
服务是一种为了满足某项业务需求的操作,规则等的逻辑组合,它包含一系列有序活动的交互,为实现用户目标提供支持。
SOA是一种思想,一种方法论,但是没有提供具体实践性的一些标准实践性标准包括了服务总线(ESB)
特点:松散耦合,粗粒度,标准化接口
SOA的实现方式——Web Service
SOA的实现方式——ESB
企业服务总线(ESB)
提供位置透明性的消息路由和寻址服务
提供服务注册和命名的管理功能
提供日志和监控功能
(6)微服务架构
将单一应用程序划分成一组小的服务,服务之间互相协调,互相配合。
特点:
小,且专注于做一件事情,轻量级的通信机制,松耦合,独立部署
微服务和SOA区别
微服务 | SOA |
---|---|
能拆分就拆分 | 是整体的,服务能放在一起就都放在一起 |
纵向业务拆分 | 是水平分多层 |
由单一组织负责 | 按层级划分不同部门的组织负责 |
细粒度 | 粗粒度 |
两句话可以解释明白 | 几百字只相当于SOA的目录 |
独立的子公司 | 类似大公司里面划分了一些业务单元 |
组件小 | 存在较复杂的组件 |
业务逻辑存在于每一个服务中 | 业务逻辑横跨多个业务领域 |
使用轻量级的通信方式,如HTTP | 企业服务总线(ESB)充当了服务之间通信的角色 |
(7)MDA风格
使用模型完成软件分析,构建,部署等活动。模型驱动
三、架构描述语言(ADL)
ADL的三个基本元素
(1)构件:计算或数据存储单元
(2)连接件:用于构件之间交互建模的体系结构构造块及其支配这些交互的规则
(3)架构配置:描述体系结构的构件与连接件的连接图
四、特定领域软件架构(DSSA)
领域分析机制中的角色:
领域专家(充当军师)
领域分析人员,领域设计人员,领域实现人员(这三个都是干活的)
DSSA——三层次模型
四、基于架构的软件开发
基于架构的软件开发方法——基于架构的软件设计(ABSD)
ABSD方法是架构驱动,即强调由业务,质量和功能需求的组合驱动架构设计。
ABSD方法有三个基础。第一个基础是功能的分解;第二个基础是通过选择架构风格来实现质量和业务需求;第三个基础是软件模板的使用
ABSD方法是递归的,且每一个步骤都是清晰定义的。
视角和视图:从不同的视角来检查,所以有不同的视图。
用例用来捕获功能需求,特定场景来捕获质量需求(非功能需求)
基于架构的软件开发方法——开发过程
五、质量属性
其实质量属性是属于软件架构评估这一个大的知识点中的
1、性能
性能是指系统的响应能力,即要经过多长时间才能对某个时间做出响应,或者在某段时间内系统所处理的事件的个数。
代表参数:响应时间,吞吐量 设计策略:优先级队列,资源调度
2、可用性
指系统能够正常运行的时间比例。经常用两次故障之间的时间长度或出现故障时系统能够恢复正常的速度来表示。
代表参数:故障间隔时间 设计策略冗余,心跳线
3、安全性
指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。
设计策略:追踪审计
4、可修改性
指能够快速地以较高的性能价格比对系统进行变更的能力。
主要策略:信息隐藏
5、可靠性
是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。主要考虑两个方面:容错,健壮性。(一般符合情况都认为是可用性,除非特别强调才认为是可靠性)
后面的其实不怎么重要,知道有就行了
6、功能型
7、可变性
8、互操作性
六、软件架构评估
风险点:系统架构风险是指架构设计潜在的,存在问题的架构决策所带来的隐患。
敏感点:为了实现某种特定的质量属性,一个或多个构建所具有的特性
权衡点:影响多个质量属性的特性,是多个质量属性的敏感点
非风险点:是指不会带来隐患,一般以XXX要求是可以实现或接受的方法表达
软件架构评估——基于场景的方式
(1)SAAM
最初用于分析架构可修改性,后扩展到其他质量属性
(2)ATAM
在SAAM基础上发展起来的,主要针对性能,实用性,安全性和可修改性,在系统开发之前,对这些质量属性进行评价和折中。
第一阶段 场景和需求收集
第二阶段 架构视图和场景实现
第三阶段 属性模型构造和分析
第四阶段 折中
七、软件产品线
产品线是多个知识领域的综合体,软件产品线会包括特定领域架构DSSA
特点:核心资源,产品集合,过程驱动,特定领域,技术支持,以架构为中心。
软件产品线的建立方式
演化方式 | 革命方式 | |
---|---|---|
基于现有产品 | 基于现有产品架构设计产品线的架构,经演化现有构件,开发产品线构件(将现有产品演化为产品线) | 核心资源的开发基于现有产品集的需求和可预测的,将来需求的超集(用软件产品线替代现有产品集) |
全新产品线 | 产品线核心资源随产品新成员的需求而演化(全新软件产品线的演化) | 开发满足所有预期产品线成员的需求的核心资源(全新软件产品线的开发) |
软件产品线——组织结构
组织结构类型
(1)设立独立的核心资源小组
(2)不设立独立的核心资源小组
(3)动态的组织结构
成功实施产品线的主要取决因素;
(1)对该领域具备长期和深厚的经验
(2)好的产品线架构
(3)好的管理(软件资源,人员组织,过程)支持
(4)一个用于构建产品的好的核心资源库
八、构件与中间件技术
构件
定义:软件构件是一个组装单元,它具有规范的接口约束和显示的语境依赖。软件构件可以被独立地部署并由第三方任意地组装
构件的复用
构件的复用分为四步:
(1)检索与提取构件
(2)理解与评价构件
(3)修改构件
(4)组装构件
中间件技术
中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源
中间件技术的优点
(1)面向需求
(2)业务的分隔和包容性
(3)设计与实现隔离
(4)隔离复杂的系统资源
(5)符合标准的交互模型
(6)软件复用
(7)提供对应应用软件的管理
具体的中间件技术
Corba(公共对象请求代理体系结构)
伺服对象:CORBA对象的真正实现,负责完成客户端请求
对象适配器:用于屏蔽ORB内核的实现细节,为服务器对象的实现着提供抽象接口,以便他们使用ORB内部的某些功能
对象请求代理:解释调用并负责查找实现该请求的对象,将参数传给找到的对象,并调用方法返回结果。客户方不需要了解服务器对象的位置,通信方式,实现,激活或存储机制。
九、Web架构设计
从架构来看 | MVC,MVP,MVVM,REST,Webservice,微服务,中台 |
从缓存来看 | MemCache,Redis,Squid |
从并发分流来看 | 集群(负载均衡),CDN |
从数据库来看 | 主从库(主从复制),内存数据库,反规范化技术,NoSQL,分区(分表)技术,视图与物化视图 |
从持久化来看 | Hibernatr,Mybatis |
从分布存出来看 | Hadoop,FastDFS,区块链 |
从数据编码来看 | XML,JSON |
从Web应用服务器来看 | Apache,,WebService,WebLogic,Tomcat,JBOSS。 |
其他 | 静态化,有状态与无状态,响应式Web设计 |