云PaaS向容器生态系统的演变之路
原文 http://cloud.51cto.com/art/201503/467521.htm
本文作者将分析云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年的新兴编程语言。