精华内容
下载资源
问答
  • Windows体系结构是分层的模块系统,主要层次硬件抽象层HAL、内核、执行体和大量的子系统集合。 子系统又分为环境子系统和保护子系统,其中环境子系统仿真不同的操作系统,保护子系统提供安全功能。 1、内核 ...

    第二节 操作系统的体系结构

    目前流行的操作系统有Windows操作系统、UNIX操作系统、Linux操作系统和Android操作系统等。

    一、Windows操作系统的体系结构

    Windows体系结构是分层的模块系统,主要层次有硬件抽象层HAL、内核、执行体和大量的子系统集合

    子系统又分为环境子系统和保护子系统,其中环境子系统仿真不同的操作系统,保护子系统提供安全功能。

    1、内核

    内核执行Windows操作系统中最基本的操作,主要提供线程调度、陷入处理和异常调度、中断处理和调度、多处理器同步、供执行体使用的基本内核对象。

    Windows操作系统的内核始终运行在核心态,代码短小紧凑,可移植性也好。通常,除了中断程序例程,正在运行的线程是不能抢先内核的。

    2、硬件抽象层

    Windows操作系统设计的一个至关重要的方面就是在多种硬件平台上的可移植性。HAL就是使这种可移植性成为可能的关键部分。HAL是一个可加载的核心态模块HAL.dll,它为运行在Windows操作系统上的硬件平台提供低级接口。

    HAL隐藏各种与硬件有关的细节

    3、执行体

    Windows的执行体是 NTOSKRNL.EXE 的上层(内核在其下层)。执行体是从用户态导出并且可以调用函数,这些函数的接口在 NTDLL.DLL 中,通过Win32API可以对它们进行访问。

    4、系统进程和系统线程

    系统进程是一种特殊类型的、只运行在核心态的“系统线程”的宿主。系统线程具有一般用户态线程的所有属性和描述表。不同点在于它们仅运行在内核态,执行加载于系统空间。

    系统线程没有用户进程地址空间,因此必须从系统内存堆中动态存储区。

    系统进程只能从内核态中调出

    二、UNIX 操作系统的体系结构

    其最里层是硬件,作为整个系统的基础。紧邻最里层的是操作系统的内核,它包括进程管理、存储器管理、设备管理、和文件管理四个资源管理功能,往外一层是系统调用接口,即操作系统与用户的接口Shell以及编译程序等;最外层是应用程序。

    1、内核层

    内核层是操作系统管理和控制中心,常驻内存。其包括两个方面的接口,一方面是内核与硬件的接口,它通常是由一组驱动程序和一些基本的例程组成;另一方面是内核和Shell接口,它由两组系统调用及命令解释程序组成。

    内核本身又可以分出两个部分,一部分是进程控制子系统,另一部分是文件子系统。

    (1)进程控制子系统,负责对四个资源中的两个资源-处理器和存储器进行管理。其功能可分为进程控制、进程通信、存储器管理和进程调度

    (2)文件子系统,负责有效管理系统中所有的设备和文件。其功能包括 文件管理、高速缓存机制、设备驱动程序

    2、系统调用层

    系统调用层介于内核层和应用层之间,是供程序员设计、应用程序开发时调用。

    UNIX系统调用包括进程管理、文件管理、终端状态等。

    3、应用层

    应用层包括各种开发工具,高级语言编译器,网络通讯处理程序等。

    所有的应用层程序都是在Shell层(命令语言解释程序)的管理和控制下为用户服务的,是面向用户的操作界面。

    三、Linux 操作系统的体系结构

    Linux系统有四个主要部分,即内核、Shell、文件系统和用户应用程序。内核、Shell和文件系统形成了基本的操作系统结构。

    1、Linux内核

    内核是操作系统的核心,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,它决定了系统的性能和稳定性。

    Linux 内核的组成: 系统调用、内存管理、进程管理、设备驱动程序、文件系统和网络管理

    2、Linux Shell

    Shell 是系统的用户界面,提供了用户和内核进行交互操作的一种接口。它接受用户输入的命令并将它送入内核去执行,是一种命令解释器。

    3、Linux 文件系统

    文件系统是文件存储在磁盘等设备上的组织方法。Linux系统能支持多种目前流行的文件系统,比如:EXT2、EXT3、FAT、FAT32、VFAT和ISO9660。

    4、Linux 应用程序

    标准的Linux系统一般都有一套称之为应用程序的程序集,包括文本编辑器、编程语言、XWindow、办公套件、Internet工具和数据库等。

    四、Android 操作系统的体系结构

    Android操作系统分为四层,从高层到底层分别是应用程序、应用架构层、系统运行层和Linux内核层。

    1、Android应用程序

    Android会同一系列核心应用程序一起发布,该应用程序包括客户端、SMS短消息程序、日历、地图、浏览器等。

    2、Android应用框架

    应用架构层为应用开发者提供了用于访问核心功能的API框架。

    应用架构层提供了各种服务和管理工具,包括应用开发所需的界面管理、数据访问、应用层的消息传递、应用包的管理、电话管理、位置管理等功能。

    3、C、C++本地库和Android运行时环境

    Android包括一些C/C++库,这些库能被Android系统中不同的组件使用。它通过Android应用程序框架为开发者提供服务,如系统C库、媒体库和SQLite库等

    Android 运行时环境(Android Runtime)提供了核心链接库(Core Libraries)和Dalvik VM虚拟系统(Dalvik Virtual Machine)。

    4、Linux 内核

    Android是基于不同版本的Linux内核开发出来的,Linux内核层包括系统层安全机制、内存管理、进程管理、网络堆栈及一系列的驱动模块,位于硬件与其他软件层之间,提供与硬件的交互

    展开全文
  • 10个常见软件体系结构模式

    万次阅读 2018-05-07 14:06:04
    根据维基百科,架构模式是在特定环境下软件体系结构常见问题的通用可重用解决方案。架构模式类似于软件设计模式,但具有更广的范围。在本文中,我将简要地解释以下10种常见架构模式及其用法,优缺点。分层模式...

    有没有想过如何设计大型企业级系统? 在开始主要软件开发之前,我们必须选择一个合适的架构来为我们提供所需的功能和质量属性。 因此,在将它们应用于我们的设计之前,我们应该了解不同的体系结构。

    什么是建筑模式?

    根据维基百科,

    架构模式是在特定环境下软件体系结构中常见问题的通用可重用解决方案。架构模式类似于软件设计模式,但具有更广的范围。

    在本文中,我将简要地解释以下10种常见架构模式及其用法,优缺点。

    1. 分层模式
    2. 客户端 - 服务器模式
    3. 主从模式
    4. 管道过滤器模式
    5. 经纪人模式
    6. 点对点模式
    7. 事件总线模式
    8. 模型 - 视图 - 控制器模式
    9. 黑板模式
    10. 解释器模式

    1.分层模式

    这种模式可以用来构建可以分解为子任务组的程序,每个子任务都处于特定的抽象层次。 每层为下一个更高层提供服务。

    一般信息系统最常见的4层如下。

    • 表示层 (也称为UI层 )
    • 应用程序层 (也称为服务层 )
    • 业务逻辑层 (也称为域层 )
    • 数据访问层 (也称为持久层 )

    用法

    • 一般桌面应用程序
    • 电子商务Web应用程序。
    分层模式

    2.客户端 - 服务器模式

    这种模式由两方组成; 一个服务器和多个客户端 。 服务器组件将向多个客户端组件提供服务。 客户端向服务器请求服务,服务器向这些客户端提供相关服务。 此外,服务器继续侦听客户端请求。

    用法

    • 在线应用程序,如电子邮件,文件共享和银行业务
    客户端 - 服务器模式

    3.主从模式

    这种模式由两方组成; 主人奴隶 。 主组件将工作分配给相同的从组件,并根据从组件返回的结果计算最终结果。

    用法

    • 在数据库复制中,主数据库被视为权威来源,并且从属数据库与其同步。
    • 在计算机系统中连接到总线的外设(主从驱动器)。
    主从模式

    4.管道过滤器模式

    这种模式可以用来构造产生和处理数据流的系统。 每个处理步骤都包含在一个过滤器组件中。 要处理的数据通过管道传递。 这些管道可用于缓冲或同步目的。

    用法

    • 编译器。 连续的过滤器执行词法分析,解析,语义分析和代码生成。
    • 生物信息学工作流程。
    管道过滤器模式

    5.经纪人模式

    这种模式用于构建具有解耦组件的分布式系统。 这些组件可以通过远程服务调用相互交互。 代理组件负责协调组件之间的通信。

    服务器将其功能(服务和特性)发布给代理。 客户向经纪人请求服务,然后经纪人将客户重定向到其注册中心的适当服务。

    用法

    经纪人模式

    6.点对点模式

    在这种模式中,单个组件被称为同级 。 同事可能既作为客户端 ,向其他同行请求服务,又作为服务器向其他同行提供服务。 对等体可以充当客户端或服务器或两者兼而有之,并且可以随着时间动态地改变其角色。

    用法

    点对点模式

    7.事件总线模式

    这种模式主要处理事件,并有四个主要组成部分; 事件源 , 事件监听器 , 通道事件总线 。 信息源将消息发布到事件总线上的特定频道。 听众订阅特定频道。 听众会收到发布到他们之前订阅的频道的消息。

    用法

    • Android开发
    • 通知服务
    事件总线模式

    8.模型 - 视图 - 控制器模式

    这种模式也称为MVC模式,将交互式应用程序分为三部分,

    1. 模型 - 包含核心功能和数据
    2. 视图 - 将信息显示给用户(可以定义多个视图)
    3. 控制器 - 处理来自用户的输入

    这样做是为了将信息的内部表示与信息呈现给用户并从用户接受的方式分开。 它将组件分离并允许有效的代码重用。

    用法

    • 主要编程语言的万维网应用程序体系结构。
    • Web框架,如DjangoRails 。
    模型 - 视图 - 控制器模式

    9.黑板模式

    这种模式对于没有确定性解决策略的问题是有用的。 黑板图案由3个主要组件组成。

    • 黑板 - 包含来自解决方案空间的对象的结构化全局内存
    • 知识源 - 具有自己表示的专用模块
    • 控制组件 - 选择,配置和执行模块。

    所有组件都可以访问黑板。 组件可能产生添加到黑板的新数据对象。 组件在黑板上查找特定类型的数据,并可能通过与现有知识源的模式匹配找到这些数据。

    用法

    • 语音识别
    • 车辆识别和跟踪
    • 蛋白质结构鉴定
    • 声纳信号解释。
    黑板模式

    10.解释器模式

    此模式用于设计解释用专用语言编写的程序的组件。 它主要指定如何评估程序行,称为用特定语言编写的句子或表达式。 基本思想是为语言的每个符号设置一个类。

    用法

    • 数据库查询语言,如SQL。
    • 用于描述通信协议的语言。
    解释器模式

    建筑模式的比较

    下面的表格总结了每种架构模式的优缺点。

    建筑模式的比较

    希望你发现这篇文章有用。

    原文:https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013

    展开全文
  • 软件体系结构表示系统的框架结构,用于从较高的层次上来描述各部分之间的关系和接口,主要包括构件、构件性质和构件之间的关系。 通过使用软件体系结构,可以有效地分析用户需求,方便系统的修改,以及减小程序构造...

    一、概述

    软件体系结构表示系统的框架结构,用于从较高的层次上来描述各部分之间的关系和接口,主要包括构件构件性质构件之间的关系

    通过使用软件体系结构,可以有效地分析用户需求,方便系统的修改,以及减小程序构造风险。

    随着软件规模不断地增大和复杂程度日益增高,系统框架架构的设计变得越来越关键。软件框架设计的核心问题是能否复用已经成型的体系结构方案。由此,产生了软件体系结构风格的概念。

    二、常见风格分类

    体系结构风格的形成是多年探索研究和工程实践的结果。一个良好和通用的体系结构风格往往是工程技术领域成熟的标志。经过多年的发展,已经总结出许多成熟的软件体系结构风格,例如:

    1. 数据流风格:批处理和管道/过滤器。
    2. 调用/返回风格:主程序/子程序、层次结构和C/S。
    3. 面向对象风格。
    4. 独立部件风格:进程通信和事件驱动。
    5. 虚拟机风格:解释器和基于规则的系统。
    6. 数据共享风格:数据库系统和黑板系统。

    三、 体系结构风格

    1.管道/过滤器 体系结构风格

    惯用模式:

    主要包括过滤器和管道两种元素。在这种结构中,构件被称为过滤器,负责对数据进行加工处理。每个过滤器都有一组输入端口和输出端口,从输入端口接收数据,经过内部加工处理之后,传送到输出端口上。数据通过相邻过滤器之间的连接件进行传输,连接件可以看作输入数据流和输出数据流之间的通路,这就是管道。

    原理图:

     

    优点:

    1. 简单性。
    2. 支持复用。
    3. 系统具有可扩展性和可进化型。
    4. 系统并发性(每个过滤器可以独立运行,不同子任务可以并行执行,提高效率)。
    5. 便于系统分析。

    缺点:

    1. 系统处理工程是批处理方式。
    2. 不适合用来设计交互式应用系统。
    3. 由于没有通用的数据传输标准,因此每个过滤器都需要解析输入数据和合成数据。
    4. 难以进行错误处理。

     

    传统的编译器就是管道/过滤器体系结构风格的一个实例。编译器由词法分析、语法分析、语义分析、中间代码生成、中间代码优化和目标代码生成几个模块组成,一个模块的输出是另一个模块的输入。源程序经过各个模块的独立处理之后,最终将产生目标程序。编译器的框架结构如图:

    2.面向对象 体系结构风格

    惯用模式:

    在面向对象体系结构中,软件工程的模块化、信息隐藏、抽象和重用原则得到了充分的体现。在这种体系结构中,数据表示和相关原语操作都被封装在抽象数据类型中。在这种风格中,对象是构件,也成为抽象数据类型的实例。对象与对象之间,通过函数调用和过程调用来进行交互。

    原理图:

    优点:

    1. 一个对象对外隐藏了自己的详细信息
    2. 对象将数据和操作封装在一起
    3. 继承和封装方法为对象服用提供了技术支持

    缺点:

    1. 如果一个对象要调用另一个对象,则必须知道它的标识和名称
    2. 会产生连锁反应

    3.事件驱动 体系结构风格

    惯用模式:

    事件驱动就是在当前系统的基础之上,根据事件声明和发展状况来驱动整个应用程序运行。

    事件驱动体系结构的基本思想是:系统对外部的行为表现可以通过它对事件的处理来实现。在这种体系结构中,构件不再直接调用过程,而是声明事件。系统其他构件的过程可以在这些事件中进行注册。当触发一个事件的时候,系统会自动调用这个事件中注册的所有过程。因此,触发一个事件会引起其他构件的过程调用。

    原理图:

    优点:

    1. 事件声明者不需要知道哪些构件会响应事
    2. 提高了软件复用能力
    3. 便于系统升级

    缺点:

    1. 构件放弃了对计算的控制权,完全由系统来决定
    2. 存在数据·传输问题

    4.分层 体系结构风格

    惯用模式:

    在分层风格中,系统将划分为一个层次结构。

    每一层都具有高度的内聚性,包含抽象程度一致的各种构件,支持信息隐藏。

    分层有助于将复杂系统划分为独立的模块,从而简化程序的设计和实现。

    通过分解,可以将系统功能划分为一些具有明确定义的层,较高层是面对特定问题,较低层具有一般性。

    每层都为上层提供服务,同时又利用了下层的逻辑功能。在分层体系结构中,每一层只对相邻层可见。层次之间的连接件是协议和过程调用。用以实现各层之间的交互。

     

    原理图:

    优点:

    1. 设计者可以将系统分解为一个增量的步骤序列从而完成复杂的业务逻辑。
    2. 每一层之多和相邻的上下两层进行交互。
    3. 只要给相邻层提供相同的接口。

    缺点:

    1. 并非所有系统都能够按照层次来进行划分。
    2. 很难找到一种合适和正确的层次划分方法。
    3. 在传输数据是,需要经过多个层次。
    4. 多层结构难以调试。

    5.C2 体系结构风格

    惯用模式:

    C2结构是一个层次网络,包括构件和连接件两种软件元素。构件和连接键都是包含顶部和底部的软件元素。构件和构件之间只能通过连接件进行连接,而连接件之间则可以直接进行连接。构件的顶部、底部分别与连接件的底部、顶部连接,连接件的顶部、底部也分别与连接件的底部、顶部连接。

    在C2体系结构中,构件之间的所有通信必须使用消息传递机制来实现。构件之间所有传递的信息可以分为两种,一种是向上层构件发出服务请求的请求消息另一种是向下层构件发出指示状态变化的通知消息。连接件负责消息的过滤、路由、广播、通信和相关处理。

    原理图:

    优点:

    1. 可以使用任何编程语言来开发构件,构件重用和替换比较容易实现
    2. 具有一定的扩展能力,可以有多种不同粒度的构件
    3. 构件不需要共享地址空间,避免了共享全局变量所造成的复杂关系
    4. 具有良好的适应性
    5. 在C2体系结构中,可以使用多个工具集和多种媒体类型,能够动态地更新系统的框架结构

    缺点:

    1. 构件和构件之间不允许直接相连
    2. 与某一个连接件相关联的构件和连接件的数目没有限制

    6.数据共享 体系结构风格

    定义:

    数据共享风格也成为仓库风格。

    在这种风格中,有两种不同类型的软件元素:一种是中央数据单元,也成为资源库,用于表示系统的当前状态;另一种是相互依赖的构件组,这些构件可以对中央数据单元实施操作。中央数据单元和构件之间可以进行信息交换,这是数据共享体系结构的技术实现基础。

    根据所使用的控制策略不同,数据共享体系结构可以分为两种类型,一种是传统的数据库,另一种是黑板

    如果由输入流中的事件来驱动系统进行信息处理,把执行结构存储到中央数据单元,则这个系统就是数据库应用系统。

    如果由中央数据单元的当前状态来驱动系统运行,则这个系统就是黑板应用系统。

    黑板是数据共享体系结构的一个特例,用以解决状态冲突并处理可能存在的不确定性知识源

    黑板常用于信号处理,如语音和模式识别,同时在自然语言处理领域中也有广泛的应用,如机器翻译和句法分析。

     

    原理图:

    一个典型的黑板系统主要包括知识源、中央控制单元、控制单元。

    优点:

    1. 便于多客户共享大量数据,而不必关心数据是何时产生的、由谁提供的及通过何种途径来提供
    2. 便于将构件作为知识源添加到系统中来

    缺点:

    1. 对共享数据结构,不同知识源要达成一致
    2. 需要同步机制和加锁机制来保证数据的完整性和一致性,增大了系统设计的复杂度

    7.解释器 体系结构风格

    惯用模式:

    解释器作为一种体系结构,主要用于构建虚拟机,用以弥合程序语义和计算机硬件之间的间隙。实际上,解释器是利用软件来创建的一种虚拟机,因此,解释器风格又被称为虚拟机风格

    原理图:

    优点:

    1. 能够提高应用程序的抑制能力和变成语言的跨平台移植能力。
    2. 实际测试工作可能费城复杂,测试代价极其昂贵,具有一定的风险性。

    缺点:

    1. 由于使用了特定了语言和自定义操作规则,因此增加了系统运行的开销。
    2. 解释器系统难以设计和测试。

    8.反馈控制环 体系结构风格

    定义:

    反馈控制环是一种特定的数据流结构。传统数据流结构是线性的,而控制连续循环过程的体系结构应该是环形的。

    反馈控制环系统主要包括以下三个部分:

    1. 过程,指操纵过程变量的相关机制。
    2. 数据元素,指连续更新的过程变量,包括输入变量、控制变量、操纵变量和相关参考值。
    3. 控制器,通过控制规则来修正变量,收集过程的实际状态和目标状态,调节变量以驱动实际状态朝目标状态前进。

     

    原理图:

    优点:

    1. 过程控制是连续的,可以利用各种构件和相关规则来设计反馈控制环系统,实现各种功能。
    2. 反馈控制环结构能够处理复杂的自适应问题,机器学习就是一个例子。

    缺点:

    9.C/S 体系结构风格

    惯用模式:

    ……

    原理图:

    优点:

    1. 客户机构件和服务器构件分别运行在不同的计算机上,有利于分布式数据的组织和处理。
    2. 构件之间的位置是相互透明的,客户机程序和服务器程序都不必考虑对方的实际存储位置。
    3. 客户机侧重数据的显示和分析,服务器则注重数据的管理。
    4. 构件之间是彼此独立和充分隔离的。
    5. 将大规模的业务逻辑分布到多个通过网络连接的低成本的计算机,降低了系统的整体开销。

    缺点:

    1. 开发成本较高。
    2. 在开发C/S结构系统时,大部分工作都都集中在客户机程序的设计上,增加了设计的复杂度。
    3. 信息内容和形式单一。
    4. 如果对C/S体系结构的系统进行升级,开发人员需要到现场来更新客户机程序,同时需要对运行环境进行重新配置,增加了维护费用。
    5. 两层C/S结构采用了单一的服务器,同时以局域网为中心,因此难以扩展到Intranet和Internet。
    6. 数据安全性不高。

    10.B/S 体系结构风格

    惯用模式:

    B/S结构是三层C/S体系结构的一种实现方式,主要包括浏览器,Web服务器和数据库服务器。B/S结构主要利用不断成熟的WWW技术,结合浏览器的多脚本语言,采用通用浏览器来实现原来需要复杂的专用软件才能实现的强大功能,节约了开发成本。

    B/S体系结构的核心是Web服务器,可以将应用程序以网页的形式存放在Web服务器上。

    当用户运行某个应用程序时,只需要在可以断的浏览器中输入响应的 URL,向 Web 服务器提出 HTTP 请求。

    当Web 服务器接收 HTTP 请求之后,会调用相关的应用程序(Servlets),同时向数据库服务器发送数据操作请求。

    数据库服务器对数据操作请求进行响应,将结果返回给Web服务器的应用程序。

    Web服务器应用程序执行业务处理逻辑,利用 HTML 来封装操作结果,通过浏览器呈现给用户。在B/S结构中,数据请求、王爷生成、数据库访问和应用程序执行全部由Web 服务器来完成。

    原理图:

    优点:

    1. 客户端只需要安装浏览器,操作简单。
    2. 运用HTTP标准协议和统一客户端软件,能够实现跨平台通信。
    3. 开发成本比较低,只需要维护Web服务器程序和中心数据库。

    缺点:

    1. 个性化程度比较低,所有客户端程序的功能都是一样的。
    2. 客户端数据处理能力比较差。
    3. 在B/S结构的系统中,数据提交一般以页面为单位,动态交互性不强,不利于在线事务处理。
    4. B/S体系结构的可扩展性比较差,系统安全性难以保障。
    5. B/S结构的应用系统查询中心数据库,其速度要远低于C/S体系结构。

    11.公共对象请求代理(CORBA)体系结构风格

    惯用模式:

    公共对象请求代理(Common Object Request Broker Architecture,CORBA)是由对象管理组织(Object Management Group,OMG)提出来的,是一套完整的对象技术规范,其核心包括标准语言、接口和协议。

    在异构分布式环境下,可以利用CORBA来实现应用程序之间的交互操作,同时,CORBA也提供了独立于开发平台的编程语言的对象重用方法。

     

    原理图:

    优点:

    1. 实现了客户端程序与服务器程序的分析。
    2. 将分布式计算模式与面向对象技术结合起来,提高了软件复用率。
    3. 提供了软件总线机制,软件总线是指一组定义的完整的接口规范。
    4. CORBA能够支持不同的编程语言和操作系统,在更大的范围内,开发人员能够相互利用已有的开发成果。

    缺点:

    12.正交 体系结构风格

    惯用模式:

    正交体系结构是一种以 垂直线索构件族 为基础的层次化结构,包括组织层线索

    在每一个组织层中,都包含具有相同抽象级别的构件。

    线索是子系统的实例,是由完成不同层次功能的构件通过相互调用而形成的,每一条线索完成系统的一部分相对独立的功能。

    在正交体系结构中,每条线索的实现与其他线索的实现无关或关联很少。在同一层次中,构件之间不存在相互调用关系。

    原理图:

    优点:

    1. 结构清晰。
    2. 便于修改和维护。
    3. 易于重用。

    缺点:

    13.MVC 体系结构风格

    惯用模式:

    模型-视图-控制器(Model-View-Controller,MVC)是一种常见的体系结构风格。MVC被广泛应用与用户交互程序的设计中。

    原理图:

    优点:

    1. 多个视图与一个模型相对应
    2. 具有良好的移植性。
    3. 系统被分割为三个独立的部分,当功能发生变化时,改变其中的一个部分就能够满足要求。

    缺点:

    1. 增加了系统设计和运行复杂性。
    2. 视图与控制器连接过于紧密,妨碍两者的独立复用。
    3. 视图访问模型的效率比较低。
    展开全文
  • HDFS体系结构常见功能

    千次阅读 2018-05-05 16:05:24
    本文主要是介绍HDFS的体系结构和常用操作,涉及到的知识点如下: HDFS的体系结构 数据上传 数据下载 HDFS的体系结构 Hadoop的生态圈,包括HDFS、Yarn、HBase都是主从结构。对于HDFS来说,它的主节点是...

    本文主要是介绍HDFS的体系结构和常用操作,涉及到的知识点如下:

    1. HDFS的体系结构
    2. 数据上传
    3. 数据下载

    HDFS的体系结构

    Hadoop的生态圈,包括HDFS、Yarn、HBase都是主从结构。对于HDFS来说,它的主节点是NameNode,从节点是DataNode,还有一个更新最新状态的SecondaryNameNode,下面我们对这几个结点做详细的解释。

    1. NameNode:名称节点

      (1)职责:

      • 管理、维护HDFS;
      • 接收客户端的请求:上传、下载、创建目录等;
      • 维护两个非常重要的文件:edits文件 –> 记录了操作日志;fsimage文件 –> 记录HDFS元信息

      (2)HDFS操作日志:edits文件

      位置:find . -name edits* (在当前目录下查找以edits打头的文件)

      ​ 最新的操作日志以edits_inprogress***开头

      记录:Edits文件保存了自最后一次检查点之后所有针对HDFS文件系统的操作,比如:增加文件、重命名文件、删除目录等等

      都是二进制

      HDFS提供了一个工具:edits viewer 日志查看器,可以将操作日志转化为XML格式来查看。命令如下:

      hdfs oev 命令将日志(二进制)输出为XML文件 -i表示输入,-o表示输出
      hdfs oev -i edits_inprogress_0000000000000000208 -o ~/a.xml

      (3)HDFS的元信息:fsimage文件

      位置:和edits文件在一起

      记录:fsimage是HDFS文件系统存于硬盘中的元数据检查点,里面记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的序列化信息(数据块的位置、冗余信息)

      也是二进制

      HDFS提供了一个工具:image viewer查看器,可以将操作日志转化为文本或者XML格式来查看

      hdfs oiv 命令将日志(二进制)输出为文本文件 -i表示输入,-o表示输出
      hdfs oiv -i fsimage_0000000000000000207 -o ~/b.txt (文本)
      hdfs oiv -i fsimage_0000000000000000207 -o ~/c.xml -p XML(xml文件)
    2. DataNode:数据结点

      数据块大小:

      • 1.x版本 64M
      • 2.x笨笨 128M

      位置:find . -name blk*(blk是block的简写)

      一般原则:数据块的冗余度一般跟数据结点个数一致,最大不要超过3。在生产环境下,至少2个数据结点

      blk_*表示数据块

      blk_*.meta表示数据块的元信息

    3. SecondaryNameNode:第二名称结点

      作用:把edits中最新的状态信息合并到fsimage文件中,即日志合并。合并原理图如下。

      SecondaryNameNode合并元信息过程

      NameNode和SecondaryNameNode在一起的原因是为了效率问题,因为两者在一起,SecondaryNameNode在合并最新的edits到fsimage中时,只需要执行cp操作即可;在合并后,把最新的fsimage上传回NameNode下的fsimage

      什么时候合并?当HDFS发出检查点(checkpoint)的时候。默认会在两种情况下发出检查点:

      ​ (1)每隔60分钟。可通过修改参数,改变时间

      ​ (2)当edits文件达到64M。可通过修改参数,改变阈值

      补充:Oracle数据库中也有检查点,如果发生检查点,会以最高优先级唤醒数据库写进程(DBWn)把内存中的脏数据写到数据文件上(持久化)

      注意:NameNode和SecondaryNameNode名字看起来差不多,但是两者并没有什么关系

    4. HDFS存在的问题:

      (1)NameNode单点故障,即一旦出现问题整个系统就瘫痪

      ​ 解决方案:Hadoop1.0中,没有解决方案。

      ​ Hadoop2.0中,使用Zooker实现Name的HA(高可用性,后面会讲到)功能。

      (2)NameNode压力过大,且内存受限,影响系统扩展

      ​ 解决方案:Hadoop1.0中,没有解决方案

      ​ Hadoop2.0中,使用NameNode的联盟实现其水平扩展

    HDFS上传

    先来一张HDFS文件上传的流程图:

    HDFS文件上传

    看完流程图就是具体的上传了,有两种方式:

    (1)命令行:

    -put                上传数据  hdfs dfs -put data.txt /input
    -copyFromLocal      上传数据  hdfs dfs -copyFromLocal data.txt /input
    -moveFromLocal      上传数据(相当于 ctrl+x 剪切)

    (2)JavaApi:以下是通过javaApi进行文件上传的代码块,以Window下的FinancialWorkStationEdu.exe文件为例(141M):

    //使用自己写流的方式来实现
    @Test
        public void testUpload1() throws Exception {
             //设置当前用户为root用户(不设置可能出现权限异常)
            //System.setProperty("HADOOP_USER_NAME","root");
    
            //构造一个输入流
            FileInputStream in = new FileInputStream("D:\\download\\chromeDownload\\FinancialWorkStationEdu.exe");
    
            //配置NameNode地址(在上一边环境变量的配置时,我们配置过它的key和value,直接复制过来即可)
            Configuration conf = new Configuration();
            conf.set("fs.defaultFS","hdfs://192.168.171.113:9000");
    
            //客户端
            FileSystem client = FileSystem.get(conf);
    
            //得到一个输出流
            FSDataOutputStream out = client.create(new Path("/input/a.exe"));
    
            //构造缓冲区
            byte[] buffer = new byte[1024];
            int len = 0;
            while((len = in.read(buffer)) > 0){
                //将读到的数据写入
                out.write(buffer,0,len);
            }
    
            out.flush();
    
            out.close();
            in.close();
        }
    
    //使用Hadoop提供的工具类来实现
    @Test
        public void testUpload2() throws Exception {
            //设置当前用户为root用户(不设置可能出现权限异常)
            //System.setProperty("HADOOP_USER_NAME","root");
    
            //构造一个输入流
            FileInputStream in = new FileInputStream("D:\\download\\chromeDownload\\FinancialWorkStationEdu.exe");
    
            //配置NameNode地址(在上一边环境变量的配置时,我们配置过它的key和value,直接复制过来即可)
            Configuration conf = new Configuration();
            conf.set("fs.defaultFS","hdfs://192.168.171.113:9000");
    
            //客户端
            FileSystem client = FileSystem.get(conf);
    
            //得到一个输出流
            FSDataOutputStream out = client.create(new Path("/input/b.exe"));
            //使用Hadoop提供的工具类来实现
            IOUtils.copyBytes(in,out,1024);
        }

    在运行上面的代码之前有两个问题要注意:

    1. 我们使用到的这些API有些是Hadoop提供的,我们需要到hadoop里面把这些jar包拷贝下来,放到项目的lib目录。我们先看下Hadoop的目录结构:

      Hadoop的目录结构

      然后我们需要把common下的lib包和hdfs下的lib拷贝下来即可。

    2. 权限配置,如果没有配置权限的话,会抛出以下异常:

      Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=cpMark, access=WRITE, inode=”/user/cpMark/input/a.exe”:root:supergroup:drwxr-xr-x

      即当前用户没有w权限

      处理这个异常,有以下几种方式:

      (1)关闭HDFS的权限检查。这个在hdfs-site.xml中我们是配置过为false,不过被我们注释没有打开,如下:

      ![HDFS权限配置](https://img-blog.csdn.net/20180505160012706?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwX01hcms=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
      

      这里我们打开就可以正常运行了。运行结果如下:

      HDFS文件上传结果

      (2)设置一个属性。把自己设置为root用户,具体方式为在我们的JavaApi前面设置用户名(上面代码注释打开即可):

       //设置当前用户为root用户
       System.setProperty("HADOOP_USER_NAME","root");

      (3) -D的使用,通过-D获取命令行上的参数。比如:-Dname=Tom -Dgender=Male,那么我们在程序中就可以取到name参数和gender参数,具体如下:

       String name = System.getProperty("name");
       String gender = System.getProperty("gender");
       System.out.println(name+"\t"+gender);

      具体操作如下,新建一个带有main入口函数的类,copy以上代码,然后使用javac编译,编译成功之后,使用java命令执行,java -Dname=Tom -Dgender=Male XXX(编译出来的class文件)即可

      (4)改变input目录的权限

       hdfs dfs -chmod 777 /input

      这样就可以执行了。

    HDFS下载

    下载的话,和上传一样,先来张流程图,然后是代码:

    HDFS文件下载

    看完流程图就是具体的上传了,有两种方式:

    (1)命令行:

    -copyToLocal   下载数据
    -get           下载数据

    (2)JavaApi:以下是通过javaApi进行文件下载的代码块,以hdfs /input目录下的a.exe,为例:

    @Test
        public void testDownload1() throws Exception {
            //设置当前用户为root用户
            System.setProperty("HADOOP_USER_NAME", "root");
    
            //配置NameNode地址(在上一边环境变量的配置时,我们配置过它的key和value,直接复制过来即可)
            Configuration conf = new Configuration();
            conf.set("fs.defaultFS", "hdfs://192.168.171.113:9000");
    
            //构造客户端
            FileSystem client = FileSystem.get(conf);
    
            //构造一个输入流
            FSDataInputStream in = client.open(new Path("/input/a.exe"));
    
            //构造一个输出流  ----> D:\temp\a.exe
            OutputStream out = new FileOutputStream("D:\\temp\\a.exe");
    
            //构造一个缓冲区
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = in.read(buffer)) > 0) {
                //读取到了数据
                out.write(buffer, 0, len);
            }
    
            out.flush();
    
            out.close();
            in.close();
        }
    
        @Test
        public void testDownload2() throws Exception {
            //设置当前用户为root用户
            System.setProperty("HADOOP_USER_NAME", "root");
    
            //配置NameNode地址(在上一边环境变量的配置时,我们配置过它的key和value,直接复制过来即可)
            Configuration conf = new Configuration();
            conf.set("fs.defaultFS", "hdfs://192.168.171.113:9000");
    
            //构造客户端
            FileSystem client = FileSystem.get(conf);
    
            //构造一个输入流
            FSDataInputStream in = client.open(new Path("/input/a.exe"));
    
            //构造一个输出流  ----> D:\temp\a.exe
            OutputStream out = new FileOutputStream("D:\\temp\\b.exe");
    
            //使用工具类简化程序
            IOUtils.copyBytes(in, out, 1024);
        }

    以上就是HDFS常见功能的介绍,一些其它的API,比如创建目录、查看目录及文件信息、查找某个文件在HDFS集群的位置等,只是API不同而已,大家可以自己去熟悉。

    下一篇我会介绍HDFS的高级功能:回收站、快照、配额等。

    展开全文
  • 文章目录计算机体系结构体系结构是什么计算机系统由几部分组成win32和win64区别存储层次缓存(Cache)分级源码补码反码,源码为什么补码反码流水线调度效率、五级流水线加速达到5吗计算机子系统可以不要吗 ...
  • 1面向方面软件体系结构相关概念 面向方面软件体系结构涉及诸多概念,以下将分别介绍。软件体系结构在软件工程领域有着广泛的影响,但当前仍未形成一个统一的、标准的定义。目前国内外普遍认可的看法是软件体系结构...
  • 常见的计算机体系结构

    千次阅读 2007-05-24 22:02:00
    程序指令存储和数据存储分开,可以使指令和数据不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。 哈佛结构的微处理器通常具有较高的执行效率。其程序指令
  • 软件体系结构基础

    千次阅读 2020-12-27 12:57:33
    此部分选择代表性的结构进行总结。体系结构的模式选择设计模式做阐述,风格选择典型的三种体系结构风格做阐述,框架选择MVC、J2EE、PCMEF与PCBMER框架做阐述,同时也对特定领域的软件体系结构的类属模型、参考模型...
  • 第三章 软件体系结构风格 一、基本概念 1. 软件体系结构设计的一个核心问题是能否使用重复的体系结构模式,即能够达到体系结构级的复用。 2. 软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。...
  • 知识体系结构

    千次阅读 2019-10-20 11:13:14
    知识体系结构
  • 软件体系结构

    千次阅读 2014-10-30 20:28:50
    软件体系结构笔记 L1.pdf 课程简介源起... 现状系统分析员遇到的困境解决之道 基于软件体系结构的开发 示意图软件体系结构的生命周期 体系结构的非形式化描述 通常使用自然语言描述概念和...
  • 路由器体系结构

    千次阅读 2018-05-28 10:14:42
    点击打开链接路由器体系结构:输入端口把一条输入的物理链路与路由器连接的物理层功能与位于入链路远端的数据链路层交互的数据链路层功能在输入端口完成查找功能 。通过查询转发表决定路由器的输出端口控制分组从...
  • CS/BS架构==黄色标注部分重点注意==CS结构BS结构CS结构与BS结构比较==问题可以在评论指正,欢迎讨论,谢谢大家!!== 黄色标注部分重点注意 CS结构        •CS(Client/Server...
  • 常见软件体系结构:B/S 、C/S

    千次阅读 2015-03-13 11:54:38
    l C/S结构即客户端/服务器(Client/Server),例如QQ; l 需要编写服务器端程序,以及客户端程序,例如我们安装的就是QQ的客户端程序; l 缺点:软件更新时需要同时更新客户端和服务器端两端,比较麻烦; l ...
  • 冯诺依曼计算机体系结构

    万次阅读 2019-02-22 14:30:52
    当前计算机主要是基于冯诺依曼体系结构设计的,下面就简单分析一下冯诺依曼体系结构的计算机是如何工作的,首先下面的图就是冯诺依曼体系结构图。 主要由五大部件组成: 1.存储器用来存放数据和程序 2.运算器主要...
  • ARM体系结构

    千次阅读 2018-08-11 10:52:55
    ARM体系结构 首先,ARM体系结构是ARM公司设计,并授权其合作伙伴生产的占嵌入式市场份额最大的一种RISC(精简指令集)的CPU,它具有高性能、低功耗、低成本的特点。 ARM体系结构从工作模式、工作状态,指令集几个...
  • 《软件体系结构》 第四章 软件体系结构描述

    万次阅读 多人点赞 2018-07-03 22:46:07
    一、软件体系结构的描述方法  1、图形表达工具:采用矩形框和向线段组合,矩形框代表抽象构件、向线段代表连接件。  2、模块内连接语言:module interconnection language MIL  3、基于软构件的系统描述...
  • 冯诺依曼体系结构、哈佛体系结构

    千次阅读 2015-10-15 12:43:27
    冯诺依曼体系结构、哈佛体系结构与改进型哈佛结构之间的区别 1、冯·诺依曼结构 冯·诺依曼结构又称作普林斯顿体系结构(Princetionarchitecture)。 1945年,冯·诺依曼首先提出了“存储程序”的概念和二进制...
  • 存储器体系结构

    千次阅读 2015-04-05 13:29:00
    对于一个刚开始搞超算的本科生来说,要是不懂存储器的体系结构,那当真是说不过去,今天详细地说一下计算机的存储结构吧。 存储技术随机访问存储器 随机访问寄存器(RAM)分为两类:静态的和动态的。静态(SRAM)比...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 160,186
精华内容 64,074
关键字:

常见的结构体系有哪些