首页 > 其他分享 >软考高级软件架构师学习笔记一(软件架构设计)

软考高级软件架构师学习笔记一(软件架构设计)

时间:2023-06-07 10:05:23浏览次数:64  
标签:负载 架构 连接件 系统 软考 笔记 软件架构 构件 体系结构


软件架构设计

一、软件架构的概念⭐⭐⭐

1、软件架构的概念

需求分析-----------架构------------软件设计

                        (鸿沟)

体系结构==架构

架构设计就是需求分配,即是将满足需求的职责分配到组件上。

2、软件架构建模

  • 结构模型:以架构的构件、连接件和其他概念来刻画结构
  • 框架模型:不太侧重描述结构的细节而更侧重于整体的结构
  • 动态模型:系统的“大颗粒”的行为性质
  • 过程模型:构建系统的步骤和过程
  • 功能模型:由一组功能构件按层次组成,下层向上层提供服务

软考高级软件架构师学习笔记一(软件架构设计)_数据

二、软件架构风格⭐⭐⭐⭐⭐

  1. 架构设计的一个核心问题是能否达到架构级的软件复用
  2. 架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个构件有效地组织成一个完整的系统
  3. 架构风格定义了用于描述系统的术语表和一组指导构建系统的规则
  • 数据流风格:批处理序列、管道-过滤器
  • 调用/返回风格:主程序/子程序、面向对象、层次结构
  • 独立构件风格:进程通信、事件驱动系统(隐式调用)
  • 虚拟机风格:解释器、基于规则的系统
  • 仓库风格:数据库系统、超文本系统、黑板系统

1、数据流风格

批处理序列

  • 构件为一系列固定顺序的计算单元,构件之间只通过数据传递交互。每个处理步骤是一个独立的程序,每一步必须在其前一步结束后才能开始,数据必须是完整的,以整体的方式传递。

管道--过滤器

  • 每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常是通过对输入数据流的变换或计算来完成的,包括通过计算和增加信息以丰富数据,通过浓缩和删除以精简数据、通过改变记录方式以转化数据和递增地转化数据等。这里的构件称为过滤器,连接件就是数据流传输的管道,将一个过滤器的输出传到另一个过滤器的输入。

早期编译器就是采用的这种架构。要一步一步处理的,均可考虑采用此架构风格。

2、调用/返回风格

主程序/子程序

  • 单线程控制,把问题划分为若干个处理步骤,构件即为主程序和子程序,子程序通常可合成为模块。过程调用作为交互机制,即充当连接件的角色。调用关系具有层次性,其语义逻辑表现为主程序的正确性取决于它调用的子程序的正确性。

面向对象

  • 构件是对象,对象是抽象数据类型的实例。在抽象数据类型中,数据的表示和它们的相应操作被封装起来,对象的行为体现在其接受和请求的动作。连接件即是对象间交互的方式,对象是通过函数和过程的调用来交互的

层次结构

  • 构件组织成一个层次结构,连接件通过决定层间如何交互的协议来定义。每层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层。通过层次结构,可以将大的问题分解为若干个渐进的小问题逐步解决,可以影藏问题的复杂度。修改某一层,最多影响其相邻的两层(通常只能影响上层)

3、独立构件风格

进程通信

  • 构件是独立的过程,连接件是消息传递。构件通常是命名过程,消息传递的方式。可以是点对点、异步或同步方式,以远程过程(方法)调用等。

事件驱动系统(隐式调用)

  • 构件不直接调用一个过程,而是触发或广播一个或多个事件。构件中的过程在一个或多个事件中注册,当某个事件被触发时,系统自动调用在这个事件中注册的所有过程。一个事件的触发就导致了另个一模块中的过程调用。这种风格中的构件是匿名的过程,它们之间交互的连接件往往是以过程之间的隐式调用来实现的。主要优点是为了软件复用提供了强大的支持,为构件的维护和演化带来了方便;其缺点是构件放弃了对系统计算的控制。

