云计算
- 格式:docx
- 大小:89.50 KB
- 文档页数:6
云计算的关键技术与挑战 摘要: 作为信息产业在互联网时代的最新发展,云计算在过去的几年中快速成长,已经出
现了很多商业应用,比如Amazon EC2、Google App Engine和Salesforce.com提供的不同层次的云服务。在云计算产生、发展和推广过程中出现了很多新技术,包括快速部署、资源调度、多租户技术、海量数据处理、大规模分布式存储等等。每一个关键技术都有其产生背景、待解决的问题、目前发展的现状、主流的解决方案以及需要继续研究的地方。同时,云计算给传统数据中心的安全性、可用性、可伸缩性、信息保密、性能和标准化等问题到来了新的挑战。 云计算有着美好前景的同时,当下也有着不足和面临巨大挑战。
云计算的理念生动体现了互联网时代的信息服务特性,并且正在推动一系列创新技术去解决互联网平台的服务管理问题,大规模分布式计算、存储、通信问题,以及按需提供资源、按量计费问题等。云计算中快速部署、资源调度、多租户、海量数据处理、大规模分布式存储等技术对解决以上问题起着关键作用。 1. 快速部署 快书部署从数据中心诞生以来就是一项重要的功能需求,不管是技术人员还是用户,一直都在追求更快、更高效灵活、功能更全的部署方案,而云计算环境对于快速部署的要求更高。第一,云环境中资源和应用规模变化范围大,动态性高,而用户随时会提交对所需资源和应用的请求,云管理程序负责分配资源和部署服务。第二,不同层次云计算环境中服务的部署模式是不一样的,比如虚拟化的基础设施云上的应用都被打包在虚拟机里,而多租用户平台上的应用则是更加轻量级的打包方案。第三,部署过程中软件系统和系统结构各不相同,而部署工具应能适应部署对象的变化。 虚拟机的部署办法大体上可分为三类:串行部署、并行部署和协同部署。 串行部署是较为在传统的顺序部署方式,该方法可以有效减少单个虚拟机的部署时间,但是虚拟机镜像大小通常为几GB到几十GB不等,镜像的复制速度会严重影响虚拟机的部署速度和用户体验。另外,自动化程度的高低直接关系着虚拟机部署的效率。因此,串行部署过程会消耗大量时间和资源。 并行部署是将传统的顺序部署方式改变为并行执行,同时执行多个部署任务,并将虚拟机同时部署到多个物理机上。在理想情况下,并行部署可以成倍地减少部署时间,但存储镜像文件所在的云部署服务器的读写能力和部署系统有限的网络带宽都制约着实际并行部署速度。例如,在网络带宽有限的情况下,同时运行多个部署任务时,这些任务会争抢网络带宽,当网络带宽被占满时,部署速度也就达到峰值了。 协同部署就解决了并行部署因有限网络带宽带来的问题。协同部署中的虚拟机镜像是在多个目标物理机之间的网络中传输,而不仅仅在云部署服务器和目标物理机之间传输,从而提高了部署速度,云部署服务器的网络带宽不再是制约部署速度的瓶颈,部署的速度上限取决于目标物理机之间的网络带宽的总和。协同部署虽能够提高系统部署的速度,但由于物理机之间存在大量共享带宽,因此协同部署可能会影响其他物理机的网络带宽。 2. 资源调度 所谓资源调度,指的是在特定的资源环境下,根据一定的资源使用规则,在不同的资源使用者之间进行资源调整。不同资源使用者对应着不同计算任务,每个计算任务在操作系统中对应着一个或多个进程,一般通过在计算任务所在的机器上调整它的资源使用量或者将计算任务转移到其他机器上来实现资源调度,达到负载均衡的目的。 云计算的海量规模为资源调度带来了新的挑战。资源调度要考虑资源的实时使用情况,这就要求对云计算环境的资源进行实时监控和管理,而云计算环境中资源的种类多规模大,对资源的实施监控和管理就变得是分困难。此外,一个云计算环境中的计算任务可能成千上万,这对调度算法的有效性和复杂性提出了挑战。目前,大多数虚拟化管理方案通过在虚拟机级别上的调度技术结合一定的调度策略来尝试为虚拟机内部应用做资源调度,缺乏有效性和精确性。 3. 多租户技术 传统的软件运行和维护模式要求软件被部署在用户所购买或租用的数据中心里,这些软件大多针对于特定的个人用户或企业用户。在云计算环境中,大量软件以SaaS的方式发布出去,并且通常会提供给成千上万的个人用户、企业用户共享使用,因此云计算要求硬件资源和团建资源能够更好地共享且具有更好的可伸缩性。比如任何一个企业用户都能够按照自己的需求对SaaS软件进行客户化配置而不影响其他用户的使用,多租户技术因此诞生。该技术使大量的用户能够共享同一堆栈的软、硬件资源,每个用户都能够按需使用资源,且能够对软件服务进行各自的客户化配置而不影响其他用户的使用,每一个用户就成了不同的租户。 采用多租户技术的SaaS应用需要具有以下特征。第一,SaaS应用是基于Web的,能够服务于大量的租户并且可以非常容易地伸缩,这是前提。第二,SaaS平台提供附加的业务逻辑让租户能够对SaaS平台本身进行扩展,从而满足更大型用户的需求。 目前,多租户技术面临的技术难点包括数据隔离、客户化配置、架构扩展和性能定制。 多租户技术需要实现安全、高校的数据隔离,在多个租户使用同一个系统时,租户的业务数据是相互隔离存储的,不同租户的业务数据处理不会相互干扰,从而保证租户数据安全及多租户平台的整体性能。对多租户的数据库管理有三种基本方式:给每一个租户创建单独的数据库,虽然用户间的数据得到充分隔离,但是数据库的成本和开销比较大;将多个租户的数据保存在同一个数据库中,采用不同的Schema,虽然在一定程度上减少了数据库的管理成本和开销,但是相应地影响到了数据隔离的效果;将多个租户的数据保存在同一个数据库中,采用相同的Schema,通过租户的标识码字段进行区别,这样管理成本和开销最低,但是数据隔离效果最差,需要大量的安全性验证来保障租户之间的数据隔离。 客户话配置指SaaS应用能够支持不同租户对SaaS应用的配置进行定制,并且一个租户的客户化操作不会影响到其他租户,这就要求系统能够对同一个SaaS应用的不同租户的配置进行描述和存储,并且能够在租户登录SaaS应用是根据该租户的客户化配置为器呈现相应的SaaS应用。传统的企业应用运行模式下都有一个独立的应用实例,实现存储和加载任何客户化配置很容易,但在多租户场景下成千上万的租户共享同一个应用实例,在现有的平台技术下还是难以实现的。 在典型的多租户场景中,多租户平台需要支持大规模租户的同时访问,因此平台的可伸缩性至关重要。为了保证在不同负载下多租户平台的性能,要求平台架构具有灵活性和高伸缩性。最简单的方法是在初始阶段就为多租户平台分配海量的资源,这些资源足以保证负载达到峰值时平台的性能,但是这种方法会造成巨大的资源浪费,大幅增加多租户平台提供商的运营成本。 性能定制是多租户技术面临的又一个挑战。不同的租户对性能的要求可能是不同的,在传统的软件运营模式中,每个用户拥有独立的资源堆栈,只需要简单的根据用户付费的多少来配置资源就可以,然而,同一个SaaS应用下的不同租户共享的是同一个资源,性能的定制就显得十分困难。 4. 海量数据处理 作为以互联网为计算平台的云计算,更广泛地涉及到海量数据处理任务,其数据的规模通常可以达到TB级别甚至PB级别。在互联网时代,互联网数据的统计和分析很多是海量数据级别的,搜索引擎就是一个典型的例子。由于数据量非常大,一台计算机不可能满足海量数据处理的性能和可靠性等方面的要求。以往对于海量数据处理的研究通常基于某种并行计算模型和计算机集群系统。并行计算模型可以支持高吞吐量的分布式批处理计算任务和海量数据,计算机集群系统则在通过互联网连接的机器集群上建立一个可以扩展的可靠的计算环境。 在互联网时代的今天,海量数据处理操作非常频繁,最流行的海量数据处理的编程模型是有Google公司设计的MapReduce编程模型。MapReduce编程模型将一个任务分成很多更细粒度的子任务,这些子任务能够在空闲的处理节点之间调度,处理速度更快的节点可以处理更多的任务,从而避免处理速度慢的节点延长整个任务的完成时间。 大多数分布式运算可以抽象为Map和Reduce两个步骤,从而实现可靠、高效的分布式应用。Map步骤负责根据输入的键值(key/value对)生成中间结果,中间结果同样采用key/value对的形式。Reduce步骤则将所有的中间结果根据key进行合并,然后生成最终结果。开发者之需要实现Map和Reduce函数的逻辑,然后提交给MapReduce运行环境,计算任务便会在由大量计算机组成的集群上被自动、并行地调度执行。运行环境负责将输入数据进行分割、调度任务、自动处理运行过程中的机器失效,以及协调不同节点之间的数据通信。 MapReduce的运行环境由两种不同类型的节点组成:Master和Worker。Master负责任务调度以及不同节点之间的数据共享,Worker负责数据处理。 输入数据依据MapReduce提供的库被分割为M份,每份的大小为16~64MB,然后在计算机集群上启动程序。Master节点的程序负责为所有的Worker节点分配子任务,其中包括N个Map子任务和R个Reduce子任务,Master负责找出空闲的节点并分配子任务。获得Map子任务的Worker节点读入对应的输入数据,从输入数据中解析key/value对,并调用用户编写的Map函数。Map函数的中间结果缓存在内存中并周期性的写入本地磁盘。写入本地磁盘的数据根据用户指定的划分函数被分为R个数据区。这些中间结果的位置被发送给Master节点,Master节点继续将这些数据信息发给负责Reduce任务的Worker节点进行Reduce处理。 执行Reduce子任务的Worker节点从Master节点获取子任务后,是用远程调用的方式从执行Map任务的Worker节点的本地磁盘读取数据到缓存。执行Reduce子任务的Worker节点首先遍历所有的中间结果,然后按照关键字进行排序。执行Reduce子任务的Worker节点遍历获得Map子任务产生的中间数据,将每个不同的key和value进