软考高级系统架构师背诵要点---软件架构设计

news2024/11/20 2:37:26

软件架构设计

软件架构的概念

软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式及这些模式的约束组成

软件架构4+1视图:

  1. 逻辑视图:主要是整个系统的抽象结构表述,关注系统提供最终用户的功能,
  2. 开发视图;关注编程人员的软件管理
  3. 物理视图: 系统工程人员,关注系统拓扑、安装、通信等
  4. 处理视图: 系统集成人员,关注性能、可扩充性、吞吐量等
  5. 场景:关注最终用户需求,通常用UML用例图和活动图描述

软件架构风格的概念

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式,定义了用于描述系统的术语表和一组指导构建系统的规则反映了领域中众多系统所共有的结构和语义特征,并指导如何将各个构件有效的组织成一个完整的系统

软件架构风格分类:

        1.数据流风格

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

管道-过滤器:  每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流,经过处理,产生输出数据流。

         2.调用/返回风格

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

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

层次结构:  构件组织成一个层次结构,连接件通过决定层间如何交互的协议来定义,每层为上层提供服务,使用下一层的服务,智能看到与自己邻接的层。通过层次机构将大问题分解为若干小问题,隐藏问题复杂度,修改某层最多影响相邻的两层

        3.独立构件风格

进程通信: 构件是独立的过程,连接件是消息传递,构件通常是命名过程,消息传递的方式可以是点对点、异步或同步的方式,以及远程过程调用等

事件驱动(隐式调用): 构件不直接调用一个过程,而是触发或广播一个或多个事件。构件中的过程在一个或多个事件中注册,当某个事件被触发时,系统自动调用在这个事件中注册的所有过程。一个事件的触发就导致了另一个模块中过程的调用

        4.虚拟机风格

解释器 解释器通常包括一个完成解释工作的解释引擎、一个包含将被解释的代码存储区、一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行的进度的数据结构。具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用,其缺点是执行效率较低

基于规则的系统: 基于规则的系统包含规则集、规则解释器、规则/数据选择器以及工作内存

        5.仓库风格

数据库风格 数据库架构是库风格最常见的形式。构件主要有两大类,一个是中央共享数据源,保存当前系统的数据状态,另一个是多个独立处理元素,处理元素对数据元素进行操作

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

超文本 构件以网状链接方式相互连接,用户可以在构件之间按照人的思维方式任意跳转到相关构件。

        6.闭环控制风格(过程控制)

当软件被用来操作一个物理系统时,软件与硬件之间可以粗略的表示为一个反馈循环,这个反馈循环通过接收一定的输入,确定一系列的输出,最终使环境达到一个新的状态

        7.C2风格

是一种常见得层次体系架构风格。概括而言,该风格是由连接件绑定的按照一定规则运行的并行构件网络,各构件之间只能通过连接件的异步通信机制进行交互,使得构件的替换或更新不影响架构,这种方式体现了高内聚、低耦合的设计思想

        8.两层C/S

分为表示层和数据层,业务逻辑处理放在了表示层,数据层只进行数据处理与存储。缺点是:开发成本高,客户端设计复杂,信息内容形式单一,用户界面风格不一,移植困难,维护与升级困难,新技术不容易应用

        9.三层C/S

分为表示层、功能层、数据层。功能层可能与表示层都放在客户机上,也可能放在服务器上

        10.三层B/S

分为客户端、应用服务器、数据库服务器。缺点是:

  1. 缺乏对动态页面的支持,没有集成有效的数据库处理能力
  2. 安全性难以控制
  3. 在数据查询等响应速度上弱于C/S架构
  4. 数据提交一般以页为单位,动态交互性不强,不利于OLTP应用

        11.混合架构风格

内外有别:

概念:企业内部用户通过局域网直接访问数据库服务器,软件系统采用C/S架构,企业外部用户通过Internet询问Web服务器,通过Web服务器再访间数据库服务器,软件系统采用B/S架构

优点:外部用户不直接访问数据库服务器,能保证企业数据库的相对安全

