云PaaS向容器生态系统的演变之路
本文作者将分析云PaaS的演变之路(着眼于构建并运行云端Web应用程序这一背景),并分析容器生态系统问世,尤其Docker和Kubernetes问世之后,在不远的将来会出现的影响。在众多不同的云计算服务模式当中,平台即服务(PaaS)模式是最引人入胜的模式。云计算的实际好处在于,云平台提供了运营灵活性,我们没必要为IT基础设施而操心,只要专注于构建应用程序。如果你确实想要充分发挥云计算的真正魅力,又想发挥云计算提供的运营灵活性,就应该充分利用PaaS解决方案,而不是建立IaaS实例:与相应的PaaS解决方案相比,基础设施即服务(IaaS)实例需要大量的人工干预。
当前的PaaS生态系统:Azure、AWS和谷歌云三足鼎立
亚马逊网络服务(AWS)是第一个公有云平台,它最初是从IaaS平台起家的。另一方面,Azure起初就是一个PaaS平台,微软简化了构建应用程序并部署到云端的方式。后来,AWS开始支持PaaS解决方案,Azure开始支持IaaS解决方案。与此同时,谷歌云(Google Cloud)推出了自己的PasS解决方案,旨在简化构建应用程序并部署到云端的方式。
在微软Azure中,主要的PaaS解决方案是“云服务” (Cloud Services),云服务提供了支持Java、Node.js、PHP、Python、.NET和Ruby的功能。云服务模式提供了两种模式:Web角色(Web Role)和工作者角色(Worker Role)。Web角色让你可以运行Web应用程序,而工作者角色让你可以运行后台处理服务。Azure还提供了Azure网站,该网站也是在云端构建 Web应用程序的一个很好的选择。但云服务更适合用来构建多层次云应用程序。Azure的解决方案其主要缺点在于,它基于Windows操作环境,这对非 Windows社区来说没有吸引力。如果想部署非Windows系统,你就得使用Azure的IaaS服务。但是对在.Net架构和Windows上从事开发的开发人员来说,Azure是比其他任何云平台更胜一筹的选择。对于.Net开发人员而言,相比AWS的类似解决方案,Azure是个很好的选择。我强烈推荐.Net开发者社区使用Azure。
AWS的PaaS服务可用于部署和管理Web应用程序,名为“弹性Beanstalk” (Elastic Beanstalk)。弹性Beanstalk提供了支持Java、.NET、PHP、Node.js、Python和Ruby的功能。弹性 Beanstalk的一大优势在于,它与熟悉的服务器系统如影相随,比如Apache、Nginx、Passenger和IIS。不像Azure,它随带多种操作系统平台和服务器,这会吸引多个开发者社区。在这种背景下,相比Azure,弹性Beanstalk是一种更好的平台。但是坦率地说,从PaaS 的角度来看,Azure云服务和Azure网站比弹性Beanstalk更好。如果你在AWS弹性Beanstalk和Azure云服务上都从事过开发,就会青睐Azure云服务,至少对.Net开发人员来说是这样。
我发现,许多AWS客户使用IaaS服务主要是为了部署Web应用程序,而不是使用AWS弹性Beanstalk。作为一名云解决方案架构师,本人构建云解决方案的方法是,只要有可能可以充分利用PaaS解决方案,就用它,而不是充分利用IaaS实例。原因在于,我们可以把更多的注意力放在应用程序开发上,而且我们也没有必要花时间在IaaS虚拟机上进行许多设置。
谷歌云的 PaaS解决方案是“谷歌应用引擎”(Google App Engine)。谷歌应用引擎(GAE)提供了支持Python、 Java、PHP和Go的功能。它并不支持.Net,这是仅次于Java架构的一大企业技术架构。但我欣赏这个决定,因为Azure是最适合.Net开发人员的解决方案。谷歌应用引擎的一个优点就是,它支持Go(Golang),这项新兴技术可用于构建下一代应用程序。不过眼下,对Go的支持不是非常出色。
一般而言,当前针对PaaS采取的做法是,为每一种编程语言和开发平台提供单独的运行时环境。如果PaaS平台不提供支持你所用语言环境的功能,就只好使用其IaaS实例,还需要搭建基础设施。
Docker和Kubernetes:革命性的容器生态系统
应用程序容器正在改变广大开发人员构建、交付和运行应用程序的方式。Docker凭借其功能强大的开源平台,正在彻底改变应用程序容器技术。Docker是一种应用程序容器技术平台,可用于构建、交付和运行你的分布式应用程序。Docker生态系统包括Docker引擎(Docker Engine)和Docker中心(Docker Hub);Docker引擎是一种可移植的、轻量级的运行时和封装工具,可用于构建容器化的应用程序;而Docker中心是一种云服务,可用于共享应用程序、实现工作流自动化。Docker让开发人员可以将应用程序容器化,而且可以在任何地方运行这些应用程序。Docker让你可以连接不同的容器,从而组合容器化的应用程序。Docker其实是一个强大的生态系统,你可以充分利用Docker中心上可供使用的成千上万的应用程序。Docker基于 Linux容器而建。
Docker还在改变我们为云端构建应用程序的方式。Docker革命将运行中的服务器应用程序由虚拟机变成了容器。我认为,这是分布式应用程序开发的演变历程,当前的生态系统依赖虚拟机,主要利用IaaS服务的虚拟机。Docker给云平台带来重大影响后,Kubernetes大大有助于管理云端容器。Kubernetes是一项实施了容器集群管理的开源技术,由谷歌开发。它最初是为谷歌计算引擎(GCE)开发的,用来管理应用程序容器。在谷歌,一切都在Linux容器中封装及运行;而Kubernetes负责容器集群管理。即便你在用谷歌应用引擎运行应用程序,它在内部还是使用谷歌计算引擎,一切都在基于Kubernetes的Linux容器上运行。现在,谷歌开放了Kubernetes的源代码,那样其他云平台就能利用Kubernetes的强大功能,管理Linux容器(包括Docker容器)。
Docker和Kubernetes都在容器技术生态系统产生了重大影响。值得关注的是,这两项技术都是用Go编程语言编写而成的。我在《2015年及以后的Web开发趋势》这篇文章中,预测Go会成为2015年的新兴编程语言。
面向Docker的AWS弹性Beanstalk
作为AWS的PaaS平台,弹性Beanstalk开始通过PaaS解决方案支持Docker。这是AWS推出的一个优秀项目,因为你可以通过PaaS抽象,处理容器生态系统,你没必要为支持云平台提供的语言运行时环境而操心。我们可以在Docker容器里面封装运行时环境。这将为云平台提供大好机会,也会在云平台上从事开发的开发人员提供大好机会。比如说,AWS弹性Beanstalk没有面向Go语言的语言运行时环境。但是由于Docker支持弹性 Beanstalk,我们可以在AWS弹性Beanstalk中运行Go应用程序,我可以将Go映像添加到Docker本身提供的Docker容器里面。
谷歌容器引擎:云PaaS领域的下一大革命
在去年发布Docker 1.0之后,应用程序容器这个技术术语备受关注。但自2007年以来,谷歌就致力于容器方面的研究;谷歌计算引擎基于容器技术生态系统。谷歌表示,他们每个星期都在全球数据中心发布超过20亿个的容器实例。从Gmail到搜索,谷歌里面的一切东西都在Linux容器里面封装并运行。透露一个秘密,谷歌在用容器技术扩展其基础设施,谷歌早已是容器生态系统的领跑者。
谷歌容器引擎(Google Container Engine)是谷歌云平台提供的一项新服务。谷歌容器引擎是面向Docker容器的全面管理的集群管理器,基于Kubernetes。有了谷歌容器引擎,你就能轻松封装Docker容器,并迅速在谷歌基础设施上运行应用程序。为容器技术提供的这项新服务让你可以从管理在单个虚拟机上运行的云应用程序,转为启动可移植的Docker容器,这些容器为你调度到受屋管理的计算集群里面。谷歌容器引擎是云PaaS的下一大发展阶段。这由单个虚拟机上的运行中应用程序变为可移植的容器,容器的集群管理在其中将由Kubernetes等技术来执行。更令人称道的是,谷歌容器引擎在现有的PaaS引擎:谷歌应用引擎上提供了PaaS抽象,那样开发人员就能轻松处理容器技术,拥有更高的运营灵活性。
Docker与微软携手将Docker引入到Windows和Azure上
应用程序容器技术建立在Linux容器的基础之上,那样这一点确实很明显:用Windows服务器构建Docker容器不可能。许多人认为,Docker是采用Linux而不是Windows的又一个理由。但是形势在未来可能会发生变化。Docker与微软达成了合作,将Docker引入到Windows服务器和微软Azure上。如果Docker和微软能为Windows提供一种更好的平台,这将是一场巨大的革命。我们可以用任何平台来构建容器,可以在任何操作系统平台上运行。目前,Docker客户机可以在多种系统上运行,但如果我们可以用多种平台来封装Docker容器,那确实会非常棒。
云平台之战并未结束,而是刚从容器生态系统开始
许多人认为,各大云平台提供商之间的云平台之战已经结束,AWS是这个领域的赢家。这是完全错误的想法。我认为,平台之战刚刚从容器生态系统开始打响。在容器生态系统方面,谷歌无疑是领头羊,因为其现有的IaaS服务已经在Linux容器上运行,而且谷歌已经开发并管理Kubernetes之类的卓越技术。在IaaS领域,谷歌已经比AWS更胜一筹。如果你将AWS EC2和谷歌计算引擎作一番公正客观的比较,就会认识到,谷歌计算引擎要比AWS出色得多。由于云PaaS向容器技术演变DD谷歌在这个领域的实力最强大,谷歌云在PaaS方面同样获得了领先优势。我们分析云平台的卓越技术后,发觉谷歌在各大云平台当中有重大优势。将来对AWS平台真正构成重大威胁的将是谷歌云平台,而不是微软Azure。就微软Azure而言,它们能吸引典型的企业客户,这些客户在Windows平台上使用.NET技术架构来构建应用程序。确实很显然,容器技术正在改变云计算平台,而且在改变人们部署和管理应用程序的方式。