传统的应用程序如何迁移上云,实现应用程序的现代化(Application Modernization)?
今天来介绍一个三步走的步骤。值得一提的是,程序的现代化并不一定需要按部就班的按顺序经历每一步。每个公司的技术积累和文化理念可能天差地别,可能选择迁移上云的方式和节奏也会各有各不同。有的公司一步一个脚印,稳健的从第一步走到第三步;有的企业信心十足,跳过第一步,直接从第二步开始披荆斩棘;还有的强人公司干脆另起炉灶,直接蹦到第三步,力图一步到位地解决问题。所以这里没有最佳的方式,只有最适合的方式,这才是正道。
搬家法(lift-and-shift cloud migration model)
搬家法的优点是不需要改动应用程序的任何代码,原封不动地就能把App从客户的数据中心迁移到云计算提供商的数据中心。就像搬家一样,你所有的家当(应用程序及其运行环境)都能放在箱子里(虚拟机VM里),然后搬迁到新家(云上)。
在某些技术纯粹主义者眼中,这哪叫上云呀,简直是糊弄事嘛。
其实不然。这能带来至少两点好处。第一,规模化能够带来效率的提升,成本的降低。这是云计算承诺的最基本的福利。当然,相较于后面两个步骤,这种程度的云化能够节省成本的力度确实较低。第二,为企业试水云计算提供一次宝贵的学习机会。企业可以通过最小的努力,来验证企业上云的概念和可行性,熟悉云计算的管理运营模式,为后续的进一步的云化积累经验。
容器化
相比VM,用容器来封装应用程序更轻量,能更好的发挥云计算平台的节省成本、加速创新的优势。我们看下面这张图就更清楚了。如图所示,除了宿主操作系统之外,每个VM都需要封装了一个额外的Guest OS。而容器本身只封装应用程序及其运行所需要的所有二进制文件和依赖库,容器之间共享宿主操作系统——Linux操作系统的内核。就此一项的改进就能指数级地降低容器占用的磁盘的空间(MB vs GB)。进而,使工程师能够更轻易、快速而高效地在不同环境之间创建,移动和运行App。
值得一提的是,现在占据主流的容器技术Docker,使用了独特的分层文件结构(Union filesystem),使容器之间能够共用相同的底层容器。例如,不同的应用程序容器可以共享相同的Websphere Liberty容器,这样Websphere Liberty容器只需要装载一遍就行。这进一步缩小了容器占用的磁盘空间,并极大地提高了容器启动的速度,减少了运行时需要的资源。
容器化之后应用程序,能够一定程度上利用云计算平台的一些特性,比如弹性伸缩,DevOps服务,持续集成,持续部署的模式等等。
微服务化
微服务化是应用现代化的终极步骤,也是最耗时,最困难的一步。它不仅意味着更高效地使用技术,更涉及到组织的行为模式和文化的彻底变革,这是微服务化之所以困难的源头。于后者而言,它的最终目的是一种效率的提升,体现了一种合久必分的趋势。
传统的整体开发模式的问题是紧耦合。也就是说,任何微小的改动都可能破坏其他的部分,导致连锁反应式的代码大调整。从而产生大量的计划、沟通、协调的工作,从开发到上线的效率周期长,效率低下。
微服务化把开发人员从整体开发模式的窘境中解放了出来,使他们工作更有效率。所谓微服务化就是把应用程序拆分成可独立开发、测试、运行的无状态服务,这样有关单一服务的工作都能交由一个小团队来独立完成。小团队的独立性很重要,这意味着高效,花更多的时间开发,更少的时间开会沟通(或扯皮)。
微服务化之后,产品不但进化地更强壮,更容错,服务更稳定,而且也能更彻底的激发出云计算承诺的第二大(也更重要的)潜力——促进创新,成为行业的颠覆者。因为每一个服务都能够独立的运营,使团队能够把新想法更快速的推向市场,进行试验,快速的获得市场的反馈,然后持续的迭代产品,持续地满足客户额需要。这种正向循环一旦被推动起来,企业也就踏上了发展的快车道,必然能在激烈的市场竞争中脱颖而出。