关于云开发运维、云计算标准的一些思考
云计算目前仍然是IT领域里最热门的名词之一,在各种技术论坛或者研讨会上,都能听到大家在讨论云,参与对象包括硬件厂商、软件厂商、大型企业用户。不同于以往只是大谈云的理念,展望云计算的前景,现在都谈论的的话题已经是云设备、云平台和云应用,纷纷从观望等待转向云计算的实践之路。
有人说云计算是一个大的技术革命,带来巨大的技术创新。也有人说云计算是一种市场理念,是对原有技术的一次包装,只不过是新瓶装旧酒。无论各方如何争论,大家至少都认可云计算对IT的发展带来了新的契机,并在云计算的基本特征上达成共识。云计算的基本特征包括:
本文不关注云计算的具体实现技术,只从云计算涉及的开发运维、标准规范及不确定因素等方面提出个人的一些思考,希望能够给云计算的各方推动者提供一点不同角度的见解。
1、云计算的优势
云计算首先解决了应用部署中的基础设施和平台环境的准备难题,使得软件开发人员不再为硬件的维护和集成耗费精力。云计算的部署充分发挥了计算能力的集约化效应,由于充分利用了硬件虚拟技术,在一台主机上可以虚拟出数倍于物理主机能力的设备。由于云计算平台对不同操作系统主机镜像的同时支持,使得不同版本的操作系统可以和平共存,改变了传统应用随操作系统升级被动升级的局面。
云计算提供了不同层次的开箱即用服务:在IaaS层提供了定制或标准化的硬件配置及操作系统的开箱即用;在PaaS层提供了开发部署环境和中间件平台等平台级软件需求的一站式满足;在SaaS层可以为中小企业或个人用户提供标准化的软件服务。
云计算技术的出现和应用,与社会化专业分工有异曲同工之妙。在硬件设备、中间件平台、应用独立部署自成一体的年代,软件系统类似于人类社会中早期的建筑公司,要从机械设备购置开始到雇佣技术工人来完成一项建筑工程,是麻雀虽小五脏俱全。建筑公司受设备规模和技术工人的限制,制约了公司的发展。在任务需求增大和减少时,设备和人员都是公司面临的难题,需要的时候不趁手,用不着的时候还要养着。基础设备服务公司的出现(类似于云计算中的IaaS提供商),解决了设备的难题,可以提供包括仓库出租、机械设备出租等硬件租赁服务。在基础服务的基础上,衍生出了中间服务商,提供水暖安装、隧道开挖、物料运输等专业服务,服务商把人力和设备进行了包装(相当于云计算中的PaaS提供商),提供专注于某项专门技能的专业服务。建筑公司则主要关注组织管理和施工协调以及前端寻找市场的能力。
从社会学角度看,专业化社会分工必然会增加管理成本,这在云计算实践中也是同样的。同时专业化社会分工又为服务租用方带来节约成本、增强市场应变能力的好处,为服务提供商带来因规模化和集中化效应降低单位服务成本而产生的差额利益,对双方而言是获得了双赢的机会。而在云计算中,由于主机及存储资源在虚拟能力和实际占用资源的差异,软件和中间服务软件等虚拟资产的可复制性,服务提供商具备了更灵活的利润空间,从而促进服务价格的进一步下调,吸引更多的服务使用者,这也正是各方积极投身云计算实践的重要驱动力。
2、云计算对应用开发的挑战
云计算是互联网信息技术发展和信息服务需求共同作用下的产物,传统的软件开发模式并不能直接适用于云计算环境下的应用开发。在IaaS层面的云计算环境中,由于平台提供的是标准化的可水平扩展的虚拟机供给能力,因此当应用需求的主机计算能力高于虚拟机能力时,开发人员需要对应用程序进行解耦,分解成多个可以在分离的虚拟机上运行的细粒度应用,通过调度程序来协调各个程序间的任务。
在PaaS层面的云计算框架中,平台提供了进一步的抽象,通过对云应用进行分类,总结出实践中的共性问题,抽象出特定的模式和解决方案。提供了包括负载均衡、缓存、数据存取、消息通信等基础功能服务。
由于PaaS平台提供商在平台软件和基础服务的实现上具有多样性,提供的基础服务面向不同的特定需求,所针对的应用类型、客户定位和实现方式上也存在差异,这给最终开发者的应用带来运行在不同PaaS平台上时必须面临的兼容性问题。
当在PaaS平台上开发云计算应用时,需要遵循平台层提供的一系列开发规范。由于平台层提供了应用部署、应用性能管理、使用计量和计费等基础服务,因此在应用开发规范中约定在应用中必须挂载一系列的测试桩。由于平台的许多配置是不允许应用开发者随意进行调整的,这将带来调优方面的影响。如果应用还需要把自己的一些功能暴露为服务,供其他应用所用,应用开发者还需要考虑服务注册等问题。此外,云应用本身还要考虑集成来自不同云服务提供商所提供的功能或服务。
事实上,采用云计算对开发的需求并没有降低,因为最终实现的功能在最终用户看来是一致的。所以云计算的采用,对于企业的前端业务需求部门,没有明显驱动力,需求部门不会鼓励IT部门去采用云计算,也不会承担云计算带来的风险。因此企业的IT部门必须想办法把采用云计算可能带来的风险以及未来持续发展中的风险消灭在部门内部。
前面谈到的都是云计算对开发带来的新要求,换个角度来看,云计算也为应用开发带来一些积极的变化。在传统的应用开发中,由于系统软件、中间件平台、数据库和开发环境的不断升级,已有程序的运行环境不断受到挑战,每次环境升级带来的程序兼容性检查都是一个梦魇,系统的不兼容性常常是系统运行所面临的最大问题。而在云计算环境下,用户对操作系统等运行环境拥有了自主选择权,用户完全可以将原有应用运行在安全的沙箱环境内。
云计算的技术的引入,也为大规模应用传承开发的未来指明了方向。计算机应用软件在企业的大规模使用自20世纪90年代开始,经历的几乎都是应用开发、部署、迁移、升级、换厂商、再开发部署这样的轮回。如果看各大企业的软件资产,除了在用的系统外,多年前的软件投资已经几乎见不到任何踪影。早期的软件变革通常是由于流程未固化,需求变化等原因造成频繁升级,本质上软件的基本功能是适应生产需求,而从企业的长期发展来看,虽然局部的流程调整是存在的,但大部分基本功能还是稳定的。因此对企业应用来说,基本功能在长期也是应该稳定的。在采用云计算技术后,设备的维护问题,软件运行环境兼容性问题都已经得到解决,虚拟主机隔离了不同操作系统版本的影响,按需分配资源的方式已经足以允许业务量很低的应用长期处在运行状态。因此将企业应用中最基础的,长期稳定的功能固化下来,作为服务长期运行应该被列为开发的首要考量内容。
应用云化的核心思想是如何使大型应用平衡分配到许多独立的物理或虚拟机上进行计算的技术。通过这种运用,可以降低不同规模的应用对主机能力的差异化需求,通过横向增加标准设备的技术,满足从小到大不同规模的应用对处理能力的需求。应用云化带来的是应用管理的复杂性上升,这和日常工作是一样的,当一个全能型技术高手在做一件事情时,任务的分解调度和协调都由他自我合理安排,而如果要把同样的工作分配给多个仅具备一项或两项能力的初级技术人员来完成时,就需要考虑任务的衔接,每个人工作的合理性,两个人工作交接的完整性,还需要及时进行检查,防止某些环节产生纰漏。这些都是云计算应用开发必须面临的挑战。
3、云计算对运维的影响
云计算在企业用户中的实践首先面对的是对运维的挑战。在采用云计算技术之前,运维人员会认为一切尽在掌控之中,可以如数家珍地讲述系统A运行在第X排Y列机柜里的Z主机上,设备已经纳入备份管理,最近设备运行正常,安全上只允许B网段的主机访问。而采用云计算技术后,运维人员很难讲清楚A系统具体运行在哪个主机上,因为全部采用了设备虚拟化管理,A系统在不同时刻可能处在不同主机上。运维人员需要改变静态管理的固有思维,主动迎接动态管理的挑战。
引入了云计算之后,运维的重点将不仅仅是原来管理的设备运行正常,网络畅通,还将关注资源的主动供给、自动配置、可持续性、可追踪的实时配置管理。
在传统的运维管理中,为了保证可靠性和伸缩性,不仅需要在部署阶段进行支持,而且还需要随时监视应用的运行状态,判断是否存在节点失效或者负载过高等情况,一旦发生异常,管理员根据事先制定好的工作流程来启动备用的服务器,运行相应的管理脚本来对新的服务器进行配置和初始化等。而在云计算环境中运维人员一部分负责物理设备运转,一部分负责应用相关的监控和管理。运维人员定位系统故障不再只是依靠传统的网管手段,需要更深入地通过云计算管理平台以及虚拟设备管理平台,来分析系统的运行效率和故障原因。
在云计算环境中,虚拟机虚拟镜像磁盘文件把基本操作系统、客户需要使用的应用及运行应用所需的中间件等组件一并打包在内,免去了传统环境下为用户进行复杂安装配置的过程,做到开箱即用,实际上成为了企业的虚拟资产。这和传统环境下需要保留主机运行环境,保存安装软件不同,虚拟机镜像文件随时加载意味着新的虚拟设备可以在需要时快速进入生产状态,特别是一些测试开发环境的准备,可以通过原始的虚拟镜像快速恢复到用户所需要的状态。
在云计算实践之前,数据中心的绝大多数应用服务都部署在物理机上,随着物理设备逐渐老化,性能逐渐下降,所运行的应用软件的稳定性和可靠性都受到了极大的影响。要把服务迁移到新的系统上会面临很大的风险:一方面是因为开发人员的流动性,当需要迁移服务时,难以找到原开发团队的相关人员;另一方面是软件对新运行环境的兼容性问题,软件所依赖的特定接口或者函数库在新的系统里并不一定兼容。引入云计算技术以后,人们采用新的虚拟化的辅助技术(P2V)能够把应用服务与操作系统一起从物理服务器上迁移到虚拟环境中,管理员不再需要触及与系统紧密整合的应用的相关代码,大大提高了系统迁移的可行性和成功率。迁移后的服务器,不仅可在一个统一的界面中进行管理,而且借助虚拟机化管理软件,在这些服务器因故障停机时,可以自动切换到网络中其他可替代的虚拟服务器中,从而达到不中断业务的目的。
4、企业在标准规范中的作用
云计算技术包含硬件设备,虚拟化平台,数据库中间件等基础应用,应用软件开发等多方面内容,规范也比较多。而业界目前在云计算标准规范的分布呈正三角形,底层标准相对成熟,通过驱动程序或操作系统的兼容性,使得设备有较高的可互换性。越往上层,靠近应用层方面,除了虚拟机层面有开放虚拟化格式(OVF)标准外,其他方面几乎没有成型的标准。企业用户花费精力参与底层标准的制定不仅没有精力,而且也没有话语权,因此只要对底层规范有所了解,能够对企业的技术选型提供参考即可。
对企业而言,最重要的是在应用层面的标准制定中,起到主导者的作用,把握规范的重点。从企业信息化的角度来看,对企业未来信息化建设影响最大的有2个层面的规范,一个是Web Service中应用层面的服务,因为从服务注册、接口语意和调用逻辑等框架性方面,可以找到相应的国际规范,各应用提供商都可以遵循,但是接口内容层面的规范,是必须依赖企业内部制定的自有规范。另外一个是云计算应用管理平台方面的规范标准,云计算建设不是3~5年的建设和存续周期,企业一旦开始采用云计算技术来整合整个IT系统,就意味着企业信息化的整体方向已经确定,而且这个方向在较长时间内是难以改变的。因此在应用管理平台的规范上应尽量发挥引导作用,从选型之初就必须坚持可替换和可迁移的原则,要求云应用管理平台提供的基础能力对外服务接口是标准化的,而且是可被其他管理平台所兼容的。
云计算要打造的是企业的计算航母,一旦依赖在某个管理系统上,对企业未来的影响是致命的,软件厂商可以因为市场原因逐步淡出,而企业的信息化却是必须长久存在并发展的。因此企业应根据管理平台的标准进行严格约束,要求所有应用开发商所使用的标准服务必须是企业所明示,经过兼容性测试的服务。
采用云计算技术后,应用开发对标准规范的执行必须提高到一个战略层面,因为参与构成云计算环境的不再是一个独立的应用,而是由很多服务共同完成的复杂任务。因此标准规范将是参与各方的开发契约,任何不遵从契约的开发行为都是在挑战应用管理的权威性。而规范的严肃性和延续性,也将改变软件厂商长期在应用开发中侧重功能,不注重接口标准的开发陋习。云计算的服务接口面向不特定的服务请求者,特别是一些重要的服务,面向许多服务请求者,不恰当的服务接口变更,可能对业务造成难以评估的影响。最稳妥的方案是建立一个兼容服务提供者,同时提供新老服务接口的服务,然后通过服务寻址重定位功能,完成新老服务的替换。
5、云计算的不确定因素
目前主流的商用中间件平台通常采用的是按照用户许可或者主机CPU内核进行销售的,采用云计算平台后,无论从IaaS虚拟机还是PaaS的预装中间件,都带来一个许可计算的棘手问题。中间件厂商不愿意看到自己的利润被虚拟化摊薄,云计算服务提供商不愿意支付多余的许可费用。在这种情况下,面向公众提供云计算的服务商,通常采用的是开源的中间件平台或自有的中间件平台,鲜有采用商用中间件平台的,但对于大中型企业用户而言,对平台软件的选用则是一个难以抉择的事情。因此能否培养企业自有的,在云计算中间件平台软件演进过程中具有自主开发能力的技术队伍是影响企业云计算持续发展的一个不确定因素之一。
云计算的实施对云计算平台的管理软件依赖性很高,平台管理软件分为2个层次的内容。一个是IaaS层的管理软件,这个层次又分为存储虚拟化管理软件和主机虚拟化管理软件;另一个是PaaS层的平台管理软件。平台软件提供商希望在管理软件中采用独家技术,为自身平台管理软件未来被第三方软件替换建起防火墙,而企业用户却希望能采用可多家兼容的管理平台,避免云计算的建设受制于某个云计算技术提供厂商。
由于存储和主机的接口目前遵循的是成熟的工业化标准接口,在存储虚拟化管理软件的替换和迁移上是非常方便的。而常见的主机虚拟化管理软件支持的虚拟磁盘镜像文件格式差异很大,在系统迁移时,需要解决镜像文件格式转换的难题。在PaaS层的管理软件由于强制性规范很少,各软件提供商的实现也各不相同。有些PaaS平台在设计上,仍要求开发者嵌入平台提供的标准库来实现服务的注册、监控和管理。而有些PaaS平台则是通过提供一些标准服务的调用来实现这些功能。这2种方案实现的功能看起来是一致的,但是对未来的移植支持是有较大差异的。云计算平台管理软件的选型合理性和迁移互换支持同样也是企业云计算建设中的不确定因素。
6、其他需要引起关注的问题
云计算是一个顺应时代发展需求,满足硬件设备提供商,软件提供商和大型企业用户、中小企业客户多方诉求而逐渐发展成熟的技术产物,选择实施云计算的战略方向是毋庸置疑的。但是,选择了云计算不等于就能满足企业IT建设面临的各种需求。云计算不是包治百病的万能药,不同层次的云计算技术解决的问题有其局限性,因此在选择云计算技术时首先要明确企业面临的核心需求问题。企业不能为了赶上云计算潮流而仓促上马云计算,更不要迷信IT系统采用了云计算技术就会获得质的飞跃,云计算真正发挥效益还是需要应用开发、运维管理等多方面全力配合才能实现的。
云计算的实践之路要谋定而动,云计算中涉及的许多技术在现有系统中都已有应用,做好云计算需要踏踏实实地做好基础信息梳理和系统整合工作。云计算在不同层次都可以实施,但是无论在哪个层次,都要用种树的心态来实施,只有这样才能把云计算真正做到枝繁叶茂,成为可以影响IT建设环境的良性生态体系。