热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

软考笔记(八)高级系统架构师/分析师:系统架构

目录软考官网报名通道软考架构师笔记(一):计算机系统基础软考架构师笔记(二):计算机网络基

目录

软考官网 报名通道

软考架构师笔记(一):计算机系统基础

软考架构师笔记(二):计算机网络基础与信息安全

软考架构师笔记(三):操作系统基础

软考架构师笔记(四):企业信息化与系统规划

软考架构师笔记(五):系统需求工程 需求分析

软考架构师笔记(六):数据库

软考架构师笔记(七):系统分析 系统设计

软考架构师笔记(八):系统架构

软考架构师笔记(九):软件工程与项目管理

软考架构师笔记(十):系统测试 维护 稳定性


软件架构概念

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式
架构风格定义一个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。
软件架构是项目干系人进行交流的手段,明确了对系统实现的约束条件,决定了开发和维护组织的组织结构,制约着系统的质量属性
软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础
软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量


软件架构建模

结构模型:以架构的构件、连接件和其他概念来刻画结构

框架模型:不太侧重描述结构的细节而更侧重于整体的结构

动态模型:系统的“大颗粒”的行为性质

过程模型:构建系统的步骤和过程

功能模型:由一组功能构件按层次组成,下层向上层提供服务

RUP 4+1 

用例视图(Use Cases View),最初称为场景视图,关注最终用户需求,为整个技术架构的上线文环境.通常用UML用例图和活动图描述。

逻辑视图(Logical view),主要是整个系统的抽象结构表述,关注系统提供最终用户的功能,不涉及具体的编译即输出和部署,通常在UML中用类图,交互图,时序图来表述,类似与我们采用OOA的对象模型。

开发视图(Development View),描述软件在开发环境下的静态组织,从程序实现人员的角度透视系统,也叫做实现视图(implementation view)。开发视图关注程序包,不仅包括要编写的源程序,还包括可以直接使用的第三方SDK和现成框架、类库,以及开发的系统将运行于其上的系统软件或中间件, 在UML中用组件图,包图来表述。开发视图和逻辑视图之间可能存在一定的映射关系:比如逻辑层一般会映射到多个程序包等。

物理视图(Physical view )物理视图通常也叫做部署视图(deploymentview),是从系统工程师解读系统,关注软件的物流拓扑结,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。物理视图和处理视图的关系:处理视图特别关注目标程序的动态执行情况,而物理视图重视目标程序的静态位置问题;物理视图是综合考虑软件系统和整个IT系统相互影响的架构视图。

处理视图(Process view)(进程视图) 处理视图关注系统动态运行时,主要是进程以及相关的并发、同步、通信等问题。处理视图和开发视图的关系:开发视图一般偏重程序包在编译时期的静态依赖关系,而这些程序运行起来之后会表现为对象、线程、进程,处理视图比较关注的正是这些运行时单元的交互问题,在UML中通常用活动图表述。


软件架构风格

架构设计的一个核心问题是能否达到架构级的软件复用
架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个构件有效地组织成一个完整的系统
架构风格定义了用于描述系统的术语表和一组指导构建系统的规则

Garlan和Shaw对通用软件架构风格进行了分类,他们将软件架构分为数据流风格、调用/返回风格、独立构件风格、虚拟机风格和仓库风格。
(1)数据流风格:数据流风格包括批处理序列和管道/过滤器两种风格。
(2)调用/返回风格:调用/返回风格包括主程序和子程序、数据抽象和面向对象,以及层次结构。
(3)独立构件风格:独立构件风格包括进程通信和事件驱动的系统。
(4)虚拟机风格:虚拟机风格包括解释器和基于规则的系统。
(5)仓库风格:仓库风格包括数据库系统、黑板系统和超文本系统。
(6)过程控制:闭环控制

仓库风格中构件分两种:


  • 一种是中央数据结构,保存系统的当前状态;
  • 另一种是独立构件,对中央数据存储进行操作。

黑板系统:

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

超文本:

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


层次架构风格


  • CS架构:架构是客户端和服务器架构,通过充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现。
  • BS架构:架构是浏览器和服务器架构,用户工作界面是通过浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现。


 富互联网  RIA

 HTML5, AJAX,Laszlo,Bindows,FLex,JAVA

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


基于服务的架构 SOA

面向服务的架构(Service-Oriented Architecture,SOA)是透过业务服务的概念来提供IT的各项基本应用功能,让这些服务可以自由地被排列组合,融会贯通,以便在未来能随时弹性配合新的需求而调整。
SOA架构只是实现和解决了服务模块间调用的互操作问题,为了更好地服务于企业应用,引入了企业服务总线(ESB)的应用架构。这一构架是基于消息中间件(Messaging Middleware)、智能路由和数据转换等技术实现的。

SOA的实现方式:ESB  服务总线  各种服务挂到总线上,依赖总线 完成互联互通

