Intro
云计算是指IT资源的交付和使用模式,通过网络以按需、易扩展的方式获得所需的资源(硬件、平台、软件)。典型的云计算提供商往往提供通用的网络业务应用,可以通过浏览器等软件或者其他Web服务来访问,而软件和数据都存储在远程数据中心的服务器上。用户通过计算机、手机等方式接入数据中心,按自己的需求进行运算。
提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取、按需使用、随时扩展、按使用付费。
特点
- 资源池弹性可扩张
- 按需提供资源服务
- 网络化的资源接入
- 虚拟化
- 提高可靠性和安全性
分类
按技术路线:
资源整合型
这种类型的云计算系统在技术实现方面大多体现为集群架构,通过将大量节点的计算资源和存储资源整合后输出。这类系统通常能实现跨节点弹性化的资源池构建,核心技术为分布式计算和存储技术。MPI、Hadoop、HPCC、Storm等都可以被分类为资源整合型云计算系统。
资源切分型
这种类型最为典型的就是虚拟化系统,这类云计算系统通过系统虚拟化实现对单个服务器资源的弹性化切分,从而有效地利用服务器资源,其核心技术为虚拟化技术。KVM、VMware都是这类技术的代表。
按服务对象(部署模式):
公有云
指服务对象是面向公众的云计算服务,公有云对云计算系统的稳定性、安全性和并发服务能力有更高的要求。
私有云
指主要服务于某一组织内部的云计算服务,其服务并不向公众开放,如企业、政府内部的云服务。
混合云
是把公有云和私有云结合在一起的方式。在这个模式中,用户通常将非企业关键信息外包,并在公有云上处理,而掌握企业关键服务及数据的内容则放在私有云上处理。
社区云
是公有云范畴内的一个组成部分。它由众多利益相仿的组织掌控及使用,其目的是实现云计算的一些优势,例如特定安全要求、共同宗旨等。社区成员共同使用云数据及应用程序。
按资源封装层次:
基础设施即服务(Infrastructure-as-a-Service,IaaS):把单纯的计算和存储资源不经封装地直接通过网络以服务的形式提供的用户使用。
IaaS主要由计算机硬件、网络、存储设备、平台虚拟化环境、效用计费方法、服务级别协议等组成。
平台即服务(Platform-as-a-Service,PaaS):计算和存储资源经封装后,以某种接口和协议的形式提供给用户调用,资源的使用者不再直接面对底层资源。
PaaS是一种分布式平台服务,为用户提供一个包括应用设计、应用开发、应用测试及应用托管的完整的计算机平台。
PaaS的主要用户是开发人员,PaaS平台的种类目前较少,比较著名的有
lForce.com
lGoogle App Engine
lWindows Azure
Cloud Foundry
核心技术:REST技术,多租户技术,并行计算技术,应用服务器,分布式缓存
软件即服务(Software-as-a-Service,SaaS):将计算和存储资源封装为用户可以直接使用的应用并通过网络提供给用户,SaaS面向的服务对象为最终用户,用户只是对软件功能进行使用,无需了解任何云计算系统的内部结构,也不需要用户具有专业的技术开发能力。
契机
云计算是分布式计算、并行计算、效用计算、虚拟化、网络存储、负载均衡、热备份冗余等传统计算机和网络技术发展融合的产物,更是SaaS、SOA等技术混合演进的结果,下图所示的五大契机更是直接促进了云计算的诞生。
IaaS
IaaS所提供的虚拟机通常都会带有一个可以连上网络的操作系统(如Windows、Linux)。用户通过网络可以登录并操作虚拟机并按照虚拟机的资源配置和使用时间来付费。
由于这些提供给用户的功能都是最基础的计算机功能,所以这种服务形式也就被形象地称为基础设施即服务IaaS服务的基本功能。
IaaS层一般都具有以下基本功能:
用户管理
用户管理主要是管理用户账号、用户的环境配置、用户的使用计费等。
任务管理
任务管理主要管理用户请求资源的任务,包括任务的调度、任务的执行、任务的生命周期管理等。任务管理的目的是保证所有的任务都能快速高效地完成。
资源管理(核心)
主要包括:
资源抽象
据业务逻辑和基础设施层服务接口的需要,基础设施层资源的抽象往往是具有多个层次的。目前业界提出的资源模型中就出现了虚拟机(Virtual Machine)、集群(Cluster)、虚拟数据中心(Virtual Data Center)和云(Cloud)等若干层次分明的资源抽象。资源抽象为上层资源管理逻辑定义了操作的对象和粒度,是构建基础设施层的基础。
资源监控
资源部署
资源分发
资源调度(等)
安全管理
整体架构
基础设施平台分为三层:
基础设施资源池
基础设施资源池是实现融合基础设施结构的关键要素,是共享服务器、存储和网络的集合,从而能够更快捷地支持业务需求的变化。实现基础设施资源池的一种有效方法就是服务器虚拟化,它是一种可以在一台物理服务器上运行多个逻辑服务器的技术,每个逻辑服务器被称为一个虚拟机。虚拟化技术是IaaS层的核心技术,主要实现了对底层物理资源的抽象,使其成为一个个可以被灵活生成、调度、管理的基础资源单位。
资源管理平台
业务服务管理平台
服务器虚拟化技术
IaaS具体管理的物理资源可以分为三大类:计算资源(CPU、内存)、存储资源和网络资源。
从计算资源角度来讲,IaaS软件管理的最小的物理单元为一个物理服务器。根据需求,可以在服务器上创建多个虚拟机(如右图所示)。若干配置相同的物理服务器会组成一个集群,要求配置相同的主要原因是因为需要支持虚拟机动态迁移。通常一些集群还会组成更大规模的区域(Zone)。
根据虚拟化层实现方式的不同,服务器虚拟化主要有两种类型:
寄宿虚拟化:虚拟机监视器(Virtual Machine Monitor,VMM)是运行在宿主操作系统之上的应用程序,利用宿主操作系统的功能来实现硬件资源的抽象和虚拟机的管理。这种模式的虚拟化实现起来比较容易,但由于虚拟机对资源的管理需要通过宿主操作系统来完成,因此其性能通常比较低。
原生虚拟化:在原生虚拟化中,直接运行在硬件之上的不是宿主操作系统,而是虚拟化平台(Hypervisor)。虚拟机运行在虚拟化平台上,虚拟化平台提供指令集和设备接口,以提供对虚拟机的支持。这种实现通常具有较好的性能,但是实现起来更为复杂。
关键特性
多实例
在一个物理服务器上可以运行多个虚拟服务器,即可以支持多个客户操作系统
隔离性
一个虚拟机与其他虚拟机完全隔离,就如同几个独立的物理服务器一样。
封装性
服务器虚拟化将物理机的硬件封装为标准化的虚拟硬件设备,保证兼容性。
高性能
服务器虚拟化的高性能是指虚拟机监视器的开销要被控制在可承受的范围之内。
核心技术
CPU虚拟化
CPU虚拟化技术把物理CPU抽象成虚拟CPU,**任意时刻一个物理CPU只能运行一个虚拟CPU的指令。每个客户操作系统可以使用一个或多个虚拟CPU。**虚拟CPU的运行相互隔离,互不影响。
在纯软件的CPU虚拟化中,有全虚拟化和半虚拟化两种不同的软件方案。
全虚拟化是采用二进制动态翻译技术(Dynamic Binary Translation)来解决客户操作系统的特权指令问题。
半虚拟化是通过修改客户操作系统来解决虚拟机执行特权指令的问题,即将所有敏感指令替换为对底层虚拟化平台的超级调用。
内存虚拟化
内存虚拟化技术把物理机的真实物理内存统一管理,包装成多个虚拟的物理内存分别供若干个虚拟机使用,使得每个虚拟机拥有各自独立的内存空间。
在内存虚拟化中存在着逻辑内存、“物理”内存和机器内存三种内存类型,这三种内存的地址空间被称为逻辑地址、“物理”地址和机器地址。在内存虚拟化中,逻辑内存与机器内存之间的映射关系是由内存虚拟化管理单元来负责的。
设备与I/O虚拟化
设备与I/O虚拟化技术对物理机的真实设备进行统一管理,包装成多个虚拟设备给若干个虚拟机使用,响应每个虚拟机的设备访问请求和I/O请求。目前,主流的设备与I/O虚拟化都是通过软件的方式实现的。虚拟化平台作为在共享硬件与虚拟机之间的平台,为设备与I/O的管理提供了便利,也为虚拟机提供了丰富的虚拟设备功能。在I/O设备中有一种比较特殊的设备—网卡。网卡除了和一般的I/O设备一样作为虚拟机的共享设备外,还要解决虚拟机与外部网络或者虚拟机相互之间的通信问题。
网卡虚拟化技术主要分为两类:虚拟网卡技术和虚拟网桥技术。
虚拟网卡是指虚拟机中的网卡,是由模拟器通过软件的方法模拟出来的;
虚拟网桥是指利用软件方法实现的网桥,其作用是在一台服务器中,使多块共享一块物理网卡的虚拟网卡对外表现为多块独立的网卡。
网络虚拟化
网络虚拟化是将多个硬件或软件网络资源及相关的网络功能集成到一个可用软件中统一管控的过程,并且对于网络应用而言,该网络环境的实现方式是透明的。该网络环境称为虚拟网络,形成该虚拟网络的过程称为网络虚拟化。
假如原本的物理机只有一个网卡,那么它有一个MAC地址,并且可以分配一个IP地址,其他机器就可以通过IP地址访问这个物理主机。当创建多个虚拟机以后,每个虚拟机都需要有独立的网络配置,以便它们可以像物理机一样处理各种网络连接。但是这个时候物理机上依然只有一个网卡,多个虚拟机通过这一个物理网卡都能进行顺畅的网络连接的过程即为网络虚拟化
网络虚拟化一般是指虚拟专用网。虚拟专用网对网络连接进行了抽象,远程用户可以像物理连接在组织内部网络的用户一样来访问该网络。 虚拟专用网络是通过一个公用网络建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定隧道。使用这条隧道可以对数据进行几倍加密达到安全使用互联网的目的。虚拟专用网可以保护网络环境,使用户能够快捷、安全地访问组织内部的网络。
实时迁移技术
实时迁移(Live Migration)技术是在虚拟机运行过程中,将整个虚拟机的运行状态完整、快速地从原来所在的宿主机硬件平台迁移到新的宿主机硬件平台上,并且整个迁移过程是平滑的,用户几乎不会察觉到任何差异。
实时迁移需要虚拟机监视器的协助,即通过源主机和目标主机上虚拟机监视器的相互配合,来完成客户操作系统的内存和其他状态信息的拷贝。
PaaS
平台层的功能以服务的形式提供给用户,可以作为应用开发测试和运行管理的环境,亦平台即服务(Platform as a Service,PaaS)。平台即服务是云计算平台层的外在表现形式,是云计算平台提供的一类重要的功能集合。
PaaS将“共享”扩展到更大的范围。与基础设施层所共享的对象不同,PaaS所共享的对象是应用运行所需的资源和基础功能。
Cloud Foundry
Cloud Foundry是VMware推出的业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。同时,它本身是一个基于Ruby on Rails的由多个相对独立的子系统通过消息机制组成的分布式系统,使平台在各层级都可水平扩展,既能在大型数据中心里运行,也能在一台计算机中运行,二者使用相同的代码库。
作为新一代云应用平台,Cloud Foundry专为私有云计算环境、企业级数据中心和公有云服务提供商所打造。
Hadoop
Hadoop可以为大数据应用提供一个可编程的、经济的、可伸缩的平台。这个分布式系统由分布式文件存储系统(HDFS)以及计算框架(MapReduce)组成。Hadoop是一个开源项目,能为大量数据集提供批量数据处理能力。Hadoop的设计可以容忍软硬件的不可靠,并且为应用开发者提供一个便于开发分布式应用的平台。Hadoop使用没有特殊硬件或特殊网络基础设施的普通的服务器群来形成一个逻辑上可存储大量数据、进行并发计算的集群,这个集群可以被很多团体和个人共享。
作为一个顶级项目,Hadoop项目包含许多组件子项目,其中最主要的两个子项目分别为Hadoop分布式文件系统(HDFS)和分布式并行计算框架MapReduce。这两个子项目是对Google特有的GFS和MapReduce的直接实现,它们是一对相互独立而又互补的技术。
HDFS
HDFS是一个可以存储极大数据集的文件系统,它是通过向外扩展方式构建的主机集群。它有着独特的设计和性能特点,特别是,HDFS以时延为代价对吞吐量进行了优化,并且通过副本代替物理冗余达到了高可靠性。
HDFS(Hadoop Distributed File System)是一个分布式文件系统,HDFS提出了“移动计算能力比移动数据更廉价”的设计理念。
HDFS是一种主/从模式的系统结构,主服务器,即图中的命名节点(NameNode),管理文件系统命名空间和客户端访问,具体文件系统命名空间操作包括“打开”“关闭”“重命名”等,并负责数据块到数据节点之间的映射。
HDFS同时给应用程序提供接口以保证处理过程尽量靠近数据的位置,减少中间数据传输的开销。
HDFS的命名空间存放在命名节点上,为了保证访问效率,命名节点在内存中保存整个文件系统的命名空间和文件的块映射图。
HDFS提出了数据均衡方案,如果某个数据节点上的空闲空间低于特定的临界点,那么就会启动一个计划自动地将数据从一个数据节点迁移到空闲的数据节点上。
MapReduce
MapReduce是一个数据处理模式,它规范了数据在两个处理阶段(Map和Reduce)的输入和输出,并将其应用于任意规模的大数据集。MapReduce与HDFS紧密结合,确保在任何情况下,MapReduce任务都能直接在存储所需数据的HDFS节点上运行。
SaaS
SaaS平台是基于IaaS和PaaS平台之上的。SaaS平台主要是为SaaS应用提供通用的运行环境或系统部件,使SaaS软件提供商能够专注于客户所需业务的开发。
一般来说,SaaS应用架构可以有四种类型:
定制开发
定制开发是一种最简单的提供SaaS服务的类型。这种模型下,SaaS提供商为每个客户定制一套软件,并为其部署。每个客户使用一个独立的数据库实例和应用服务器实例。
可配置
可配置类型通过不同的配置满足不同客户的需求,而不需要为每个客户进行特定定制,以降低定制开发的成本。
多租户架构
多租户架构通过运行一个应用实例,为不同租户提供服务,并且通过可配置的元数据,为不同用租户提供不同的功能和用户体验。
可伸缩性的多租户架构
可伸缩性的多租户架构通过多个运行实例来分担大量用户的访问,从而可以让应用实现近似无限的水平扩展。
这四种类型由是否支持可定制、可扩展和多租户三个方面的不同组合而决定。一般而言,同时支持三个方面表明应用的灵活性和可用性更强,因而更成熟。所以,这四种架构也被称为SaaS平台四级成熟度模型。每一级都比前一级增加三种特性中的一种。
虚拟化技术
虚拟化技术和并行计算、分布式计算、网格计算等的发展促进了云计算技术的产生和发展,通过云计算技术,我们将大量的计算机资源组成资源池来创建高度虚拟化的资源提供给用户,即云计算技术解决方案依靠并利用虚拟化提供服务。
虚拟化技术主要应用在基础设施即服务的服务模式(IaaS)中,大多资源都可以通过虚拟化技术对其进行统一管理。
现代计算机系统被分为多个自下而上的层次。从下到上依次是裸机(底层硬件)、操作系统,操作系统提供应用程序编程接口及运行在操作系统之上的各种各样的应用程序。 虚拟化技术可以在这些不同层次之间建立虚拟化层,向上提供与真实层次相同或相近的功能,向下只需知道下层的抽象接口,不需要知道下层的具体实现。虚拟化层的引入,必然给系统带来一定的性能损耗,构建、维护虚拟化层也会增加一定的费用。
分类
虚拟化类型 | 虚拟化出的目标对象 | 所处位置 | 实例 |
---|---|---|---|
指令集架构级虚拟化 | 指令集 | 指令集架构级 | Bochs、VLIW |
硬件抽象层虚拟化 | 计算机的各种硬件 | 应用层 | VMWare、Virtual PC、Xen、KVM |
操作系统层虚拟化 | 操作系统 | 本地操作系统内核 | Virtual Server、Zone、Virtuozzo |
编程语言层上的虚拟化 | 应用层的部分功能 | 应用层 | JVM、CLR |
库函数层的虚拟化 | 应用级库函数的接口 | 应用层 | Wine |
指令集架构级虚拟化
指令集架构级虚拟化是通过纯软件方法,模拟出与实际运行的应用程序(或操作系统)所不同的指令集去执行,采用这种方法构造的虚拟机一般称为模拟器(Emulator)。模拟器是将虚拟平台上的指令翻译成本地指令集,然后在实际的硬件上执行。其是、具有、当前比较典型的模拟器系统有Bochs、VLIW等。
硬件抽象层虚拟化
硬件抽象层虚拟化是指将虚拟资源映射到物理资源,并在虚拟机的运算中使用实实在在的硬件。即使用软件来虚拟一台标准计算机的硬件配置,如CPU、内存、硬盘、声卡、显卡、光驱等,成为一台虚拟的裸机。
- 高度的隔离性
- 可以支持与宿主机不同的操作系统及应用程序
- 易于维护及风险低
操作系统层虚拟化
操作系统层虚拟化是指通过划分一个宿主操作系统的特定部分,产生一个个隔离的操作执行环境。操作系统层的虚拟化是操作系统内核直接提供的虚拟化,虚拟出的操作系统之间共享底层宿主操作系统内核和底层的硬件资源。
与硬件虚拟化区别:
- 操作系统虚拟化是以原系统为模板,虚拟出的是原系统的副本,而硬件虚拟化虚拟的是硬件环境,然后真实地安装系统。
- 操作系统虚拟化虚拟出的系统只能是物理操作系统的副本,而硬件虚拟化虚拟出的系统可以为不同的系统。
- 虚拟出的系统间关系不同,操作系统虚拟化虚拟的多个系统有较强的联系。
- 性能损耗不同,操作系统虚拟化虚拟出的系统都是虚拟的,性能损耗低,而硬件虚拟化是在硬件虚拟层上实实在在安装的操作系统,性能损耗高。
系统虚拟化
系统虚拟化是指在一台物理计算机系统上虚拟出一台或多台虚拟计算机系统。
优点:
硬件无关性
虚拟机与底层硬件之间是虚拟化层,其与底层硬件之间并没有直接的联系。所以只要另一台计算机提供相同的虚拟硬件抽象层,一个虚拟机就可以无缝地进行迁移。
隔离性
使用虚拟机,应用软件可以独立地在虚拟机上运行,不受其他虚拟机的影响。即使其他的虚拟机崩溃,也可以正常运行。
多实例
在一台物理机上可以运行多台虚拟机,而一台虚拟机上又可以安装多个操作系统。
特权功能
虚拟化层拥有更高的特权体现在:虚拟化层中添加的功能不需要了解客户机的具体语义,实现起来更加容易,并且添加的功能具有较高的特权级,不能被客户机绕过。
服务器虚拟化
系统虚拟化的最大价值在于服务器虚拟化。服务器虚拟化是将系统虚拟化技术应用于服务器上,将一台或多台服务器虚拟化为若干台服务器使用。
分类
- 将一台服务器虚拟成多台服务器,即将一台物理服务器分割成多个相互独立、互不干扰的虚拟环境;
- 服务器整合,就是多个独立的物理服务器虚拟为一个逻辑服务器,使多台服务器相互协作,处理同一个业务;
- 服务器先整合、再切分,就是将多台物理服务器虚拟成一台逻辑服务器,然后再将其划分为多个虚拟环境,即多个业务在多台虚拟服务器上运行。
所需技术
- CPU虚拟化
- 内存虚拟化
- 设备与I/O虚拟化
- 网络虚拟化
桌面虚拟化
桌面虚拟化依赖于服务器虚拟化,直观上来说就是将计算机的桌面进行虚拟化,是将计算机的桌面与其使用的终端设备相分离。
桌面虚拟化为用户提供部署在云端的远程计算机桌面环境,用户可以使用不同的终端设备,通过网络来访问该桌面环境,即在虚拟桌面环境服务器上运行用户所需要的操作系统和应用软件。
优势
更灵活的访问和使用
更低的用户终端配置
更便于集中管控终端桌面
更高的数据安全性
更低的成本
解决方案
基于VDI的虚拟桌面解决方案
是基于服务器虚拟化的,拥有服务器虚拟化的所有优点。其原理是在远程数据中心的服务器上安装虚拟机并在其中部署用户所需要的操作系统及操作系统上的各种应用,此时虚拟桌面就是虚拟机上的操作系统及其上的各种应用。
基于SBC的虚拟桌面解决方案
原理是在数据中心内的物理机上直接安装、运行操作系统和应用软件,此时的桌面就是服务器上的物理桌面。
项目 | VDI | SBC |
---|---|---|
服务器性能要求 | 高,需要能支持服务器虚拟化软件的运行 | 低,只要能部署操作系统及应用软件 |
用户支持扩展性 | 低,与服务器上能同时承载的虚拟机个数有关 | 高,与服务器上能同时支持的应用软件执行实例有关 |
方案实施复杂性 | 高,需要在安装和管理服务器虚拟化软件的前提下提供服务 | 低,只需要以传统方式安装和部署应用软件就可提供服务 |
桌面交付兼容性 | 高,支持Linux桌面、Windows桌面等桌面上的应用 | 低,只支持Windows上的应用 |
桌面安全隔离性 | 高,依赖于虚拟机之间的安全隔离性 | 低,依赖于Windows操作系统进程之间的安全隔离性 |
桌面性能隔离性 | 高,依赖于虚拟机之间的性能隔离性 | 低,依赖于Windows操作系统进程之间的性能隔离性 |
终端应用程序兼容性 | 无,每一个桌面都是一个独立的工作站 | 有,依赖于操作系统的版本 |
提供服务的性能 | 高,在一个刀片上只有一个用户或少数几个用户 | 低,在一个刀片上的用户数相对较多 |
云计算平台
Amazon AWS
Amazon Web Services(AWS)是Amazon Web服务的总称。Amazon Web Services共包括了12个门类共33种云计算产品与服务。通过AWS的IT基础设施层服务和丰富的平台层服务,用户可以在Amazon公司的云计算平台上构建各种企业级应用和个人应用。
Google GAE
2008年Google公司推出了**Google AppEngine(GAE)**Web运行平台,使用户的业务系统能够运行在Google分布式基础设施上。GAE平台具有易用性、可伸缩性、低成本的特点。另外,Google公司还提供了丰富的云端应用,如Gmail、Google Docs等。Gmail是一个电子邮箱的SaaS平台,Google Docs是一个界面类似于微软Office产品的SaaS平台。
Microsoft Azure
Windows Azure是Microsoft云平台上的操作系统。Microsoft在云计算的目标不仅仅是提供一个云计算操作系统,而是为开发者提供一个PaaS平台。通常Microsoft Azure是指Mircrosof的Azure服务平台,Windows Azure是指Microsoft的Azure云计算操作系统。
云存储
云存储(Cloud Storage)的概念与云计算类似,它是指通过集群应用、网络技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。
用户使用云存储,并不是使用某一个存储设备,而是使用整个云存储系统带来的一种数据访问服务。云存储的核心是应用软件与存储设备相结合,通过应用软件来实现存储设备向存储服务的转变,是一个以数据存储和管理为核心的云计算系统。
当云计算系统运算和处理的核心是大量数据的存储和管理时,云计算系统中就需要配置大量的存储设备,那么云计算系统就转变成为一个云存储系统,所以云存储是一个以数据存储和管理为核心的云计算系统。
云存储架构
紧耦合对称(TCS)架构
传统的存储系统利用紧耦合对称架构,这种架构的设计旨在解决HPC(高性能计算、超级运算)问题,现在其正在向外扩展成为云存储,从而满足快速呈现的市场需求。
松耦合非对称(LCA)架构
新的存储系统已经采用了松弛耦合非对称架构,集中元数据和控制操作,这种架构并不非常适合高性能HPC,但是这种设计旨在解决云部署的大容量存储需求。
云存储类型
块存储
块存储会把单笔的数据写到不同的硬盘,借以得到较大的单笔读写带宽,适合用在数据库或者需要单笔数据快速读写的应用。它的优点是对单笔数据读写很快,缺点是成本较高,并且无法解决真正海量文件的存储。
- DAS是直接连接于主机服务器的一种储存方式,每一台主机服务器有独立的存储设备,每台主机服务器的存储设备无法互通,需要跨主机存取资料时,必须经过相对复杂的设定,是一种应用较为早的技术实现。
- SAN是一种用高速(光纤)网络连接专业主机服务器的一种储存方式,此系统会位于主机群的后端,它使用高速I/O 连接方式,如SCSI、ESCON 及Fibre-Channels。SAN特点是代价高、性能好。
文件存储
文件存储是基于文件级别的存储,它是把一个文件放在一个硬盘上,即使文件太大拆分时,也放在同一个硬盘上。它的缺点是对单一文件的读写会受到单一硬盘效能的限制,优点是对一个多文件、多人使用的系统,总带宽可以随着存储节点的增加而扩展,它的架构可以无限制地扩容,并且成本低廉。
对象存储
与文件系统不同,对象存储系统并非将文件组织成一个目录层次结构,而是在一个扁平化的容器组织中存储文件(在Amazon的S3系统中被称作“桶”),并使用唯一的ID(在S3中被称作“关键字”)来检索它们。其结果是对象存储系统相比文件系统需要更少的元数据来存储和访问文件,并且它们还减少了因存储元数据而产生的管理文件元数据的开销。
存储虚拟化
- 基于主机的虚拟化存储的实现,其核心技术是通过增加一个运行在操作系统下的逻辑卷管理软件将磁盘上的物理块号映射成逻辑卷号,并以此实现把多个物理磁盘阵列映射成一个统一的虚拟的逻辑存储空间(逻辑块),实现存储虚拟化的控制和管理。
- 基于存储设备虚拟化技术依赖于提供相关功能的存储设备的阵列控制器模块,常见于高端存储设备,其主要应用针对异构的SAN存储构架。
- 基于存储网络虚拟化的技术的核心是在存储区域网中增加虚拟化引擎实现存储资源的集中管理,其具体实施一般是通过具有虚拟化支持能力的路由器或交换机实现。在此基础上,存储网络虚拟化又可以分为带内虚拟化与带外虚拟化两类。
实现层面 | 主 机 | 网 络 | 设 备 |
---|---|---|---|
优点 | 支持异构的存储系统;不占用磁盘控制器资源 | 与主机无关,不占用主机资源;能够支持异构主机、异构存储设备;对不同存储设备构建统一管理平台,可扩展性好 | 与主机无关,不占用主机资源;数据管理功能丰富;技术成熟度高 |
缺点 | 占用主机资源,降低应用性能;存在操作系统和应用的兼容性问题;主机数量越多,管理成本越高 | 占用交换机资源;面临带内、带外的选择;存储设备兼容性需要严格验证;原有的磁盘阵列的高级存储功能将不能使用 | 受制于存储控制器接口资源,虚拟化能力较弱;异构厂家存储设备的高级存储功能将不能使用 |
主要用途 | 使服务器的存储空间可以跨越多个异构磁盘阵列,常用于在不同磁盘阵列之间做数据镜像保护 | 异构存储系统整合和统一数据管理(灾备) | 异构存储系统整合和统一数据管理(灾备) |
适用场景 | 主机已采用SF卷管理,需要新接多台存储设备;存储系统中包含异构阵列设备;业务持续能力与数据吞吐要求较高 | 系统包括不同品牌和型号的主机与存储设备;对数据无缝迁移及数据格式转换有较高时间性保证 | 系统中包括自带虚拟化功能的高端存储设备与若干需要利旧的中低端存储 |
不适用场景 | 主机数量大,采用SF会涉及高昂的费用,待迁入系统数据量过大,如果只能采取存储级迁移方式,数据格式转换将耗费大量的时间和人力 | 对业务持续能力和稳定性要求苛刻 | 需要新购机头时,费用较高;存在更高端的存储设备 |
Swift
Swift是OpenStack开源云计算项目的子项目之一,被称为对象存储,其提供了强大的扩展性、冗余性和持久性。
Swift是一个可以存放大量非结构化数据的、支持多租户的、可以高扩展的持久性对象存储系统。Swift通过REST API来存放、检索和删除容器中的对象。开发者可以直接通过Swift API使用Swift服务,也可以通过多种语言的客户库程序中的任何一个进行使用,例如Java、Python、PHP和C#。
Spark
Spark最初由美国加州伯克利大学(UCBerkeley)的AMP实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。2013年Spark加入Apache孵化器项目后发展迅猛,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目之一(Hadoop、Spark、Storm)。
Scala
Scala是一门现代的多范式编程语言,运行于Java平台(JVM,Java 虚拟机),并兼容现有的Java程序。Scala的特性:
Scala具备强大的并发性,支持函数式编程,可以更好地支持分布式系统
Scala语法简洁,能提供优雅的API, Scala兼容Java,运行速度快,且能融合到Hadoop生态圈中
Scala是Spark的主要编程语言,但Spark还支持Java、Python、R作为编程语言;
Scala的优势是提供了REPL(Read-Eval-Print Loop,交互式解释器),提高程序开发效率。
运行架构
Spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor)
前置概念
RDD:是Resillient Distributed Dataset(弹性分布式数据集)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型
DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系
Executor:是运行在工作节点(WorkerNode)的一个进程,负责运行Task
Application:用户编写的Spark应用程序
Job:一个Job包含多个RDD及作用于相应RDD上的各种操作
Stage:是Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage,或者也被称为TaskSet,代表了一组关联的、相互之间没有Shuffle依赖关系的任务组成的任务集
Task:运行在Executor上的工作单元
一个Application由一个Driver和若干个Job构成,一个Job由多个Stage构成,一个Stage由多个没有Shuffle关系的Task组成。当执行一个Application时,Driver会向集群管理器申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行Task,运行结束后,执行结果会返回给Driver,或者写到HDFS或者其他数据库中