当前,在IT行业中,绝大多数的大型、老式、单一的应用程序都不具备可移植性,必须对它们进行重新编写以适应目标环境。而在应用程序的可移植性方面的尝试已花费了大家大量的时间和金钱。毫不奇怪,云计算中应用程序迁移的目的在于以某种方式使应用程序更具云计算可移植性。我们至少可以在以下三个方面入手:使应用程序的架构更趋合理,以提升其在云中的可移植性;为云计算开发开放式标准;寻找无需修改就可在云中实现应用程序迁移的工具。其他有些需要特殊硬件支持的应用程序是不具备较高的可移植性,甚至许多最近发布的较新应用程序也不具可移植性,更不用说他们在云计算中的可移植性了。
应用程序架构与云计算
许多云计算专家都指出了应用程序的架构对于应用程序在云间迁移能力的重要意义。合适的云计算应用程序架构是云计算互操作性解决方案的一部分,而现有的应用程序可能需要重新进行架构设计以满足可移植性的要求。其关键在于应用程序的架构应当能够减少或消除应用程序栈与云计算服务供应商所提供功能之间难以解决的依赖性。
HyperStratus公司的CEO Bernard Golden指出,为了挖掘云计算环境的灵活性,一定要了解哪些应用程序架构有助于应用程序在云中正常运行,哪些种类的应用程序和数据能够在云计算环境中、数据备份需求中以及系统负载中运行良好。
目前,至少有三种流行的云计算应用程序架构:
• 传统应用程序架构(如三层架构),可用于稳定负载的应用中。这类应用不需要负载有变化的架构。
• 同步应用程序架构,这一架构中最终用户交互是主要的关注点。通常情况下,在短时间内大量的用户的集中使用会对网络应用程序造成极大的冲击,并对应用程序和系统的稳定性造成不良影响。
• 异步应用程序架构,基本上所有这一架构的批处理应用程序都不支持最终用户交互。它们基于数据集工作,在数据库中提取和插入数据。云计算实现了服务器资源的可扩展性,用不同的方法实现了将长期运行的异步工作分散部署在若干服务器,以实现处理负载共享。
平台即服务(PaaS)供应商为开发应用程序提供工具,为运行这些应用程序提供环境。为了发布一个PaaS平台下的应用程序,你必须在该平台下开发和部署该应用程序;这就是Google应用程序引擎的工作方式。你只能在Google 服务上部署应用程序引擎的应用程序,但是诸如Appistry CloudIO之类的云计算应用程序平台允许进行内部私有云部署和在诸如Amazon EC2之类的公共云基础设施上的部署。
应用程序的开发环境与运行环境都是设计应用程序架构时应当纳入考虑范围的重要因素。例如,如果你在一个无租户的私有云环境中进行开发工作,那么这样的应用程序是否能够在多租户情况普遍的目标云环境中正常工作呢?将新的应用程序与原有应用程序进行集成也是应用程序开发中的关键内容部分。如果集成工作涉及到云计算供应商,那么其难度将不言而喻,因为云计算供应商一般没有访问基础设施、应用程序以及集成平台的公开通道。
依赖于部分特定硬件的较旧应用程序(即这些应用程序需要某种特定类型的网络控制器或磁盘)也是非常的麻烦。云计算供应商可能不会考虑在其基础设施中继续使用这些较老的硬件。
在应用程序迁移的工作中,你可以决定使用一个云计算供应商模板进行启动,在这个模板中有一个供应商为你提供的操作系统,其典型代表是CentOS或Red Hat公司的企业版Linux模板。然后,你就需要在这个操作系统上运行你的应用程序,调试并消除源应用程序环境和目标环境之间的不匹配。真正的挑战是,这一方法变成了一个伴随着很多变通方法和变更的未知过程。
随着不断地遇到一连串的问题,不断地解决这些问题,你就会发现你几乎就是在重新编写这个应用程序了。希望你并不是必须完全重写这个程序,但是毫无疑问你一定会修改某些配置以及其他的关键细节。然后,在你面前的就是一个完全不同的应用程序了。这可能是好事也可能是坏事,但至少你已经至少有了这个应用程序的两个版本——数据中心版和云计算版。
如果在数据中心和云之间(或者在云之间)迁移一个应用程序会导致产生一个应用程序的两个不同版本,那么等待你的将是一个应用程序的众多版本集了。当你调试和遇到问题时,你就必须面对这一具有众多版本的应用程序集了。