目录
体系结构=架构。
架构设计就是需求分配,即将满足需求的职责分配到组件。
软件架构放在需求分析之后,架构设计之前。
架构风格为软件系统提供结构、行为、属性的高级抽象。
软件架构是项目干系人员进行交流的手段。
软件架构使推理和控制更加简单,有助于循序渐进的原型设计,可以作为培训的基础。
软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量。
软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义了一类架构所共有的结构和语义特性,主要包括架构定义、架构词汇表和架构约束。
结构模型(构件、连接件、其他概念刻画结构)
框架模型(更注重整体)
动态模型(系统大颗粒行为性质)
过程模型(步骤和过程)
功能模型(功能构建层次组成)
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设计
根据不同布局,智能根据用户行为以及适用的设备环境进行相对应的布局。
方法和策略:
中台
一套结合互联网技术和行业特性,共享服务形式沉淀,形成大中台,小前台的组织和业务机制。中台可进行优化。分为业务中台和数据中台。