2.4.5资源部署
资源部署指的是通过自动化部署流程将资源分配给上层应用的过程,即使基础设施服务变得可用的过程。在应用程序环境构建初期,当所有虚拟化的硬件资源环境都已经准备就绪时,就需要进行初始化过程的资源部署。另外,在应用运行过程中,往往会进行两次甚至多次资源部署,从而满足上层应用对于基础设施层中资源的需求,也就是运行过程中的动态部署。
在云计算的基础设施层,动态部署有多种应用场景。一个典型的场景就是实现基础设施层的动态可伸缩性,也就是说云的应用可以在极短的时间内根据用户需求和服务状况的变化而调整。当用户应用的工作负载过高时,用户可以非常容易地将自己的服务实例从数个扩展到数千个,并自动获得所需要的资源。通常这种伸缩操作不但要在极短的时间内完成,还要保证操作复杂度不会随着规模的增加而增大。另外一个典型场景是故障恢复和硬件维护。在云计算这样由成千上万服务器组成的大规模分布式系统中,硬件出现故障在所难免,在硬件维护时也需要将应用暂时移走。基础设施层需要能够复制该服务器的数据和运行环境并通过动态资源部署在另外一个节点上建立起相同的环境,从而保证服务从故障中快速恢复过来。
资源部署的方法也会随构建基础设施层所采用技术的不同而有着巨大的差异。使用服务器虚拟化技术构建的基础设施层和未使用这些技术的传统物理环境有很大的差别,前者的资源部署更多是虚拟机的部署和配置过程,而后者的资源部署则是从操作系统到上层应用的整个软件堆栈的自动化安装和配置。相比之下,采用虚拟化技术的基础设施层资源部署更容易实现。
2.4.6安全和风险管理
在基础实施层,安全管理的目标是保证基础设施资源被合法地访问和使用。在个人电脑上,为了防止恶意程序通过网络访问计算机中的数据或者破坏系统,一般都会安装防火墙来阻止潜在的威胁。数据中心也设有专用防火墙,甚至通过规划出隔离区来防止恶意访问入侵。云计算需要提供可靠的安全防护机制来保证云中的数据和系统安全,并提供安全审查机制保证对云中数据的操作都是经过授权的并且是可被追踪的。
另外,云计算环境对于用户来讲,也存在着一些其他风险,Gartner发布了一份名为《云计算安全风险评估》的报告,其中列出了云计算技术存在的七大风险。即特权用户的接入、可审查性、数据位置、数据隔离、数据恢复、调查支持和长期生存性。Gartner报告中所提到的云计算环境中存在的这些风险,并不是说在传统环境中就不存在,而是说有些风险在云计算中更为明显或更有挑战性;也不是说这些风险仅存在于基础设施层中,而是可能存在于云计算的各个服务层次。在这里我们以长期生存性举例,介绍在基础设施层进行风险管理的必要性。传统方式中,当客户买了某个软件提供商的产品时,并不是说将来这个软件提供商就一定不会倒闭或者被兼并,只不过由于软件产品市场相对成熟,通常可以比较容易地找到替代产品,从而相应的风险是可控的。由于目前云计算还处于初级发展阶段,很多服务都没有标准化,因此市场上能够相互兼容相互替代的产品还不是很多。在这种情况下,云计算服务长期生存性的风险就相对更大了。对于用户而言,在选择云计算服务的时候,只要对可能的风险有充分的认识并制订好应对措施,风险是可以控制的。再比如数据恢复风险,客户需要认识到灾难会给自己的数据和服务带来怎样的影响,了解云计算提供商是否能够应对数据损失风险并采取相应的恢复措施,也需要知道在风险发生时自身应采取何种数据恢复措施从而避免损失。
2.4.7计费管理
云计算作为一种信息技术与传统的方式相比,只有让用户以更低的成本获得更高的价值才能够得到用户的认可,也才可能蓬勃发展起来。因此,合理的计费模式非常重要。云计算倡导“按使用计费”的模式。
目前,面向公众提供服务的基础设施云主要的计费模式是依据某个时间段内应用所消耗的存储、网络、内存等资源向用户收费。实现这种计费模式有两种方式:一是实时计费,真正用多少资源就收多少费;二是为用户预设几种固定资源配置类型,每种类型都有单位时间内的计费标准,用户选择一种类型使用并根据使用时间长短进行付费。第一种方式对各种资源使用的监控准确度要求很高,因此很少被真正采用;而第二种是一个相对折中的办法,使用时间长短和所选择的资源配置类型是计费变量,实施起来比较容易,因此被广泛采用。
实际上,计费管理不仅仅是基础设施层所需要的,而且是云计算不同的服务模式都需要的。当然,在不同的层次和服务类型上,计费所选择的变量是不同的,而相同之处在于都需要依据对相应服务的使用时间进行费用计算。例如,在平台层,计费是以平台的使用为核心的。一种计费方式是基于应用程序对资源的使用状况进行计费,比如Google App Engine,计费方式与基础设施层类似;另一种计费方式是基于软件的许可证的。与传统的许可证计费方式略有不同的是,新的许可证计费模式会结合基础设施层资源的使用状况来制订计费标准。
2.5平台层
平台层是运行于基础设施层之上的一个以软件为核心,为应用服务提供开发、运行和管控环境即中间件功能的层次。基础设施层所要解决的是IT资源的虚拟化和自动化管理问题,而平台层需要解决的是如何基于基础设施层的资源管理能力提供一个高可用的、可伸缩的且易于管理的云中间件平台。从云架构而言,平台层位于基础设施层与应用层之间,它利用基础设施层的能力,面向上层应用提供通用的服务和能力。
2.5.1平台层概述
平台层面向云环境中的应用提供应用开发、测试和运行过程中所需的基础服务,包括Web和应用服务器、消息服务器以及管理支撑服务如应用部署、应用性能管理、使用计量和计费等。平台层所提供的服务是在云计算环境中开发、测试、运行和管理应用服务所需的基本功能。
平台层以平台软件和服务为核心,用户通过相应的编程模型和API来建立应用和发布。由于平台软件和服务的多样性,以及用户对平台的需求和使用方式上的不同,平台层在理念、客户定位和实现方式上也会存在差异。
关于所支持的编程模型,平台层可以基于标准编程模型,也可以基于自定义编程标准。基于标准编程模型可以降低用户的使用门槛,并且可以使原有的系统更容易地迁移到云平台上,比如在Google App Engine中,可以直接使用J2EE模型进行Web编程。某些云平台为了更好地强调某类云计算中的特殊问题而采用了自定义的编程模型,比如force.com为了更好地支持多租户技术而自己定义了Apex编程模型。特别要指出的是,随着云计算技术的发展,平台层中会出现越来越多的其他有别于传统中间件的服务,比如半结构化的大规模存储服务,非SQL的数据库服务等,这些都会进一步提高云应用的开发工具和手段。
在传统的应用开发中,用户需要花费大量时间和工作来进行软件堆栈(即中间件)的选型、定制和部署,在云平台上,这部分的工作将由云平台根据应用的需求和特点自动完成。我们可以看到,在Google App Engine和f"orce.com这样的云平台上,用户不再需要手动地选择自己所需要的Web容器和数据库产品以及对管理功能的选择和扩展。用户更多的是针对应用的特点,如运行时QoS需求,伸缩策略或者部署方式等应用的参数进行指定和配置,平台层可以根据应用的相关配置自动提供支撑应用的中间件资源以及在运行时进行自动的负载平衡、伸缩控制和SLA优化等。
通常的企业客户维护着大量现存的应用。企业客户在选择云平台运行其应用时,需要考虑两个方面的问题:一是平台层技术如何能够帮助企业已有的软件平台进行转型,并使企业在管理的有效性和成本方面从该转型中受益;二是企业在选择应用软件产品时有其特定的需求,而这些特定的需要对平台层的能力提出了要求,云平台应该能够满足这样的要求。云平台技术的发展将会更加贴近客户的多样化需求。
2.5.2平台层的核心功能
开发、部署和维护是软件生命周期的几个关键环节。虽然目前已经有相应的辅助工具来提高软件开发速度、改善自动化测试流程、加速版本迭代,但是整个软件周期相对于动态变化的业务需求而言仍显得格外漫长。云计算的出现有望加速产品、服务和解决方案的交付速度。云架构中的平台层负责为用户的应用或更高层次的平台提供开发、运行和相关的环境。
2.5.2.1开发环境
平台层对于在其上运行的应用来说,首先扮演的是一个开发平台的角色。一个开发平台需要清晰地定义应用模型,具备一套应用编程接口(API)代码库,提供必要的开发测试环境。一个完备的应用模型包括开发应用的编程语言、应用的元数据模型以及应用的打包发布格式。基于平台层的解决方案开发可以有两种模式:离线模式和在线模式,这两种开发模式体现了不同的平台层理念和功能设置。
在离线模式下,用户在本地的开发工具中进行解决方案的开发和测试,开发完成后远程部署到云平台上。目前支持离线模式的平台层一般是基于传统应用平台而构建的,因此应用可以使用流行的编程语言进行开发,如Google App Engine目前支持Python和Java这两种编程语言。即使平台层具有特殊的实现架构,开发语言也应该在语法上与现有编程语言尽量相似,从而缩短开发人员的学习时间。例如force.com使用的是自有编程语言Apex,该语言在语法和符号表示上与Java类似。元数据在应用与平台层之间起着重要的接口作用,比如平台层在部署应用的时候需要根据应用的元数据对其进行配置,在应用运行时也会根据元数据中的描述为应用绑定平台层服务。应用的打包格式需要指定应用的源代码、可执行文件和其他不同格式的资源文件应该以何种方式进行组织,以及这些组织好的文件如何整合成一个文件包,从而以统一的方式发布到平台层。平台层所提供的软件开发库(SDK)和其API对于应用的开发至关重要。SDK库是平台层为在其上开发应用而提供的统一服务,如界面绘制、消息机制等。定义清晰、功能丰富的SDK库可以有效地减少重复工作,缩短开发周期。
另一种开发模式是在线模式,用户可以根据云平台的标准在线开发和部署自己的应用。在线开发的一个好处是用户不需要在本地安装、配置和维护开发环境,能够有效地降低企业在开发环境方面的成本。某些在线的开发环境允许用户将自己的产品打包成插件并上传到“云”中,然后将这些插件组装成不同的解决方案并根据需要进行客户化定制,在开发完成后能够将整个解决方案自动化部署到运行环境中。
2.5.2.2运行环境
完成开发测试工作以后,开发人员需要做的是对应用进行部署上线。应用上线首先要将打好包的应用上传到远程的云平台上。尔后,云平台通过解析元数据信息对应用进行配置,使应用能够正常访问其所依赖的平台服务。在配置过程中需要加入必要的验证步骤,以避免冲突的发生。配置完成之后,运行环境将激活应用使其进入运行状态。
以上云应用的部署激活是平台的基本功能。此外,该层还需要具备更多的高级功能来充分利用基础设施层提供的资源,通过网络交付给客户高性能、安全可靠的应用。为此,平台层与传统的应用运行环境相比,必须具备三个重要的特性:隔离性、可伸缩性和资源的可复用性。
隔离性具有两个方面的含义,即应用间隔离和用户间隔离。应用间隔离是指不同应用之间在运行时对业务和数据的处理等各个方面不会相互干扰。应用间隔离保证应用都运行在一个隔离的工作区内,平台层需要提供安全管理机制对隔离的工作区进行访问控制。用户间隔离是指同一个解决方案中不同用户之间的相互隔离,比如对不同用户的业务数据相互隔离,或者每个用户都可以对解决方案进行自定义配置而不影响其他用户的配置。多租户技术是云计算环境中实现用户间隔离的重要技术。
可伸缩性是指平台层分配给应用的处理器、存储和带宽能够根据工作负载或业务规模的变化而变化,即工作负载或业务规模增大时,平台层分配给应用的处理能力能够增强;当工作负载或者业务规模下降时,平台层分配给应用的处理能力可以相应减弱。比如,当应用需要处理和保存的数据量不断增大时,平台层能够按需增强数据库的存储能力,从而满足应用对数据存储的需求。可伸缩性对于保障应用性能、避免资源浪费都是十分重要的。