4、仓库风格(以数据为中心的风格)

仓库风格中构件分两种:一种是中央数据结构,保存系统的当前状态;另一种是独立构件,对中央数据存储进行操作。

数据库系统

黑板系统

  • 包括知识源、黑板和控制三部分。知识源包括若干独立计算的不同单元,提供解决问题的知识。知识源响应黑板的变化,也只修改黑板:黑板是一个全局数据库,包含问题域解空间的全部状态,是知识源相互作用的唯一媒介;知识源响应是通过黑板状态的变化来控制的。黑板系统通常应用在对于解决问题没有确定性算法的软件中(信号处理、问题规划和编译器优化等)

超文本系统

  • 构件以网状链接方式相互连接,用户可以在构件之间进行按照人类的联想思维方式任意跳转到相关构件。超文本是一种非线性的网状信息组织方法,它以结点为基本单位,链作为结点之间的联想式关联。超文本系统通常应用在互联网领域。
  • 现代集成编译环境一般采用这种架构风格。

5、闭环控制架构(过程控制)

当软件被用来操作一个物理系统时,软件与硬件之间可以粗略地表示为一个反馈循环,这个反馈循环通过接受一定的输入,确定一系列的输出,最终使环境达到一个新的状态。适合于嵌入式系统,涉及连续的动作与状态。

软考高级软件架构师学习笔记一(软件架构设计)_负载均衡_02

 6、C2风格

C2是一种并行构件网络。如下所示:

软考高级软件架构师学习笔记一(软件架构设计)_数据_03

C2架构的基本规则:

  • 构件和连接件都有一个顶部和一个底部。
  • 构件的顶部要连接到连接件的底部,构件的底部要连接到连接件的顶部,构件之间不允许直连。
  • 一个连接件可以和任意数量的其他构件和连接件连接
  • 当两个连接件进行直连时,必须由其中一个的底部到另一个的顶部。

 7、层次架构风格

软考高级软件架构师学习笔记一(软件架构设计)_体系结构_04

  •         两层C/S架构

软考高级软件架构师学习笔记一(软件架构设计)_体系结构_05

  •  三层C/S架构
  •  三层B/S架构

软考高级软件架构师学习笔记一(软件架构设计)_负载均衡_06

  •  层次架构风格

软考高级软件架构师学习笔记一(软件架构设计)_负载均衡_07

 8、MVC架构风格

Model(模型)是应用程序中用于处理数据逻辑的部分。通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

J2EE体系结构中:

视图(View):JSP

控制(Controller):Servlet

模型(Model):Entity Bean、Session Bean

软考高级软件架构师学习笔记一(软件架构设计)_负载均衡_08

9、MVVM架构风格

软考高级软件架构师学习笔记一(软件架构设计)_学习_09

 10、富互联网应用(RIA)

软考高级软件架构师学习笔记一(软件架构设计)_负载均衡_10

  • RIA结合了C/S架构,反应速度快、交互性强的优点,以及B/S架构传播范围广及容易传播的特性
  • RIA简化并改进了B/S架构的用户交互
  • 数据能够被缓存在客户端,从而可以实现一个比基于HTML的响应速度更快且数据往返于服务器的次数更少的用户界面

 11、基于服务的架构(SOA)

服务是一种为了满足某项业务需求的操作、规则等的逻辑组合,它包含一系列有序活动的交互,为实现用户目标提供支持

软考高级软件架构师学习笔记一(软件架构设计)_数据_11

SOA的实现方式

  1. Web Service
  2. ESB
  3. REST

软考高级软件架构师学习笔记一(软件架构设计)_体系结构_12

 SOA关键技术

软考高级软件架构师学习笔记一(软件架构设计)_体系结构_13

SOAP,Simple Object Access Protocol,简单对象访问协议,简单的说就是用于访问网络服务的协议:它是基于XML的简易协议,可以使应用程序在HTTP之上进行信息交换。

