目录
一、软件架构的概念
1.1概念
1.2 软件架构模型
二、软件架构风格
2.1 分类(传统分类)数调独虚仓
2.2 数据流风格
2.3 调用/返回风格
2.4 独立构件风格
2.5 虚拟机风格。
2.6 仓库风格
三、五类架构以外的架构
3.1 闭环控制架构(过程控制)
3.2 C2风格
3.3 混合架构
3.4 MVC架构风格
3.5 基于服务的架构 SOA
3.6 微服务
四、特定领域软件架构
五、 基于架构的软件开发
六、架构描述语言ADL
七、软件质量属性
八、软件架构评估
十、构件与中间件技术
十一、J2EE 分布式多层应用程序
十二、Web架构设计
体系结构=架构。
架构设计就是需求分配,即将满足需求的职责分配到组件。
软件架构放在需求分析之后,架构设计之前。
架构风格为软件系统提供结构、行为、属性的高级抽象。
软件架构是项目干系人员进行交流的手段。
软件架构使推理和控制更加简单,有助于循序渐进的原型设计,可以作为培训的基础。
软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量。
软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义了一类架构所共有的结构和语义特性,主要包括架构定义、架构词汇表和架构约束。
结构模型(构件、连接件、其他概念刻画结构)
框架模型(更注重整体)
动态模型(系统大颗粒行为性质)
过程模型(步骤和过程)
功能模型(功能构建层次组成)
4+1模型(架构发展到高级阶段)
对象模型、动态模型、功能模型区别:
对象模型描述了系统的静态结构,一般使用对象图来建模。对象模型是整个体系中最基础,最核心的部分。
动态模型描述了系统的交互次序,一般使用状态图来建模。
功能模型描述了系统的数据变换,一般使用数据流图来建模。
对象模型描述了动态模型和功能模型所操作的数据结构,对象模型中的操作对应于动态模型中事件和功能模型中的函数;
动态模型描述了对象模型的控制结构,告诉我们哪些决策是依赖于对象值,哪些引起对象的变化,并激活功能;
功能模型描述了由对象模型中操作和动态模型中动作所激活的功能,而功能模型作用在对象模型说明的数据上,同时还表示了对对象值的约束。
五类:数据流风格、调用/返回风格、独立构件风格、虚拟机风格、仓库风格。
口诀:数调独虚仓
1、数 : 批处理序列,管道过滤器。
理解:以数据的方式向前传递,每一步处理都是独立的,顺序执行的,适合线性流程的处理。
2、调:主子数面层。(主程序/子程序、数据抽象、面向对象、层次结构)
理解:主要思想将复杂庞大的系统分解为一系列的子系统,降低系统的复杂性,提高可修改性,明确层次结构,以降低系统耦合度。
3、独:进程通信,事件驱动
理解:增强软件系统的可复用性。
4、虚拟机:解释器,基于规则的系统。
理解:具备良好的灵活性,可定义规则。
5、仓:数据库,超文本系统,黑板。
理解:以数据为中心,善于处理数据信息,适用于大数据的应用系统和复杂的逻辑系统。
数据处理,较为严格的流程。数据包的处理。没有清晰地说明用户与系统的交互。
目前最广泛,目前系统都离不开。
在基于构件的软件开发中,逻辑构件模型用功能包描述系统的抽象设计,用接口描述每个服务集合,以及功能之间如何交互以满足用户需求,它作为系统的设计蓝图以保证系统提供适当的功能。
物理构件模型用技术设施产品、硬件分布和拓扑结构,以及用于绑定的网络和通信协议描述系统的物理设计,这种架构用于了解系统的性能、吞吐率等许多非功能性属性。
构件和对象对比
构件的特性是:
对象的特性是:
1.一个实例单元,具有唯一的标志。
2.可能具有状态,此状态外部可见。
3.封装了自己的状态和行为。
适用自定义的场景。
以数据库,语法树为中心的风格。仓库风格分两种:中央数据结构,保存系统当前状态。独立构件,对中央数据存储进行操作。现代集成编译环境采用该风格,例如idea。
对于采用层次化架构风格的系统,划分的层次越多,系统完成某项功能需要的中间调用操作越多,其性能越差。
对于采用管道-过滤器架构风格的系统,可以通过引入过滤器的数据并发处理可以有效提高系统性能。
对于采用面向对象架构风格的系统,可以通过减少功能调用层次提高系统性能。
对于采用过程调用架构风格的系统,将显式调用策略替换为隐式调用策略能够提高系统的灵活性,但会降低系统的性能。
软件与硬件之间可以粗略的表示一个反馈循环。适用于嵌入式系统,涉及连续的动作与状态。开环控制系统,例如遥控器;闭环控制系统,给定值和当前值(环境值)进行变频调节,到给定值形成闭环,例如空调,还有定速巡航。
并行构件网络,构件和连接件都有一个顶部和底部,构件之间不运行直连,一个连接件可以多连接构件和连接件,两个连接件直连时,必须其中一个是底部,一个是顶部。
演化过程:两层C/S,三层C/S,三层B/S,混合架构,
两层C/S:表示层(客户端业务处理),数据层(数据存取和数据请求)。缺点:升级更新,成本大。
三层C/S:新增一个功能层来处理业务逻辑。手机app。
三层B/S:解决不用安装客户端。表现层(mvc,mvp,mvvm),中间层,数据访问层(orm,例如mybits),数据架构层(数据库)。
混合架构:外部B/S,内部C/S。
客户机/服务器系统开发时可以采用不同的分布式计算架构:
MVP架构风格:Mvc的变种,实现V和M之间的解藕,更好支持单元测试,界面事件V,业务逻辑P。
MVVM架构风格:view,viewModel, model。两次间交互,不跨层交互。
富互联网应用 RIA:结合c/s和b/s架构结合,简化b/s架构的用户交互,数据能够被缓存到客户端。
构造多个服务,服务与服务之间采用服务总线ESB(中介者)进行通信。例如webservice。
特点:松散耦合,粗粒度,标准化接口。
粒度排序:对象最低,构件,服务最高。
实现方式:服务提供者,服务请求者(包含服务和服务描述),服务注册中心(服务描述)。
关键技术:
功能 协议
发现服务 UDDI,DISCO
描述服务 WSDL,XML Schema
消息格式层 SOAP,REST
编码格式层 XML
传输协议层 HTTP,TCP/IP,SMTP
企业服务总线 ESB
功能:服务位置透明性,传输协议转换,消息格式转换,消息路由,安全性,监控与管理。
单一程序划分为一组小的服务,松散耦合独立部署,服务之间相互协调、相互配合。服务与服务之间采用轻量级的通信机制相互沟通,通常基于http协议的RESTful API。
优势:技术异构性,弹性,扩展,简化部署(前提实现自动化部署),与组织结构相匹配,可组织性,可替代性的优化强。
挑战:分布式系统的复杂性,运维成本,部署自动化,服务间依赖测试,服务间依赖管理。
3.7 MDA 模型驱动架构
使用模型完成代码的分析,设计,构建,部署,维护等开发活动。模型推动开发,模型映射能自动生成代码。
目标:可移植性,互通性,可重用性。
3种核心模型:
PIM经过变换工具到PSM,再经过变换工具到code。
特定领域软件架构 DSSA
某个领域行业的开发,同一类系统行业的共性进行分析形成特定领域架构。即行业解决方案。
基本活动:
逐步求精的过程。
领域分析机制
领域软件架构建立过程:定义领域范围,领域特定元素,特定设计和实现需求约束,领域模型和架构,生产搜集可复用产品单元。
DSSA三层模型
基于架构的软件设计ABSD
Adsb能很好的支持软件的复用
ADSB方法是架构驱动,强调业务,质量,功能需求组合驱动架构设计。
ABSD以架构风格和质童属性为中心,强调由商业、质量和功能需求的组合驱动软件架构设计。ABSD方法有三个基础:功能分解、选择架构风格实现质量及商业需求和软件模板的使用。
设计活动可以从项目总体功能框架明确开始,意味需求获取和分析未完成,就开始了软件设计。
三个基础:功能分解,通过架构风格来实现质量和业务需求,软件模块的使用。
整个过程是递归的。
视角和视图:不同视角有不同的视图。描述软件架构。
用例来捕获功能需求,特定场景来捕获质量需求(可靠性,性能,维护性等)。
用例和质量场景描述需求。
基于架构的软件设计的开发过程。过程有迭代。
步骤:架构需求,架构设计,架构文档化,架构复审,架构实现,架构演化。
架构的描述语言 ADL
三要素:构件,连接件,架构配置。
例如: aesop,c2,sadl,unicon,wright
1、性能。性能指系统的响应能力。
代表参数:响应时间、吞吐量。
设计策略:优先级队列,资源调度。增加计算资源、改善资源需求(减少计算复杂度等)、资源管理(并发、数据复制等)和资源调度(先进先出队列、优先级队列等)
2、可用性。正常运行的时间比例。
代表参数:故障间隔时间,多久完成备用切换。
设计策略:冗余(多台灾备等),心跳线(两台服务器心跳监控进行起备用),Ping/Echo、心跳、选举、异常和主动冗余等
3、安全性。合法用户使用服务,阻止非法用户使用服务。
分为机密性,完整性,不可否认性,可控制性。
代表参数:授权。
设计策略:追踪审计(日志等追踪审查)、抵御攻击(授权、认证和限制访问等)、攻击检测(入侵检测等)、从攻击中恢复(部分可用性策略)和信息审计等。
4、可修改性。快速地以较高性价比对系统进行变更修改的能力。
代表参数:多久完成新增或修改。功能性的修改。
主要策略:信息隐藏,设计高内聚低耦合,接口实现分离。软件模块泛化、限制模块之间通信、使用中介和延迟绑定等。
5、可靠性。
软件系统在应用或系统方面,意外情况或错误使用下维持功能的基本能力。主要考虑容错,健壮性。
代表参数:MTTF,MTBF。
设计策略:冗余,心跳线。
可靠性决定可用性。
6、功能性。完成所期望的工作能力。
7、可变性。框架,整个平台变迁。体系结构扩展或变更成为新体系结构能力。
8、互操作性。程序和其他软件系统的交互作用。
9、易用性。界面一致,方便使用。
为什么要进行架构评估?
架构到底评估什么?
架构评估怎么评?
架构评估方法:基于问卷(检查表)的方法,基于度量的方式(指标打分,根据标准打分,偏向理论),基于场景的方式。
基于场景的评估方法(架构进行评估)
ATAM被分为四个主要的活动领域(或阶段) ,分别是场景和需求收集、体系结构视图和场景实现、属性模型构造和分析中。
SAAM分析评估体系结构的过程包括五个步骤,即场景开发、体系结构描述、单个场景评估、场景交互和总体评估。SAAM的主要输入问题是问题描述、需求声明和体系结构描述。
九、软件产品线
DDSA特定领域架构演化而来。软件工程,软件架构,领域过程,DSSA组合形成软件产品线。适合做行业级系统开发。
要成功实施产品线,主要取决的因素:
中间件是构件的一种。
软件构件是一种组装单元,具备规范的接口规范和显式的语境依赖。软件构件可以独立不是并由第三方任意组装。
构件的特性:独立部署单元,作为第三方组装单元,没有外部的可见状态。
对象的特性:一个实例单元,具有唯一标识,具有状态(外部可见),封装了自己的状态和行为。
模块的特性:结构化开发的产物。比如过程和函数。
颗粒度从上到下三个一次变小。
构件的复用。过程:检索与提取构件,理解和评估构件,修改构件,组装构件。
中间件: 一种独立的系统软件或者服务程序,可以帮助分布式应用软件在不同的技术之间共享资源。
优点:提高开发效率。
中间件技术-corba(公共对象请求代理体系结构)
客户端(对象引用)--逻辑连接(代理)-- 服务端(corba对象)
Corba包含的主要内容:
对象请求代理,对象服务,公共设施,应用接口,领域接口。
EJB对应spring中的模型(M)。
Bean运行在EJB容器之中,分为三类:
J2EE核心组成:
容器:applet container,application container,web container,ejb container
组件:applet,application,jsp/servlet,ejb
服务:http,jdbc,jms,jndi,jaxp
浏览器 Applet ->web服务 servlet ->EJB容器( sessionBean->entityBean )->DB
EJB分为会话Bean、实体Bean和消息驱动Bean。
1.会话Bean:用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个会话Bean来为客户端服务。会话Bean可以直接访问数据库,但更多时候,它会通过实体Bean实现数据访问。 客户端与服务端交互。
2.实体Bean:用于实现O/R映射,负责将数据库中的表记录映射为内存中的实体对象,事实上,创建一个实体Bean对象相当于新建一条记录,删除一个实体Bean会同时从数据库中删除对应记录,修改一个实体Bean时,容器会自动将实体Bean的状态和数据库同步。数据持久化简化数据库端开发。
3.消息驱动Bean是EJB3.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态会话Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。处理并发和异步操作。
从架构来看:mvc,mvp,mvvn,rest,webservice,微服务,中台。
从缓存来看:memcache,redis,squid。
从并发分流来看:集群(负载均衡),cdn。
从数据库来看:主从库,内数据库,反规范化技术,noSQL,分区分表,视图和物化视图。
持久层来看:hibernate,mybits。
分布存储来看:hadoop,fastdfs,区块链。
数据编码来看:json,xml。
Web应用服务器来看:apache,webservice,weblogic,tomat,jboss,iis。
其他:静态化,有无状态,响应式web设计。
负载均衡技术
算法支撑:
软硬件代表:
应用服务器集群
负载均衡:用户的请求转发到具体的应用服务器。
如何保持用户每次访问服务端都一致,维护session一致性问题?
1.携带session的cookie。session服务器暂存数据,cookie存在客户端本地的信息。
2.redis缓存。session存在redis。
3.服务器之间同步cookie。
有无状态服务
无状态服务:单词请求处理,不依赖其他服务。
有状态服务:自身保存一些数据,先后的请求有关联。
数据库读写分离
主从策略。主库(一个)写,从库(多个)度,主从进行同步。
缓存缓解数据库压力。(IO层面优化,硬盘的效率瓶颈)
数据库数据存在在磁盘,效率低。缓存存到内存,并且存入的是结果 KV。
Redis和Memcached比较。reids范围更广,支持数据持久化,可灾难恢复,Memcached不支持,不可恢复。Memcached只是单纯的kv存储。
Redis常见问题
zset 是一种采用数据分数来排序的结构,完美当排名用的 数据库和redis数据同步的常见方案有两种
1. 被动同步:通常应用程序会在读取数据前检查缓存是否有,如果没有则加载数据库并写入缓存,可以在修改时删除缓存让读取时去数据库获取(有不同步问题,可以通过延迟双删解决)
2. 主动同步:启动个额外服务去读取数据库binlog文件,通过解析binlog文件来确定数据库发生了什么样的更改从而去更新redis
CDN(内容分发网络):最近距离请求。从本地站点先请求,就进请求服务。例如京东仓库。
Xml和JSON 扩展标记语言
Xml优点:
缺点:
JSON优点:
缺点:
没xml格式深入人心和推广,没有xml通用性广。(不见得吧)
Web应用服务器
Web服务器:智能单一,浏览器请求,返回html页面。
应用服务器:进行业务逻辑的处理。
rest 表述性状态传递。获取网络资源的标准形式。
5个原则:
响应式web设计
根据不同布局,智能根据用户行为以及适用的设备环境进行相对应的布局。
方法和策略:
中台
一套结合互联网技术和行业特性,共享服务形式沉淀,形成大中台,小前台的组织和业务机制。中台可进行优化。分为业务中台和数据中台。