充当中介者角色,对接各个服务; 例如Webservice 封装遗留系统为单个服务;

特点:

松散耦合,粗粒度,标准化接口;
ESB提供了一个基于标准的松散应用耦合模式,
ESB由以下3层构成:
总线接入层:通过这一层可以使用户的各种应用接入ESB,使用ESB的各种服务。在这一层提供对多种主流应用的接入协议支持,如HTTP、JCA/J2C、NET和IBM/CICS等。同时考虑到一些客户自己定制的应用与ESB的连接,在总线接入层提供了适配器服务。
核心层:提供多种企业服务总线所需的必要服务支持,在这一层除了提供总线基本服务(如分发/订阅、队列、安全服务和仲裁服务等)外,还提供了QoS的支持(如高可用性、确保消息传输等)。微流程组合/拆分或定制
路由层:这一层是侧重在业务支持上。通过通用和标准的对象、服务模型,可以在这一层上定义可重用和基于业界标准的业务流程。

关键技术

WSDL:

WSDL就是WebService接口对应的WSDL文件,该文件通过xml格式说明如何调用,可以看作WebService的接口文档(使用说明书)。

服务实现定义: 服务和端口
服务接口定义:绑定,端口类型,消息,类型

SOAP:

SOAP,Simple Object Access Protocol,简单对象访问协议,简单的说就是用于访问网络服务的协议;它是基于XML的简易协议,可使应用程序在HTTP之上进行信息交换。
SOAP是一种网络通信协议,用于网络上、不同平台、不同语言的应用程序间的通讯。    HTTP协议+XML数据格式

SO方法的服务建模:按照实施的阶段,服务建模可以分为服务发现、服务规约和服务实现三个阶段。

(1)服务发现。采用自上而下、自下而上和中间对齐的方式,得到候选服务。
(2)服务规约。对候选服务进行分类,根据是否便于复用和组装,是否具有业务对齐性来决定是否将服务暴露。同时,需要考虑服务的信息系统特性。服务规约还包括服务编排、服务库和服务总线中间件模式的设计等过程。
(3)服务实现。根据对业务领域的理解和现有系统的分析,将服务的实现分配到相应的服务构件中,并决定服务的实现方式。具体的实现方式既可以由现有系统暴露相关功能为服务,或者重新开发相关功能提供务,也可以由合作伙伴来提供服务。无论采用哪种方式,系统分析师都需要对于关键点进行技术可行性分析。


MDA


架构描述语言ADL

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

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


特定领域软件架构 DSSA



基于架构的软件开发 ABSD

ABSD方法是架构驱动,即强调由业务、质量和功能需求的组合驱动架构设计。
使用ABSD方法,设计活动可以从项目总体功能框架明确就开始,这意味着需求获取和分析还没有完成(甚至远远没有完成),就开始了软件设计。
ABSD方法有三个基础。
第一个基础是功能的分解。在功能分解中,ABSD方法使用已有的基于模块的内聚和耦合技术;
第二个基础是通过选择架构风格来实现质量和业务需求;
第三个基础是软件模板的使用。软件模板利用了一些软件系统的结构。
ABSD方法是递归的,且迭代的每一个步骤都是清晰地定义的。因此,不管设计是否完成,架构总是清晰的,这有助于降低架构设计的随意性。
视角与视图:从不同的视角来检查,所以会有不同的视图。
用例用来捕获功能需求、特定场景来捕获质量需求。

开发过程



软件质量属性


软件建构评估


中间件技术

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

它具有规范的接口规约和显式的语境依赖。软件构件可以被独立地部署并由第三方任意地组装。


  • 负责客户机与服务器之间的连接和通信,以及客户机与应用层之间的高效率通信机制
  • 提供应用层不同服务之间的互操作机制,以及应用层与数据库之间的连接和控制机制
  • 提供多层架构的应用开发和运行的平台,以及应用开发框架,支持模块化的应用开发
  • 屏藏硬件、操作系统、网缩和数据库的差异
  • 提供应用的负载均衡和离可用性、安全机制与管理功能,以及交易管理机制,保证交易的一致性
  • 提供一组通用的服务去执行不同的功能,避免重复的工作和使应用之间可以协作

 


Web架构设计

主要涉及:

从架构来看:MVC,MVP,MWM,REST,Webservice,微服务,中台。
从缓存来看:MemCache,Redis,Squid。
从并发分流来看:集群(负载均衡)、CDN。
从数据库来看:主从库(主从复制),内存数据库,反规范化技术,NosQL,分区(分表)技术,视图与物化视图。
从持久化来看:Hibernate,Mybatis。
从分布存储来看:Hadoop,FastDFS,区块链。
从数据编码看:XML,JSON。
从Web应用服务器来看:Apache,WebSphere,Weblogic,Tomcat,JBOSS,IS。
其它:静态化,有状态与无状态,响应式Web设计。

负载均衡问题