SOAP是一种网络通信协议,用于网络上、不同平台、不同语言的应用程序间的通讯。

SOAP协议=HTTP协议+XML数据格式

11 、 微服务

微服务的优势

  • 技术异构性
  • 弹性
  • 扩展
  • 简化部署
  • 与组织结构相匹配
  • 可组合性
  • 对可替代性的优化

微服务面临的挑战

  • 分布式系统的复杂度
  • 运维成本
  • 部署自动化
  • DevOps与组织结构
  • 服务间依赖测试
  • 服务间依赖管理

微服务与SOA 

软考高级软件架构师学习笔记一(软件架构设计)_体系结构_14

软考高级软件架构师学习笔记一(软件架构设计)_数据_15

12、MDA

软考高级软件架构师学习笔记一(软件架构设计)_体系结构_16

三、架构描述语言ADL⭐⭐⭐

ADL是一种形式化语言,它在底层语义模型的支持下,为软件系统的概念体系结构建模提供了具体语法和概念框架。基于底层语义的工具为体系结构的表示、分析、演化、设计过程等提供支持。

ADL的三个基本元素

  • 构件:计算或数据存储单元
  • 连接件:用于构件之间交互建模的体系结构构造块及其支配这些交互的规则
  • 架构配件:描述体系结构的构件与连接件的连接图

主要的架构描述语言

  • Aesop:支持体系结构风格的应用
  • MetaH:为设计者提供了关于实时电子控制软件系统的设计指导
  • C2:支持基于消息传递风格的用户界面系统的描述
  • Rapide:支持体系结构设计的模拟并提供了分析模拟结果的工具
  • SADL:提供了关于体系结构加细的形式化基础
  • Unicon:支持异构的构件和连接类型并提供了关于体系结构的高层编译器
  • Wright:支持体系结构构件之间交互的说明和分析

四、特定领域软件架构⭐⭐⭐

基本活动

软考高级软件架构师学习笔记一(软件架构设计)_学习_17

领域分析机制

 

软考高级软件架构师学习笔记一(软件架构设计)_体系结构_18

建立过程

软考高级软件架构师学习笔记一(软件架构设计)_数据_19

五、基于架构的软件开发⭐⭐⭐⭐

基于架构的软件设计

ABSD方法是架构驱动,即强调由业务、质量和功能需求的组合驱动架构设计。

使用ABSD方法,设计活动可以从项目总体功能框架明确就开始,这意味着需求获取和分析还没有完成(甚至远远没有完成),就开始了软件设计

ABSD方法有三个基础

  1. 功能的分解,ABSD方法使用已有的基于模块的内聚和耦合技术
  2. 选择架构风格来实现质量和业务需求
  3. 软件模板的使用,软件模板利用了一些软件系统的结构

ABSD方法是递归的,且迭代的每一个步骤都是清晰地定义的,因此,不管设计是否完成,架构总是清晰的,这有助于降低架构设计的随机性。

视角与视图:从不同的视角来检查所以会有不同的视图

用例用来捕获功能需求、特定场景来捕获质量需求

开发过程

软考高级软件架构师学习笔记一(软件架构设计)_负载均衡_20

 

软考高级软件架构师学习笔记一(软件架构设计)_学习_21

软考高级软件架构师学习笔记一(软件架构设计)_负载均衡_22

六、软件质量属性⭐⭐⭐⭐⭐

质量属性

1、性能

性能(performance)是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。

代表参数:响应时间、吞吐量                        设计策略:优先级队列、资源调度

2、可用性

可用性(availability)是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或者在出现故障时系统能够恢复正常的速度来表示。

代表参数:故障间隔时间                                设计策略:冗余、心跳线

3、安全性

安全性(security)是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。安全性又可以划分为机密性、完整性、不可否认性及可控性等特征。

设计策略:追踪审计

4、可修改性

可修改性(modifiability)是指能够快速地以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量可修改性。

主要策略:信息隐藏

