首页 理论教育 云计算的关键技术探析

云计算的关键技术探析

时间:2023-05-25 理论教育 版权反馈
【摘要】:[20]10.2.3.1虚拟化技术云计算最核心的特征就是虚拟化,同时这一特征也是云计算得以实现的基础。[27]10.2.3.3分布式存储技术为保证高可用、高可靠和经济性,云计算采用分布式存储的方式来存储数据,采用冗余存储的方式来保证存储数据的可靠性,即为同一份数据存储多个副本。[20]10.2.3.4并行计算技术并行计算指的是利用多种计算资源同时解决计算问题的过程,这种方式能够有效提高计算机系统的计算速度与处理能力。

云计算的关键技术探析

从技术发展的角度看,云计算是对虚拟化、服务计算、海量存储和并行计算的一种形象化的称呼,它背后是技术的演进及由此带来的新的应用方式的变化。随着技术的进步,尤其是宽带的普及及移动互联网高速发展,云在实际应用中已触手可及。虚拟化是一切建立在“云”上的服务与应用的基础:虚拟化实现了IT资源的逻辑抽象和统一表示,在云资源服务提供方面发挥着巨大的作用,是支撑云计算和大数据服务的技术基石。云计算中的虚拟化是指将服务器的CPU、磁盘及网络带宽等资源虚拟化后,形成弹性可扩展的服务池,对外通过服务,让用户以透明的形式调用其所需的软硬件资源。从云计算虚拟化特点来看,大部分软件和硬件已经对虚拟化有一定支持,可把各种IT资源、软件、硬件、操作系统和存储网络等要素都进行虚拟化,放在云计算平台中统一管理,并为用户提供按需使用。[20]

10.2.3.1 虚拟化技术

云计算最核心的特征就是虚拟化,同时这一特征也是云计算得以实现的基础。虚拟化技术将物理资源的逻辑与统一表示出来。虚拟化技术的运用实现了资源的高效利用,而且能够以用户的实际需要作为出发点,及时调节资源的分配,平衡了动态负载,另外与硬件无关的特性所提供的系统自愈功能,使得系统的可靠性得以显著提升。[26]

云计算最重要的特点包括资源虚拟化和应用虚拟化,每一个应用部署的环境和物理平台是没有关系的,通过虚拟平台进行应用的扩展、迁移、备份。社区资源分布在每个服务子系统中,如何将社区安防、节能监控、家居管理和社区物业各个子系统的资源整合起来是智慧社区提供综合服务时需解决的一个难题,而虚拟化技术让云服务平台不用关心每个子系统的基础架构,统一为上层门户提供服务。[27]

10.2.3.2 多租户技术

多租户技术能够使大量用户共享同一堆栈的软硬件资源,每个用户按需使用;并且可以对软件服务进行客户化配置,而不影响其他用户的使用。当社区用户大规模地访问系统资源时,可以对各个子系统资源进行优化配置,保证用户的访问需要,其核心包括数据隔离、客户化配置、架构扩展和性能定制。[27]

10.2.3.3 分布式存储技术

为保证高可用、高可靠和经济性,云计算采用分布式存储的方式来存储数据,采用冗余存储的方式来保证存储数据的可靠性,即为同一份数据存储多个副本。另外,云计算系统需要同时满足大量用户的需求,并行地为大量用户提供服务。因此,云计算的数据存储技术必须具有高吞吐率和高传输率的特点。

分布式存储技术并不是将数据存储在某个或多个特定的节点上,而是通过网络使用每台机器的磁盘空间,并将其构成一个虚拟的存储设备,数据分散地存储在各个角落。由于社区安防、家居管理和社区物业等子系统涉及用户信息安全,通过使用分布式存储技术可以降低安全风险。其特征是存储资源能够被抽象表示和统一管理,并且能够保证数据读写与操作的安全性、可靠性等。[27]

目前,典型的面向海量存储的文件存储系统有Google的GFS(Google File System)及Hadoop开发团队开发的GFS的开源实现HDFS(Hadoop Distributed File System),数据存储系统有Google的BigTable及Hadoop团队的HBaset。HDFS与GFS是可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。HDFS是GFS的简化开源实现,两者均采用“主控机+多工作机”的工作模式,通过数据分块和复制提高系统的可靠性及操作性能等。[20]

10.2.3.4 并行计算技术

并行计算指的是利用多种计算资源同时解决计算问题的过程,这种方式能够有效提高计算机系统的计算速度与处理能力。并行计算的基本思想就是运用多个处理器同时解决同一问题,具体来说就是将需要解决的问题分解成不同部分,并运用不同的处理器进行并行计算。[26]

云计算中大部分采用MapReduce的编程模式,通过将数据处理过程划分为Map(映射)及Reduce(归码)两个阶段,前者进行数据的读取及分析,并将中间结果存储于Map节点,进而后者读取并合并多个Map任务的中间结果。Hadoop开源框架也基于MapReduce模型实现了海量数据的处理。[20]