缺点:企业外部用户修改和维护数据时,速度较慢,较烦琐,数据的动态交互性不强

查改有别:

概念:不管用户是通过什么方式(局域网或Internet)连接到系统,凡是需执行维护和修改数据操作的,就使用C/S架构;如果只是执行一般的查询和浏览操作,则使用B/S架构

优点:体现了B/S架构和C/S架构的共同优点

缺点:外部用户能直接通过Internet连接到数据库服务器,企业数据容易暴露给外部用户,给数据安全造成了一定的威胁

        12.MVC架构风格:

M: model,是应用程序中用于处理应用程序数据逻辑的部分,通常负责在数据库中存取数据

V:view,是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的

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

        13.MVP架构:

MVP是MVC的变种,实现了V与M的解耦(V不直接使用M, 修改V不会影响M),MVP更好的支持单元测试,V要处理界面事件(在MVC中界面事件由C处理),业务逻辑由P处理

        14.基于服务的架构(SOA)

定义:面向服务架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来,接口是采用中立的方式进行定义的,它独立于实现服务的硬件平台、操作系统和编程语言。这使得构件在各种各样的系统中的服务可以以一种统一和通用的方式进行交互

SOA服务构件与传统构件的对比:

  1. 服务构件粗粒度,传统构件细粒度居多
  2. 服务构建的接口是标准的,主要是WSDL接口,传统构件常以具体API形式出现
  3. 服务构件的实现与具体语言无关,传统构件绑定某种特定语言
  4. 服务构件可以通过容器提供QoS的服务,传统构件完全由程序代码直接控制

SOA关键技术:

  1. 发现服务:UDDI,提供了一种服务发布、查找和定位的方法,是服务的信息注册规范,以便该服务被发现和使用,同时它也定义了一种编程接口。该技术规范主要包括数据模型、API和注册服务三部分

  1. 描述服务:WSDL,基于XML语法对服务进行描述的语言,包括服务实现定义和服务接口定义

  1. 消息格式层: SOAP,定义了服务请求者和服务提供者之间的消息传输规范,该协议通过HTTP承载XML格式化的消息。通过SOAP,应用程序可以在网络中进行数据交换和远程过程调用(RPC)

  1. REST,是一种针对Web服务的设计和开发方式,通常使用HTTP、XML、URI和HTML等流行协议或标准,可以有效降低开发的复杂性,提高系统的可伸缩性

   

实现方式之 WebService:

服务提供者将服务注册到服务注册中心,服务请求者通过服务注册中心获取服务的真实地址。

实现方式之 ESB:

概念:将企业中各个不同的服务连接在一起。因为各个服务是异构的,没有统一的标准,各个异构系统对外提供的接口是各式各样的,SOA使用ESB来屏蔽异构系统对外提供的不同接口,以此来达到服务间高效的互联互通

特点:提供位置透明性的消息路由和寻址服务、提供服务注册和命名的管理、支持多种消息规范、支持多种传输协议、支持多种数据格式及其相互转换、提供日志和监控功能

        15.微服务

概念:微服务架构提倡将单一应用程序划分成一组小的服务,服务之间相互协调、配合,为最终用户提供最终价值,每个服务运行在其独立的进程中,服务之间采用轻量级的通信机制互相沟通。每个服务都围绕着具体业务进行构件,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据服务的上下文,选择合适的语言、工具对其进行构建。

特点:专注于某一个具体的业务,轻量级的通信机制,松耦合、独立部署

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

缺点:系统复杂、运维成本高、服务间的依赖难以管理

微服务与SOA的对比:

 

 

微服务实现与SOA实现对比:

        16.MDA模型驱动架构

使用模型完成软件的分析、设计、构建、部署、维护等开发活动

主要目标:可移植性、互通性、可重用性

架构描述语言ADL:

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

三个基本元素:

构件:计算或数据存储单元

连接件:用于构件之间交互建模的体系结构构造块及其支配这些交互的规则

架构配置:描述体系结构的构件与连接件的连接图