5、可靠性

可靠性(reliability)是软件系统在应用或系统错误面前,在意外或者错误使用的情况下维持软件系统的功能特性的基本能力。主要考虑两个方面:容错、健壮性。

代表参数:MTTF、MTBF                                设计策略:冗余、心跳线

6、功能性

功能性(functionality)是系统所能完成所期望的工作的能力。一项任务的完成需要系统中许多或大多数构件的相互协作。

7、可变性

可变性(changeability)是指体系结构经扩充或变更而成为新体系结构的能力。这种新体系结构应该符合预先定义的规则,在某些具体方面不同于原有的体系结构。当要将某个体系结构作为一系列相关产品(列如,软件产品线)的基础时,可变性是很重要的。

8、互操作性

作为系统组成部分的软件不是独立存在的,经常与其他系统或自身环境相互作用。为了支持互操作性(interoperation),软件体系结构必须为外部可视的功能特性和数据结构提供精心设计的软件入口。程序和用其他编程语言编写的软件系统的交互作用就是互操作性的问题,这种互操作性也影响应用的软件体系结构。

七、软件架构评估⭐⭐⭐⭐⭐

软考高级软件架构师学习笔记一(软件架构设计)_体系结构_23

 基于场景的方式

  • 确定应用领域的功能和软件架构的结构之间的映射
  • 设计用于体现待评估质量属性的场景
  • 分析软件架构对场景的支持程度

软件架构分析方法(SAAM)

软考高级软件架构师学习笔记一(软件架构设计)_数据_24

架构权衡分析法(ATAM)

软考高级软件架构师学习笔记一(软件架构设计)_数据_25

成本效益分析法(CBAM)

质量效用树

软考高级软件架构师学习笔记一(软件架构设计)_数据_26

典型应用架构

J2EE-分布式多层应用程序

 

软考高级软件架构师学习笔记一(软件架构设计)_负载均衡_27

J2EE核心组成

容器:

Applet Container、Application Container、Web Container、EJB Container

组件:

Applet、Application、JSP/Servlet、EJB

服务:

HTTP(Hypertext Transfer Protocol):超文本传输协议

RMI-IIOP(remote method invocation ober the internet inter-ORB protocol):远程方法调用,融合了java RMI 和CORBA,在使用Application或Web端访问EJB端组件时使用

CORBA(Common object request broker architecture):公共对象请求代理体系结构

Java IDL(java interface definition language):java接口定义语言,用于访问外部的CORBA服务

JTA(java transaction API):用于进行事务处理操作的API

JDBC(Java Database Connectivity):为数据库操作提供的一组API

JMS(Java Massage Service):用于发送点对点消息的服务

JavaMail:用于发送邮件

JAF(Java Activation Framework):用于封装传递的邮件数据

JND(Java Naming and Directory Interface)

JAXP(Java API for XML Parsing):解析XML的API

JCA(J2EE Connector Architecture):Java 连接器构架

JAAS(Java Autherticati on and AUthorization Service)

JSF(Java Server Faces)

JSTL(JSP Standard Tag Library)

SAAJ(SOAP with Attachments API for JAVA)

JAXR(Java Api for XML Registries)

八、软件产品线⭐⭐⭐

九、构件与中间件技术⭐⭐⭐⭐

构件系统架构特性

软考高级软件架构师学习笔记一(软件架构设计)_体系结构_28


构件的复用

软考高级软件架构师学习笔记一(软件架构设计)_学习_29

软考高级软件架构师学习笔记一(软件架构设计)_学习_30

软考高级软件架构师学习笔记一(软件架构设计)_数据_31

软考高级软件架构师学习笔记一(软件架构设计)_学习_32

软考高级软件架构师学习笔记一(软件架构设计)_负载均衡_33

 中间件

中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源

软考高级软件架构师学习笔记一(软件架构设计)_体系结构_34

