云计算在经过轰轰烈烈的发展后开始落地,现阶段已经有一些企业开始着手于部署的工作。在一项针对企业CIO部署云计算的调查中显示,有19%的企业已经在部署或应用云计算,28%的企业考虑近期部署云计算,53%的企业目前尚无部署云计算的时间表。面对这样的数据,云计算的落地过程显得并不是那么容易,有一系列问题需要面对。对于企业来说,云部署的规模,云计算安全,云计算成本问题都是需要面对的。
其实从简单意义上来说,云部署就是为了简化工作流程,使业务更加自动化,在不需要更多人参与的情况下,实现更高的效率。这样看来,云部署似乎是一件革命性的大事件,带来虚拟化,IaaS等技术一样的现实意义。也就是这样,很容易让人产生误导,觉得企业对于云部署可以完全依赖标准化的流程。对于企业云部署,可以参考下面四个过程。
自动化部署
IaaS的优势之一是能够更加便捷的开发、测试、部署软件。传统的开发环境,开发者为了节省资金,通常使用的服务器数量比应用数量要低。除此之外,开发环境的不可兼容性,给开发者从一个项目转到另外一个项目带来了不便,重新搭建环境又非常费时。在云中就可以解决这一问题,开发人员为项目的每个分支中的应用分配相同的部署。这样就能够节省资金,在保存代码代码的同时结束资源部署不可用状态。
程序的完全部署至少需要一台应用服务器,一个数据库服务器或者缓存、辅助服务器。但是仅仅依靠开发者编写的代码控制部署,项目的防火墙或数据库服务器附件等部分可能会变得非常紧张。但如果不部署,建立恰当的开发环境时间会非常紧张且昂贵,即便这样,开发者也不愿意关闭好不容易搭建起来的环境。
不同程序版本的需求和分支的繁琐性使环境部署变得非常复杂。系统管理员和开发者管理虚拟化环境的传统方式是先在标准映像里安装相关软件和代码,然后再开启映像。这样,在开发者需要更新相关操作系统、数据库软件版本或改变服务器中代码组织方式的时候,需要创建一个新的映像。这样,众多不同映像就让自动化化启动项目部署的任务变得非常困难。
部署解决方案可以用一台普通的小型带有操作系统的机器,这时,需要创建应用环境来启动所有有必要的服务器,安装服务器中必要软件,检查不同代码所对应的相应分支和版本,以确保所有服务器都可用。即,数据库服务器首先启动,然后开始一系列测试确保可用性。最后应用程序服务器启动并测试,测试不同服务器之间的交流活动。测试过程中的所有失败情况,都要记录下来被重新测试,如果再次尝试失败的话会重新登录,如果部署环境失败的话为了节省成本将会停止所有服务器。
自动化缩放
IaaS最普遍的一个应用是 “cloudbursting”,这时有多于平常十倍的流量。部署架构中,能够定义以下情形:监控本地工作负载和IaaS服务器,一旦负载超过一定的值,IaaS提供商会规定新的服务器。工作负载减小的时候将会终止IaaS服务器。“cloudbursting”情形比“autoscaling”要复杂的多。
首先,对于单一的云计算来说,自动缩放是非常有限的,所以急于从私有云转向IaaS是不可行的。其次,快速转向IaaS可能需要复制/重新建立数据库服务器,或者有IaaS云服务器。第三,现代网络应用程序通常需要配套的应用服务器(高速缓存服务器和防火墙),创建和连接。最后,需要在集中的URL中分流所有流量,这样在多个数据中心或者云中可以智能的平衡负载,选择路由。解决这些复杂性问题,不是简单的缩放是找到正确的“cloudbursting”。
数据库服务器的自动化恢复
在云中,数据库服务器比应用服务器有着更多的难题,只要确保应用程序服务器充分被利用。但是数据库服务器就是另外一回事了,应用程序服务器要在数据库服务器上读写,这样就要确保数据库服务器要一直可用并且联网。数据库服务器要连接网络,这样备份他们就变得比较困难,为了抢数据快照中途总会有几秒的终端。这样一来,好的云架构和部署场景的配合就变得非常重要,也能够使数据库备份和灾难恢复变得简单。从体系架构的角度来看,就需要有一个主数据库服务器和一个从数据库服务器。
部署数据库服务器:启动主数据库服务器,检索主数据库服务器的最新快照,将数据迁移到主数据库服务器中,启动主数据库服务器中的数据库软件,确保数据库服务器正常工作,更新DNS。启动从服务器,检索从服务器的最新快照,将数据迁移到从服务器中,连接到主服务器。确保复制功能和从服务器数据库正常工作,更新DNS,从数据库服务器的创建快照备份操作,确保快照备份操作正常进行。
转移故障到从数据库服务器:主数据库服务器如果未能完成任务,更新新主数据库服务器的DNS,停止更新新主服务器的备份工作,启动新的从服务器,确保最新的从服务器快照,数据要迁移到从服务器中,复制新主机连接,验证复制工作,以及从属数据库服务器流程,更新DNS,为新主机建立快照备份功能,并验证其是否正常工作。
代码自动化部署
许多软件工程部门已经实行了一些整合工作,这样可以大大提高自动化验证代码的质量,每一行新的代码都要经个严格的测试。实际上,为应用程序服务器部署新的代码很少是自动化的,并且非常费时。但是部署自动化代码的环境非常容易并且非常高效。