特定领域软件架构(DSSA):

基本活动:

领域分析:建立领域模型

领域设计:获得DSSA

领域实现:开发和组织可复用的信息

参与角色:

  1. 领域专家:  有经验的用户、有经验的软件工程师等,提供该领域中系统的需求规约和实现知识
  2. 领域分析人员:分析特定领域软件架构需求,由由知识工程背景的有经验的系统分析
  3. 领域设计人员;有经验的软件设计人员
  4. 领域实现人员:有经验的程序员

基于构件的软件开发(Component Based Software Development,CBSD):

利用模块化方法,将整个系统模块化,并在一定构件模型的支持下,复用构件库中的一个或多个软件构件,通过组合手段高效率、高质量地构造应用软件系统的过程。CBSD模型融合了螺旋模型的许多特征,本质上是演化型的,开发过程是迭代的。
 CBSD模型由软件的需求分析和定义、架构设计、构件库的建立、应用软件构建、测试和发布5
个阶段组成

基于架构的软件设计(ABSD):

特点:

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

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

  1. ABSD方法有三个基础。第一个是功能的分解,第二个是通过选择架构风格来实现质量和业务需求,第三个是软件模板的使用

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

  1. 视图和视角:从不同的视角来检查,所以会有不同的视图

  1. 用例用来捕获功能需求,特定场景用来捕获质量需求

过程:架构需求 -> 架构设计 -> 架构文档化 -> 架构复审 -> 架构实现 -> 架构演化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础:面向对象

一、设计对象并使用 二、封装 对象代表什么,就得封装对应的数据,并提供数据对应的行为。 1.private关键字:priviate修饰的成员变量只能在本类中访问。 2.this关键字:能够直接对应成员变量(当局部变量名相同时)。 3. 构造方法…

【Linux】十分钟快速了解Linux常用指令(建议收藏)

目录💖一. 关机指令01. shutdown02. halt03. reboot💖二. 常用指令04. ls05. pwd06. cd07. touch08. mkdir09. rm10. man11. cp(复制)12. mv指令13. nano14. cat15. less16. head17. tail18. find19. grep20. zip/unzip21. tar💖三、 日期指令…

JS 中 reduce()方法及使用详解

reduce()方法可以搞定的东西特别多,就是循环遍历能做的,reduce都可以做,比如数组求和、数组求积、统计数组中元素出现的次数、数组去重等等。 reduce() 方法对数组中的每个元素执行一个由您提供的reduce函数(依次执行),将其结果汇…

Python字符串分割方法【心得总结】

Python中字符串分割的常用方法 是直接调用字符串的str.split方法, 但是其只能指定一种分隔符, 如果想指定多个分隔符拆分字符串需要用到re.split方法 (正则表达式的split方法) 源码资料电子书:点击此处跳转文末名片获取 str.spli…

OAuth2简单介绍

目录 一、什么是OAuth2 二、OAuth2中的角色 1、资源所有者 2、资源服务器 3、客户 4、授权服务器 三、认证流程 四、生活中的OAuth2思维 五、令牌的特点 六、OAuth2授权方式 1、授权码 2、隐藏式 3、密码式 4、凭证式 一、什么是OAuth2 OAuth2.0是目前使用非常广…

7个高频出现的面试题

收集了2022年所有学生的面试题后,我整理出了7个高频出现的面试题,一起来看看。 高频问题1:请自我介绍下? 高频问题2:请介绍下最近做过的项目? 高频问题3:请介绍下你印象深刻的bug? 高…

Spring Batch 步骤对象-Chunk Tasklet

引言 接着上篇:Spring Batch 步骤对象-步骤Step与Tasklet 了解step步骤概念及其使用之后,本篇再来讲解spring batch使用更广,功能更强大的tasklet:居于块的批处理步骤:Chunk Tasklet 简介 居于chunk(块)的Tasklet相…

江西/杭州/黑龙江/深圳DAMA-CDGA/CDGP数据治理认证招生简章