MapReduce编程模型能够保证后台复杂的并行执行和任务调度向用户和编程人员透明,让用户能利用该编程模型编写简单的程序来实现特定的目的,使用户能更轻松地享受云计算带来的服务。[21]

图10-10给出了一个MapReduce程序的具体执行过程。[24]

(www.xing528.com)

图10-10 MapReduce程序的具体执行过程[24]

从图10-10可以看出,执行一个MapReduce程序需要五个步骤:输入文件、将文件分配给多个worker并行地执行、写中间文件(本地写)、多个Reduceworkers同时运行、输出最终结果。本地写中间文件在减少了对网络带宽的压力的同时减少了写中间文件的时间耗费。执行Reduce时,根据从Master获得的中间文件位置信息,Reduce使用远程过程调用,从中间文件所在节点读取所需的数据。MapReduce模型具有很强的容错性,当worker节点出现错误时,只需要将该worker节点屏蔽在系统外等待修复,并将该worker上执行的程序迁移到其他worker上重新执行,同时将该迁移信息通过Master发送给需要该节点处理结果的节点。MapReduce使用检查点的方式来处理Master出错失败的问题,当Master出现错误时,可以根据最近的一个检查点重新选择一个节点作为Master并由此检查点位置继续运行。[24]

微软提出的DryadLINQ是另外一种并行编程模式。但它局限于.NET的LINQ系统同时并不开源,限制了它的发展前景。[24]

10.2.3.5 弹性扩展技术

弹性扩展技术为云应用实现了真正意义上的资源按需分配,并不是简简单单的凭空复制,对于应用服务来说,增加服务器个数只是增加资源计算能力,还需要传统意义上的“集群”技术将它联合成一个整体以对外提供服务。所以通过使用弹性扩展技术,假如有新的社区服务需要时,可以及时添加,同时不影响整体对外提供服务的能力。[27]

10.2.3.6 数据管理技术

云计算系统对大数据集进行处理、分析,向用户提供高效的服务,因此,数据管理技术必须能够高效地管理大数据集。其次,如何在规模巨大的数据中找到特定的数据,也是云计算数据管理技术所必须解决的问题。云计算的特点是对海量的数据存储、读取后进行大量的分析,数据的读操作频率远大于数据的更新频率,云中的数据管理是一种读优化的数据管理。[21]因此,云系统的数据管理往往采用数据库领域中列存储的数据管理模式,即将表按列划分后存储。

云计算的数据管理技术中最著名的是Google提出的BigTable数据管理技术。由于采用列存储的方式管理数据,如何提高数据的更新速率以及进一步提高随机读速率是未来的数据管理技术必须解决的问题。以BigTable为例,BigTable数据管理方式设计者——Google给出了如下定义[11]:“BigTable是一种为了管理结构化数据而设计的分布式存储系统,这些数据可以扩展到非常大的规模,例如在数千台商用服务器上达到PB(Petabytes)规模的数据。”BigTable对数据读操作进行优化,采用列存储的方式,提高数据读取效率。BigTable管理的数据的存储结构为:〈row:string,column:string,time:int64〉-〉string。BigTable的基本元素是:行、列、记录板和时间戳。其中,记录板是一段行的集合体。BigTable的逻辑结构如图10-11所示。[24]

图10-11 BigTable的逻辑结构[24]

BigTable中的数据项按照行关键字的字典序排列,每行动态地划分到记录板中。每个节点管理大约100个记录板。时间戳是一个64位的整数,表示数据的不同版本。列族是若干列的集合,BigTable中的存取权限控制在列族的粒度进行。BigTable在执行时需要三个主要的组件:链接到每个客户端的库、一个主服务器、多个记录板服务器。主服务器用于分配记录板到记录板服务器以及负载平衡、垃圾回收等。记录板服务器用于直接管理一组记录板、处理读写请求等。为保证数据结构的高可扩展性,BigTable采用三级的层次化的方式来存储位置信息,如图10-12所示。[11]其中第一级的Chubby file中包含Root Tablet的位置,Root Tablet有且仅有一个,包含所有METADATA tablets的位置信息,每个METADATA tablets包含许多User Table的位置信息。[24]

图10-12 BigTable中存储记录板位置信息的结构[24]

当客户端读取数据时,首先从Chubby file中获取Root Tablet的位置,并从中读取相应METADATA tablet的位置信息。接着从该METADATA tablet中读取包含目标数据位置信息的User Table的位置,然后从该User Table中读取目标数据的位置信息项。据此信息到服务器中特定位置读取数据。具体见文献[11]。这种数据管理技术虽然已经投入使用,但是仍然具有部分缺点。例如,类似数据库中的Join操作效率太低、表内数据如何切分存储难解决,数据类型限定为string类型过于简单等。

微软的DryadLINQ系统则将操作的对象封装为.NET类,这样有利于对数据进行各种操作,同时对Join进行了优化,得到了比BigTable+MapReduce更快的Join速率和更易用的数据操作方式。[24]

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