典型应用架构


  • J2EE 分布式多层应用程序
  • .NET
  • MVC/MVP设计模式
    MVC模式,即模型一视图一控制(Model-View-Controller)模式,它实际上是一种架构模式,是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好地体现了数据层与表示层的分离。
    MCV把应用程序分为3种对象类型。
    模型:应用问题域中包含的抽象领域知识;
    视图:将应用问题域中包含的抽象领域知识呈现给用户的方法:一个模型可以用于多个视图;
    控制器:用户界面对用户输入的响应方式。
  • Web系统架构
    负载均衡:
    基于特定软件的负载均衡(HTTP重定向)(应用层)
    反向代理负载均衡(应用层)
    基于DNS的负载均衡(传输层)
    基于NAT的负载均衡(传输层)
    混合型负载均衡

    静态算法:轮转算法、加权轮转算法、源地址哈希散列算法、目标地址哈希散列算法、随机算法
    动态算法:最小连接数算法、加权最小连接数算法、加权百分比算法
  • 面向消息中间件(Message-Oriented Middleware,MOM):利用高效可靠的消息传递机制进行平台无关的数据传递,并可基于数据通信进行分布系统的集成。通过提供消息传递和消息队列模型,可在分布环境下扩展进程间的通信,并支持多种通信协议、语言、应用程序、硬件和软件平台。
  • EJB    EJB是企业级Java构件,用于开发和部署多层结构、分布式、面向对象的Java应用系统。
    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将异步处理客户请求。这适合于需要异步处理请求的场合,如订单处理,这样就能避免客户端长时间地等待一个方法调用直到返回结果。
  •   CORBA服务端构件模型中,
    (1)伺服对象(Servant):CORBA对象的真正实现,负责完成客户端请求。
    (2)对象适配器(Object Adapter):用于屏蔽ORB内核的实现细节,为服务器对象的实现者提供抽象接口,以便它们使用ORB内部的某些功能。
    (3)对象请求代理(Object Request Broker):解释调用并负责查找实现该请求的对象,将参数传给找到的对象,并调用方法返回结果。客户方不需要了解服务对象的位置、通信方式、实现、激活或存储机制。


推荐阅读
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • 本文深入解析了Java 8并发编程中的`AtomicInteger`类,详细探讨了其源码实现和应用场景。`AtomicInteger`通过硬件级别的原子操作,确保了整型变量在多线程环境下的安全性和高效性,避免了传统加锁方式带来的性能开销。文章不仅剖析了`AtomicInteger`的内部机制,还结合实际案例展示了其在并发编程中的优势和使用技巧。 ... [详细]
  • MySQL数据库安装图文教程
    本文详细介绍了MySQL数据库的安装步骤。首先,用户需要打开已下载的MySQL安装文件,例如 `mysql-5.5.40-win32.msi`,并双击运行。接下来,在安装向导中选择安装类型,通常推荐选择“典型”安装选项,以确保大多数常用功能都能被正确安装。此外,文章还提供了详细的图文说明,帮助用户顺利完成整个安装过程,确保数据库系统能够稳定运行。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 手指触控|Android电容屏幕驱动调试指南
    手指触控|Android电容屏幕驱动调试指南 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 本文详细探讨了Java事件处理机制的核心概念与实现原理,内容浅显易懂,适合初学者逐步掌握。通过具体的示例和详细的解释,读者可以深入了解Java事件模型的工作方式及其在实际开发中的应用。 ... [详细]
  • 本指南旨在帮助Swoole初学者快速掌握异步并发编程的基本概念和实践方法。通过实例演示,我们将使用Swoole PHP扩展构建一个简单的客户端与服务器模型,并实现基本的通信功能。首先,我们将从客户端的实现入手(文件名为:client.php)。 ... [详细]
  • PostgreSQL 与 MySQL 的主要差异及应用场景分析
    本文详细探讨了 PostgreSQL 和 MySQL 在架构、性能、功能以及适用场景方面的关键差异。通过对比分析,帮助读者更好地理解两种数据库系统的特性和优势,为实际应用中的选择提供参考。 ... [详细]
  • TCP三次握手过程详解与图示解析
    本文详细解析了TCP三次握手的过程,并通过图示清晰展示了各个状态的变化。同时,文章还介绍了四次挥手的图解,解释了在TIME_WAIT状态中,客户端最后一次发送的ACK包的作用和重要性。 ... [详细]
  • 动态壁纸 LiveWallPaper:让您的桌面栩栩如生(第二篇)
    在本文中,我们将继续探讨如何开发动态壁纸 LiveWallPaper,使您的桌面更加生动有趣。作为 2010 年 Google 暑期大学生博客分享大赛 Android 篇的一部分,我们将详细介绍 Ed Burnette 的《Hello, Android》第三版中的相关内容,并分享一些实用的开发技巧和经验。通过本篇文章,您将了解到如何利用 Android SDK 创建引人入胜的动态壁纸,提升用户体验。 ... [详细]
author-avatar
台湾菜文
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有