2023年2月江西/杭州/黑龙江/深圳DAMA-CDGA/CDGP数据治理认证招生简章 DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践…

【笔记】质量保障体系

一、什么叫质量保障体系?质量保障体系,是指指贯穿研发流程进行的一系列质量活动。通过方案选型、策略决策、工具支撑、组织协同分工等,把质量活动进行系统化、标准化、流程化。其目的是保障业务质量。质量保障体系质量活动工具平台质量流程。二、紧贴业务…

【My Electronic Notes系列——正弦波振荡电路】

目录 序言: 🏆🏆人生在世,成功并非易事,他需要破茧而出的决心,他需要永不放弃的信念,他需要水滴石穿的坚持,他需要自强不息的勇气,他需要无畏无惧的凛然。要想成功&#…

每天10个前端小知识 【Day 1】

前端面试基础知识题 1. 什么是尾调用优化和尾递归? 尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。 function f(x){ return g(x); }上面代码中,函数f的最后一步是调用函数g,这…

Axios网络请求

哈喽~大家好,这篇来看看Axios网络请求。 ​文章推荐链接SpringCloud Sentinel 使用SpringCloud Sentinel 使用将Nacos注册到springboot使用以及Feign实现服务调用将Nacos注册到springboot使用以及Feign实现服务调用微服务介绍与 SpringCloud Eureka微服务介绍与 Sp…

Spark07: 宽窄依赖、Stage的划分

一、宽依赖和窄依赖 1. 窄依赖 窄依赖(Narrow Dependency):指父RDD的每个分区只被子RDD的一个分区所使用,例如map、filter等这些算子。 一个RDD,对它的父RDD只有简单的一对一的关系,也就是说,RDD的每个partition仅仅…

Python分支循环规范:if elif for while

分支与循环 条件是分支与循环中最为核心的点, 解决的问题场景是不同的问题有不同的处理逻辑。 当满足单个或者多个条件或者不满足条件进入分支和循环, 这里也就说明这个对相同问题处理执行逻辑依据具体参数动态变化, 由此产生多种可能性&…

GAMES101笔记:辐射度量学(下)

Irradiance 定义:irradiance是单位面积上的power,这个单位面积是和入射光线垂直的方向上的单位面积。如果受光表面不垂直于光线,需要投影到垂直方向上进行计算(cosθ\thetaθ)。 Irradiance Falloff 光的Intensity…

零入门容器云网络实战-8->veth pair设备介绍

在介绍veth pair之间,先看一下下面的图, 这类东西有没有见过? 如果没有见过,赶紧看看你方圆10米之内有没有? 这就是网线,最明显的特征是有两端!即,两个水晶头 一端可以链接普通的电脑&#…

【技术调研】关于仪表盘转图片推送钉钉的技术方案调研

方案1—纯后端实现 后端写定时任务,定时启动查询服务。查询出数据集结果,拼接成Table样式,再转换成图片。推送至钉钉。 优点:只需要后端开发,不涉及前端。 缺点:太定制化,不通用,样…

Dart语法学习-数据类型

一、Dart 语言对以下类型具有支持 Numbers (int, double) Strings (String) Booleans (bool) Lists (List, also known as arrays) Sets (Set) Maps (Map) Runes (Runes; often replaced by the characters API) Symbols (Symbol) The value null (Null) Dart 要求以 main 函数…

正大国际期货:什么是黄金保证金交易?黄金保证金交易包含哪些要点?

黄金保证金交易是指在黄金买卖业务中,市场参与者不需对所交易的黄金进行全额资金划拨,只需按照黄金交易总额支付一定比例的价款,作为黄金实物交收时的履约保证。黄金保证金交易根据类型不同,主要分为期货黄金保证金交易和现货黄金…

visual studio 调试增强,实现一行代码打印调用栈

如何主动打印调用栈?如果是Java、Js,那么很简单,三行就能实现。但 VisualStudio 就复杂多了。如果不下断点,那么只能在崩溃的时候被动查看。 而使用 Backward-Cpp ,只需在项目中拖入一个hpp文件,就可以主动…