中间件技术的优点:

  • 面向需求
  • 业务的分隔和包容性
  • 设计与实现隔离
  • 隔离复杂的系统资源
  • 符合标准的交互模型
  • 软件复用
  • 提供对应用构件的管理 

十、Web架构设计⭐⭐⭐⭐

架构:MVC   MVP  MVVM  REST  WEBSERVICE  微服务

缓存: MemCache  Redis   Squid

并发:集群(负载均衡)  CDN

数据库:主从复制   内存数据库  反规范化技术  NoSQL   分区分表   视图与物化视图

持久化:Hibernate  Mybatis

分布存储:Hadoop   FastDFS  区块链

数据编码:XML  JSON

WEB应用服务器:Apache    WebSphere    WebLogic   Tomcat   JBOSS  IIS

其他:静态化 ,有状态与无状态   响应式web设计

负载均衡

基于特定软件的负责均衡(HTTP重定向)(应用层)

反向代理负载均衡(应用层)

基于DNS的负载均衡(传输层)

基于NAT的负载均衡(传输层)

混合型负载均衡

静态算法:轮转算法、加权轮转算法、源地址哈希散列算法、目标地址哈希散列算法、随机算法

动态算法:最小连接数算法、加权最小连接数算法、加权百分比算法

硬件负载均衡:F5

软件负载均衡:LVS   nginx   haproxy

负载均衡技术

应用负载均衡

1、http重定向,http重定向就是应用层的请求转发。用户的请求其实已经到了HTTP重定向负载均衡服务器,服务器根据算法要求用户重定向,用户收到重定向请求后,再次请求真正的集群。

特点:实现简单,但性能较差

2、反向代理服务器,在用户的请求到达反向代理服务器时(已经到达网站机房),由反向代理服务器根据算法转发到具体的服务器。常用的apache,nginx都可以充当反向代理服务器。

特点:部署简单,但代理服务器可能成为性能的瓶颈

传输层负载均衡

1、DNS域名解析负载均衡,DNS域名解析负载均衡就是在用户请求DNS服务器,获取域名对应的IP地址时,DNS服务器直接给出负载均衡后的服务器IP

特点:效率比HTTP重定向高,减少维护负载均衡服务器成本。但一个应用服务器故障,不能及时通知DNS,而且DNS负载均衡的控制权在域名服务器商那里,网站无法做更多的改善和更强大的管理

2、基于NAT的负载均衡,基于NAT的负载均衡将一个外部IP地址映射为多个IP地址,对每次连接请求动态地转换为一个内部节点的地址

特点:技术较为成熟,一般在网关位置,可以通过硬件实现。像四层交换机一般就采用了这种技术。

有状态和无状态

无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以冲外部获取到(比如说数据库),服务器本身不存储任何信息。

由状态服务(stateful service)则相反,它会在自身保存一些数据,先后的请求是有关联的。

数据库读写分离

软考高级软件架构师学习笔记一(软件架构设计)_数据_35

用缓存缓解读库的压力

软考高级软件架构师学习笔记一(软件架构设计)_学习_36

 CDN(内容分发网络)

CDN的全称是Content Delivery Network, 即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快,更稳定。

WEB应用服务器

Apache:Web服务器,市场占有率达60%左右,它可以运行在几乎所有的UNIX,Windows, Linux系统平台上

IIS:早期web服务器,目前小规模站点仍有应用。

Tomcat:开源、运行servlet和JSP web应用软件的基于JAVA的web应用软件容器。

JBOSS:JBOSS是基于J2EE的开源的应用服务器。一般与Tomca或Jetty绑定使用。

Weblogic: BEA weblogic server 是一种多功能,基于标准的web应用服务器,为企业构建自己的应用提供了坚实的基础。

Jetty:Jetty是一个开源的servlet容器,它为基于Java的web容器。

REST(表述性状态传递)

软考高级软件架构师学习笔记一(软件架构设计)_数据_37

 响应式Web设计

软考高级软件架构师学习笔记一(软件架构设计)_体系结构_38

