文章目录

第一章 云计算与大数据基础
1.1 云计算基础
1.1.1 云计算简介
- 云计算的技术内容包括分布式计算技术,虚拟化技术,网络技术,服务器技术,数据中心技术,云计算平台技术,存储技术等
- 云计算的定义:一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机和其他设备(维基百科)
- 云计算时代基本的3种角色:资源的整合运营者,资源的使用者,终端客户
1.1.2 云计算的特点
- 资源池弹性可扩张:资源的集中管理和输出,能够有效应对不断增长的资源需求
- 按需提供资源服务:敏捷的适应用户对资源不断变化的需求
- 虚拟化:利用软件来实现硬件资源的虚拟化管理,调度及使用
- 网络化的资源接入:基于云计算系统的应用服务通过网络来提供给用户
- 高可靠性和安全性:数据被复制到多个服务器节点上有多个副本备份
- 经济性
1.1.3 云计算技术分类
- 按技术路线分:
资源整合型云计算:集群架构,通过将大量节点的计算资源和存储资源整合后输出,核心技术为分布式计算和存储技术(如:MPI,Hadoop,HPCC,Storm等)
资源切分型云计算:虚拟化系统,通过系统虚拟化实现对单个服务器资源的弹性化切分,核心技术为虚拟化技术 - 按服务对象分:
公有云:服务对象是面向公众的云计算服务,公有云对云计算系统的稳定性,安全性和并发服务能力有高的要求
私有云:主要服务于某一组织内部的云计算服务,其服务并不向公众开放 - 按资源封装的层次分:
基础设施即服务(IaaS):把单纯的计算和存储资源不经封装的直接通过网络以服务的形式提供给用户使用
平台即服务(PaaS):计算和存储资源经封装后,以某种接口和协议的形式提供给用户调用,资源的使用者不再直接面对底层资源
软件即服务(SaaS):将计算和存储资源封装为用户可以直接使用的应用并通过网络提供给用户
1.2大数据基础
1.2.1 大数据简介
- 大数据:大数据是现有数据库管理工具和传统数据处理应用很难处理的大型,复杂的数据集,大数据的挑战包括采集,存储,搜索,共享,传输,分析和可视化等
三个特性:规模性,多样性,高速性,价值 - 数据的来源:信息管理系统,网络信息系统,物联网系统,科学实验系统等
数据类型包括结构化数据(如数据库中的数据),半结构化数据,非结构化数据 - 生产数据的三个阶段
1)被动生成数据:数据随业务系统的运行产生
2)主动式生产数据:人可以随时随地通过手机等移动终端生成数据
3)感知式生成数据:物联网的发展,遍布各地的数据采集设备不断地自动采集,生成数据 - 大数据时代的特点
1)数据产生方式:被动采集变为主动生成
2)数据采集密度:
以往采集密度低,采样数据有限,
现可以更加密集的采样,从而精确地获取事件的全局数据
3)数据源:
以往是单一的数据源,
现在通过分布式计算,分布式文件系统,分布式数据库等技术对多个数据源获取的数据进行整合处理
4)数据处理方式:
以往采用离线处理,
现在可以根据实际需求对数据采取灵活的处理方式,对较大的数据源,响应时间要求低的应用采取批处理的方式进行集中式计算,而对响应时间要求高的实时数据处理则采用流处理的方式进行实时计算,而且可以对历史数据的分析进行预测
- 大数据的应用领域
1.2.2 主要的大数据处理系统
- 数据查询分析计算系统:对大规模数据进行实时或准实时查询(如HBase,Hive,Cassandra,Impala,Shark,Hana等)
- 批处理系统(如Hadoop,Spark)
MapReduce是被广泛使用的批处理计算模式 - 流式计算系统:具有很强的实时性,对不断产生的数据实时进行处理,常用于电信,电力等行业应用以及互联网行业的访问日志等
- 迭代计算系统
- 图计算系统:存储,计算图数据
- 内存技术系统:使用内存计算完成高速的大数据处理
1.2.3 大数据处理的基础流程
大数据的处理流程可以定义为在适合工具的辅助下,对广泛异构的数据源进行抽取和集成,结果按照一定的标准统一存储,利用合适的数据分析技术对存储的数据进行分析,从中提取有益的知识并利用恰当的方式将结果展示给终端用户。
- 数据抽成与集成:对数据进行抽成和集成,从中提取出关系和实体,经过关联和聚合等操作,按一定格式对数据存储
方法:基于物化或ETL方法的引擎,基于联邦数据库或中间件方法的引擎,基于数据流方法的引擎 - 数据分析:用户根据自己的需求对获取的数据进行分析处理,比如数据挖掘,机器学习,数据统计等,数据分析可用于决策支持,商业智能,推荐智能,预测系统等
- 数据解释:对数据处理结果有合适的展示方式,才能被终端用户正确理解
主要技术包括可视化,人机交互
1.3云计算与大数据的发展
- 云计算的兴起因素:高速互联网技术发展,资源利用率需求,简单与创新需求,其他需求
第二章 云计算与大数据的相关技术
2.1 云计算与大数据
—云计算与大数据相比云计算更像是对一种新的技术模式的描述而不是对某一项技术的描述,而大数据则较为确切地与一些具体的技术相关联。
—云计算整合的资源主要是计算和存储资源,云计算技术的发展也清晰地呈现出两大主题—计算和数据。伴随这两大主题,出现了云计算和大数据这两个热门概念。
—在分布式系统中实现计算和数据有效融合从而提高数据处理能力,简化分布式程序设计难度,降低系统网络通信压力从而使系统能有效地面对大数据处理的机制称为计算和数据的协作机制。
—面向数据也可以更准确地称为“面向数据的计算”,面向数据要求系统的设计和架构是围绕数据为核心展开的,面向数据也是云计算系统的一个基本特征,而计算与数据的有效协作是面向数据的核心要求。
2.2 云计算与物联网
物联网:通过射频识别装置,红外感应装置,全球定位系统,激光扫描器等信息传感设备,按约定的协议把任何物品与互联网连接,进行信息交换和通信,以实现智能化识别,定位,跟踪,监控和管理的一种网络
云计算技术将给物联网带来以下深刻变革:
(1)解决服务器节点的不可靠性问题,最大限度降低服务器的出错率。(2)低成本的投入可以换来高收益,让限制访问服务器次数的瓶颈成为历史。(3)让物联网从局域网走向城域网甚至是广域网,在更广的范围内进行信息资源共享。(4)将云计算与数据挖掘技术相结合,增强物联网的数据处理能力,快速做出商业抉择。
2.3 一致性哈希算法 *
2.3.1 一致性哈希算法的基本原理
- 哈希算法:是一种将任意长度的串映射为固定长度的串,在存储和计算定位时可以被看作是一种路由算法,通过这种路由算法文件块能被唯一的定位到一个节点的位置。
- 传统的哈希算法:无法满足节点数目频繁变化的要求
- 一致性哈希算法:无中心节点的计算和数据定位,使计算可以惟一地找到其所要处理和分析的数据,使计算能最大可能地在数据存储的位置发起,从而节约大量的网络资源,同时避免了系统单点失效造成的不良影响。(如需要存储大量Key-Value的Amazon的电子商务应用和Facebook的社交网站应用都采用了一致性哈希算法)
- 一致性哈希原理:对Key值首先用MD5算法将其变换为一个长度32位的十六进制数值,再用这个数值对2^32 取模,将其映射到由 2^32个值构成的环状哈希空间,对节点也以相同的方法映射到环状哈希空间,最后Key值会在环状哈希空间中找到大于它的最小的节点值(后一个节点值)作为路由值。
2.3.2 一致性哈希算法中计算和存储位置的一致性
数据存储位置是唯一的,把存储位置映射到哈希环上,在处理文件的程序上指定数据存储位置,计算出文件所处的节点位置,将计算程序分配到这个位置,则计算找到了数据
应用举例:
2.4 非关系型数据库
2.4.1 从关系型数据库到非关系型数据库
云计算技术对数据库高并发读/写的需求,对海量数据的高效率存储和访问的需求,对数据库的高可扩展性和高可用性的需求都让传统关系型数据库系统显得力不从心。同时关系型数据库技术中的一些核心技术要求如:数据库事务一致性需求,数据库的写实时性和读实时性需求,对复杂的SQL查询,特别是多表关联查询的需求等在Web 2.0技术中却并不是必要的,而且系统为此付出了较大的代价。非关系型数据库技术的出现是云计算、大数据技术的必然需求。
2.4.2 非关系型数据库的定义(NoSQL)
- 非关系型数据库,又被称为NoSQL(Not Only SQL),意为不仅仅是SQL(Structured Query Language,结构化查询语言),NoSQL描述的是大量结构化数据存储方法的集合
- 根据结构化方法以及应用场合的不同,主要可以将NoSQL分为以下几类:
(1)Column-Oriented(列存储数据库)
面向检索的列式存储,其存储结构为列式结构,不同于关系型数据库的行式结构,这种结构会让很多统计聚合操作更简单方便,使系统具有较高的可扩展性。
这类数据库还可以适应海量数据的增加以及数据结构的变化,这个特点与云计算所需的相关需求是相符合的。
比如Google Appengine的Big Table以及相同设计理念的Hadoop子系统HBase就是这类的典型代表。需要特别指出的是,BigTable特别适用于MapReduce处理,这对于云计算的发展有很高的适应性。
(2)Key-Value(键值存储数据库)
面向高性能并发读/写的缓存存储,其结构类似于数据结构中的Hash表,每个Key分别对应一个Value,能够提供非常快的查询速度、大数据存放量和高并发操作,非常适合通过主键对数据进行查询和修改等操作。
Key-Value数据库的主要特点是具有极高的并发读/写性能,非常适应作为缓存系统使用。
MemcacheDB、Berkeley DB、Redis、Flare就是Key-Value数据库的代表。
(3)Document-Oriented(文档型数据库)
面向海量数据访问的文档存储,这类存储的结构与Key-Value非常相似,也是每个Key分别对应一个Value,但是这个Value主要以JSON(JavaScript Object Notations)或者XML等格式的文档来进行存储。
这种存储方式可以很方便地被面向对象的语言所使用。
这类数据库可以在海量的数据中快速查询数据,典型代表为MongoDB、CouchDB等。
(4)图形(Grach)数据库
图形结构数据库同其他行列以及刚性结构的SQL数据库不同,他是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或查询API。如:Neo4J,InfoGrid,Ifinite Graph。
- NoSQL优点:具有扩展简单、高并发、高稳定性、成本低廉等优势,
- NoSQL缺点:
NoSQL暂不提供对SQL的支持,会造成开发人员的额外学习成本;
NoSQL大多为开源软件,其成熟度与商用的关系型数据库系统相比有差距;
NoSQL的架构特性决定了其很难保证数据的完整性,适合在一些特殊的应用场景使用。
2.5 集群高速通信标准InfiniBand
- 集群结构是云计算系统的基本结构之一,在集群结构中节点之间的协调和数据传送一般都通过消息传递机制进行,在传统的高性能计算系统集群内部的网络通信能力成为了影响集群计算能力的一个重要因素,由于受到网络通信速度的制约甚至提出以计算换通信的编程理念。
云计算系统中集群的规模变得空前巨大,为了很好地实现集群内部的调度和协调高速的网络通信是必不可少的。InfiniBand就是目前较为常见的一种高速集群通信协议,它在高性能计算领域已得到广泛的应用。- InfiniBand是唯一既提供机箱内底板互联解决方案,又可以使高速带宽延伸出机箱外部的互联标准,是一种把I/O和系统域网络统一起来的标准。
- 与其他商品化系统域网络不同,InfiniBand网络首先由行业协会制定标准,然后生产商根据标准制造出InfiniBand设备,不同生产商的产品要求具有互操作性,这样可以使InfiniBand产品具有更好的性能价格比。
- InfinBand 既可作为系统内部互联技术又可作为网络互联技术
既可用于构造高性能刀片服务器(Blade Server);
又可用于构建具有高可用性和高可伸缩性的大规模集群系统;
还可用于构建性能卓越的存储区域网络SAN。
2.6 云计算大数据集群的自组织特性
- 自组织理论主要研究混沌系统在随机识别时系统内部自发地由无序变为有序、形成耗散结构的过程
自组织算法按照自下而上的机制进行控制,与一般采用中心控制算法不同,在进化计算、任务分配、网络自组织演化等中得到广泛的研究- 典型的进化算法(如蚁群算法)由个体依据简单规则,通过正反馈、分布式协作依靠群体的力量自动寻找最优路径;任务分配通过多智能体并行实现在离散、有限的数据结构上,寻找一个满足给定约束条件并使目标函数值达到最大或者最小的解;人工生命进化由人工分子的非线性相互作用引起,是远离热平衡的相变,是自组织的研究方向之一;网络自组织演化研究在内在机制驱动下,网络自行从简单向复杂、从粗糙向细致方向发展,不断地以局部优化达到全局优化的过程。
- 研究自组织必然要提到耗散结构理论,一个开放系统当某个参数变化到一定的临界值时,系统发生突变,其状态可能从原来的混乱无序的状态转变到一种在时间、空间上或功能上有序的新状态,这种新的有序结构(耗散结构)需要系统不断地与外界交换物质和能量才能得以维持并保持一定的稳定性
- 自组织现象:系统从无序自动走向有序结构,出现自组织现象的系统必须是耗散结构的
第三章 虚拟化技术
3.1 虚拟化技术简介
3.1.1 虚拟化技术的发展
- 广义地定义虚拟化技术:虚拟化技术就是一种逻辑简化技术,实现物理层向逻辑层的变化
从这个定义来看,一个系统采用虚拟化技术后,其对外表现出的运动方式是一种逻辑化的运动方式,而不是真实的物理运动方式
采用虚拟化技术能实现对物理层运动复杂性的屏蔽,使系统对外运行状态呈现出简单的逻辑运行状态
3.1.2 虚拟化的描述
- 维基百科中虚拟化的描述:
“在计算机技术中,虚拟化(Virtualization)是将计算机物理资源如服务器、网络、内存及存储等予以抽象、转换后呈现出来,使用户可以以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式、地域或物理组态所限制的”
3.1.3 虚拟化技术的优势和劣势
- 虚拟化技术的优势
(1)虚拟化技术可以提高资源利用率
传统的IT企业为每一项业务分配一台单独的服务器,服务器的实际处理能力往往远超服务器的平均负载,使得服务器大部分时间都处于空闲状态,造成资源的浪费
虚拟化技术可以减少必须进行管理的物理资源的数量,隐藏了物理资源的部分复杂性
为了达到资源的最大利用率,虚拟化还把一组硬件资源虚拟化为多组硬件资源,并动态地调整空闲资源,减小服务器的规模
(2)提供相互隔离、高效的应用执行环境
虚拟化技术能够实现较简单的共享机制无法实现的隔离和划分,从而对数据和服务进行可控和安全的访问
例如,用户可以在一台计算机上模拟多个不同、相互之间独立的操作系统,这些虚拟的操作系统可以是Windows或Linux系统。其中的一个或多个子系统遭受攻击而崩溃时,不会对其他系统造成影响。在使用备份机制后,受到攻击的子系统可以快速恢复。
(3)虚拟化可以简化资源和资源的管理
计算机有硬盘、磁盘等硬件资源和Web服务等软件资源。用户对计算机资源进行访问是通过标准接口来进行的。
使用标准接口的好处是用户不用知道虚拟资源的具体实现。底层的基础设施发生变化时,只要标准接口没有发生变化,用户基本上感受不到这种变化。这是因为,与用户直接接触的是标准接口,虽然底层的具体实现发生改变,但是用户与虚拟资源进行交互的方式并没有改变。
传统的IT服务器资源是硬件相对独立的个体,对每一种资源都要进行相应的维护和升级,会耗费大量的人力、物力。
而虚拟化系统降低了用户与虚拟资源之间的耦合度,利用这种松耦合的关系,管理者可以在对用户影响最小的基础上对资源进行管理。
此外,虚拟化系统还将资源进行整合,在管理上相对而言比较方便,在升级时也只需添加动作,从而提高工作效率。
(4)虚拟化技术实现软件和硬件的分离
用户在同一个计算机系统上可以运行多个软件系统,不同的软件系统通过虚拟机监视器(VMM, Virtual Machine Monitor)来使用底层的硬件资源,从而实现多个软件系统共享同一个硬件资源,达到软件和硬件的分离。
这样,在虚拟化的统一的资源池能够运行更多的软件系统,充分利用已有的硬件资源。 - 虚拟化技术的劣势
(1)可能会使物理计算机负载过重
虚拟化技术虽然是在虚拟的环境中运行的,但是其并不是完全虚拟的,依然需要硬件系统的支持。
(2)升级和维护引起的安全问题
物理计算机的操作系统及操作系统上的各种应用软件都需要不定时地进行升级更新,以增强其抵抗攻击的能力。每台客户机也都需要进行升级更新。一台物理计算机上安装多台客户机,会导致在客户机上安装补丁速度缓慢。如果客户机上的软件不能及时更新,则很可能会被病毒攻击,带来安全隐患。
(3)物理计算机的影响
传统的物理计算机发生不可逆转的损坏时,若不是作为服务器出现,则只有其自身受到影响。当采用虚拟化技术的物理计算机发生宕机时,其所有的虚拟机都会受到影响。在虚拟机上运行的业务也会受到一定程度的影响,甚至是损坏
此外,一台物理计算机的虚拟机往往会有相互通信,在相互通信的过程中,可能会导致安全风险。
3.1.4 虚拟化技术的分类
虚拟化技术从计算体系结构的层次上可分为:
- 指令集架构级虚拟化
指令集架构级虚拟化是通过纯软件方法,模拟出与实际运行的应用程序(或操作系统)所不同的指令集去执行,采用这种方法构造的虚拟机一般称为模拟器
模拟器是将虚拟平台上的指令翻译成本地指令集,然后在实际的硬件上执行。其特点是简单、具有鲁棒性、可跨平台 - 硬件抽象层虚拟化
硬件抽象层虚拟化是指将虚拟资源映射到物理资源,并在虚拟机的运算中使用实实在在的硬件。即使用软件来虚拟一台标准计算机的硬件配置,如CPU、内存、硬盘、声卡、显卡、光驱等,成为一台虚拟的裸机
这样做的目的是为客户机操作系统呈现和物理硬件相同或类似的物理抽象层。客户机绝大多数指令在宿主机上直接运行,从而提高了执行效率。但是,给虚拟机分配的硬件资源的同时虚拟软件本身也要占用实际硬件资源的,对性能损耗较大
硬件抽象层的虚拟机具有以下优点:
(1)高度的隔离性
(2)可以支持与宿主机不同的操作系统及应用程序
(3)易于维护及风险低
比较有名的硬件抽象层虚拟化解决方案有VMWare、Virtual PC、Xen、KVM等 - 操作系统层虚拟化
操作系统层虚拟化是指通过划分一个宿主操作系统的特定部分,产生一个个隔离的操作执行环境。操作系统层的虚拟化是操作系统内核直接提供的虚拟化,虚拟出的操作系统之间共享底层宿主操作系统内核和底层的硬件资源
操作系统虚拟化的关键点在于将操作系统与上层应用隔离开,将对操作系统资源的访问进行虚拟化。使得上层应用觉得自己独占操作系统
操作系统虚拟化的好处是实现了虚拟操作系统与物理操作系统的隔离并且有效避免物理操作系统的重复安装 - 编程语言层上的虚拟化
编程语言层上的虚拟机是在应用层上创建的,并支持一种新定义的指令集。这一类虚拟机运行的是针对虚拟体系结构的进程级作业,通常这种虚拟机是作为一个进程在物理计算机系统中运行的,使得用户感觉不到应用程序是在虚拟机上运行的。
这种层次上的虚拟机主要有JVM(Java Virtual Machine) ,JVM是通过在物理计算机上仿真模拟计算机的各种功能来实现的,是虚拟出来的计算机。 JVM使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上进行无缝迁移 - 库函数层的虚拟化
在操作系统中,应用程序的编写会使用由应用级的库函数提供的一组API函数。这些函数隐藏了一些操作系统的相关底层细节,降低了程序员的编程难度
库函数层的虚拟化就是对操作系统中的应用级库函数的接口进行虚拟化,创造出了不同的虚拟化环境。使得应用程序不需要修改,就可以在不同的操作系统中迁移
不同的操作系统库函数的接口不一样。如利用API转换技术做出Linux与Windows相对应的函数来调用DLL,从而能在Linux系统中运行Windows程序
3.2 常见虚拟化软件
3.2.1 VirtualBox
VirtualBox是一款开源免费的虚拟机软件,使用简单、性能优越、功能强大且软件本身并不臃肿,Virt