标签:负载,架构,连接件,系统,软考,笔记,软件架构,构件,体系结构
From: https://blog.51cto.com/u_15564034/6429976

相关文章

  • EasyUI——学习笔记
    资源文件介绍locale:easyui的css内置样式easyui核心样式:easyui.css图标演示:icon.cssthemes:汉化内置文字文件jquery.easyui.min.js:所有easyui封装好的jquery代码和ajax代码jquery.min.js:jquery文件 搭建环境的步骤1、导入需要的css样式文件:easyui.css、icon.css2......
  • 构建之法读书笔记之二
    继续我的阅读之旅,上次说到我们编程时要规范化代码,这样方便他人也方便自己,其次就是要交流,来使我们的合作更加顺利。第五章又是团队,果然在软件工程这一领域扩展到信息技术乃至整个人类社会,最不能忽视的就是团队,这也是老生常谈了。本章讲了团队模式。团队模式有很多种如作者给我们......
  • 构建之法读书笔记之一
    和人月神话一样,构建之法也是老师所推荐的书目,当然这也是一本早有耳闻却现今才刚刚上手的一本。此书开始便告诉我们什么是软件工程,以及它与现代计算机技术之间的关系。什么是软件工程呢?软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。它包括下......
  • 构建之法读书笔记之三
    首先还是回顾一下之前的阅读,团队的合作模式、敏捷流程。对于合作,我们需要足够的交流,足够的耐心,同时也要积极发展个人能力,争做软件工程界面的优等生。这次我们要讲的是用户,每一个程序、项目,最终的审核者都是我们的目标受众——用户。因此我们最终的目的就是让用户满意。那怎么才能......
  • GameHub项目开发笔记
    技术栈搭建项目项目在HbuilderX中进行开发,新建时使用默认模板,选择Vue2版本,并且启用uniCloud(阿里云)项目代码托管到GitHub,.gitignore文件配置如下#/test/表示忽略根目录下的test目录及其所有内容。/uniCloud-aliyun//.hbuilderx//uni_modules//unpackage/学习参考:https:/......
  • 人月神话读书笔记之二
    上次阅读的主题是团队,这次依然如此,上次提及的是对于我们做项目,团队的重要性,而这次我们则要说交流在团队中都发挥着深刻的作用。每个团队之间都应该拥有多种方式来进行相互之间的交流,可以是相对休闲的茶话会,也可以是正式项目工作手册(共享资源)。为了方便团队间的交流,我们就可以看出......
  • 人月神话读书笔记之三
    通过一段时间的阅读,人月神话终于进入尾声,即将结束本书的阅读,同时,我也了解到了不少关于程序员的信息,越是了解,就越觉得自己和理想之间差距很大。以前,我觉得,程序员嘛,想怎么编就怎么编咯,反正最后能够交差就行,自己看得过去就OK啦,后来我才发现,我的想法是错误的,自我满足本身就是一件错误......
  • MyBatis学习笔记(4)—— XML映射文件の结果集(Result Maps)高级结果映射中的集合(collectio
    集合<collectionproperty="posts"ofType="domain.blog.Post"><idproperty="id"column="post_id"/><resultproperty="subject"column="post_subject"/><resultproperty="......
  • Spring 学习笔记(10)—— 视图和视图解析器
    1认识视图2认识视图解析器3使用JSP和JSTL4模板视图FreeMarkerFreeMarker仅负责基于模板对模型数据进行渲染的工作在SpringWeb上下文中配置FreeMarker......
  • Spring 学习笔记(7)—— 使用外部属性文件
    1使用PropertyPlaceholderConfigurer属性文件驱动器类名,JDBC的URL地址及数据库用户名/密码都直接写在XML文件中,部署应用的时候,必须先找出这个Bean部署XML文件,再找出数据源Bean定义的代码段进行调整,很麻烦。在实际应用中,应该将这些配置信息抽取到一个配置文件中。2使......