业界首个开放式云服务平台Cloud Foundry
原文 http://sd.csdn.net/a/20111110/307322.html
VMware中国软件工程师王浩飞
王浩飞介绍到,Cloud Foundry是VMware用Ruby实现的业界首个开源PaaS平台,支持多种语言(Ruby、Java、Javascript、Python、 PHP等)以及开发框架(Rails、Sinatra、Spring、NodeJS等),能集成各种后端serivce(Mysql、MongoDB、Redis等) 支持多种云计算平台,能提升开发者的生产力,加速软件开发部署。
以下是王浩飞的现场演讲实录:
首先给大家介绍一下Cloud Foundry到底是什么东西,相信大家都知道Cloud是一个什么东西,大家可能都对 Google AppEngine 比较熟悉,Cloud Foundry类似GAE, 就是为了简化我们的开发,而且可以降低开发程序运营的成本。你想想,一个Rails程序已经写好了,你觉得你的工作结束了,但是很多人还需要把你的程序从开发环节部署到产品环节,这就会带来很多问题,你可能需要把产品环境中的操作环境、网络、存储都配备好,这些我觉得至少要占到你整个开发周期的30%,我的个人经验。Cloud Foundry这个平台的好处就是可以大大减少这些程序员不应该做的事情,把这些过程最小化。最重要的是,Cloud Foundry 99%是用Ruby来写的。
Matz 最近作为首席架构师加入到云计算公司Heroku,某种程度上证明PaaS这种平台对于Ruby程序员的吸引力是最大的。
现在我们来看看用Cloud Foundry都可以做什么,它支持Rails, Java/Spring, Node.js 等等, 可以把这些程序部署到Cloud Foundry平台里。公共的Cloud Foundry平台帐号也是可以免费申请,可以通过API把程序部署上去。你也可以把 Cloud Foundry平台的源代码拿下来, 将这个平台部署到自己公司的计算机上,建立一个公司内部的云计算系统,完全没有任何问题。甚至在最极端的情况下你可以把Cloud Foundry在自己的计算机上建立起来,我们称之为Micro Cloud,这是一个非常方便的工具,而且我们平时开发 Cloud Foundry也是采取这样的做法。
大家都是Developer,平时接触最多的就是如何开发Application,在我看来这主要分为两个阶段:首先有了很好的Idea,你想把它变成一个Application,比如某个创业公司,实现了一个Rails程序,这个时候大概是一个原型,Cloud Foundry对此有很好的支持,开发者可以把写好的Rails程序部署到自己的Micro Cloud平台或者VMware的公共Cloud Foundry平台,在这个过程中逐步实现你的想法,可以用很多次迭代把程序发布出去,开发者可以从中学习如何使用Cloud Foundry管理程序。刚开始你只是有了一个小Idea,以前也并没有用过云开发平台,Cloud Foundry可以帮助你了解这些不熟悉的地方, 这是第一个阶段。
第二个阶段,你可能写出了一个成功的Rails程序,这个时候你的网站流量很大,这个时候Cloud Foundry有很多种方法帮你Scale。增加程序运行的实例, 修改内存大小等等。大多数情况下,作为开发者,我非常喜欢写代码。我想只要把Code写出来就好,而且很多情况下你把这个Code写完之后还有很多很复杂的东西,还要管部署,我只想管我负责的地方,不想管其它事情,比如把Rails程序部署到Production环境里面,如果你不熟悉的话可能会很头大,因为开发环境和应用环境是完全不同的。就像我刚才说的,比如配置一个操作系统内核,安装很多Packdge,有可能还要写很多配置文件,我觉得没人会觉得这个有意思。虽然现在有很多云计算公司,但是没有一家云计算公司可以承诺把“云”给你,最多是说可以让你在我这里免费运行。但是 Cloud Foundry不一样,因为它是一个开源产品,你可以把云运用在自己的机器上,所以是完全自由的。你可以选择将自己的程序部署在VMware 的公共Cloud Foundry平台上,也可以部署在自己搭建的Cloud Foundry平台上。
无论是Java/Spring还是Rails,大部分人平常开发的都是这样的,当你进行部署时,你需要编写很多配置,光干这个事儿就要占用你大量的时候,但是如果你使用Cloud Foundry,它可以负责管理所有在运行在上的程序。你可以选择你这个程序发布到什么地方,比如你公司有一个 Cloud Foundry平台,你可以部署到你这个公司的私有云上面,甚至可以直接在你自己机器上的Micro Cloud。如果你想Push一个 Rails程序到Cloud Foundry平台,这非常简单,假如你需要两个Rails Instance,输入这样的命令,它会自动地把这个 Rails程序打包上传到云上面,帮你创建两个Instance,memory也是可以配置,部署之后它就可以运行了。在部署运行之前这个程序就可以把所有的数据库相关的配置部分全部搞定。整个流程大约就是你写好代码,在本机上测试好,只要运行这三个命令,你的程序就已经进入Production环境了,你不需要知道除了Ruby代码之外的其他东西。如果你要做一些修改就,可以运行vmc update更新production环境的代码。我维护过很大的 Rails程序,那个时候要部署一个东西非常复杂,你可能要专门自己写十几个步骤才能把这个程序拼好,然后放到产品环境里。每次干这种事情的时候都觉得这是在浪费生命。
对刚才讲的内容进行一个快速总结,Cloud Foundry这个平台在你开发初期就可以对你产生很大的帮助,不需要太多的功夫,程序相关的配置全部由云自己搞定。它是可以在你本地机器上创建的,也就是说是在自己的“云”上进行开发的。而且它支持你的程序scale的能力,比如你的项目做得非常火,流量很大,Cloud Foundry可以把你单个结点的系统变成多结点分布式的系统。
下面这一点非常重要,你在部署、管理、运营你的程序时是非常简单的,我们的运维人员,他们的工作量几乎降为零。以前我们开发程序需要Developer,还有一些其他的人员负责部署程序,如果你使用Cloud Foundry可以非常方便地把你的程序从开发环境部署到产品环境,不需要那些运维环节。
相信大家都非常重视自己的Freedom,如果大家用Google AppEngine的时候,无法将自己的程序从GAE上移植出来 ,但是使用Cloud Foundry的时候,你可以自由地运行在自己的平台上还是公共云之上。
Cloud Foundry里面的一些基本概念, 首先是代码,基本上就是程序员写的那些。第二个概念是Instance,比如一个Rails程序真正运行的时候可能会有2-3个Instance,这要看你的需求了。还有你的不同的App是Cloud Foundry之中是用不同的url来确定的。最后一个是Service,就是刚才我说的你可以有很多Service,包括MySQL,这些东西都是可以通过Service的方式加到云里,可以被很多 Instance共享,你只要Run一两个命令进行绑定,不需要配置,这是非常方便的。我们为用户一共开发了两套工具,第一个是VMC,它是一个 rubygem,装好之后会有一个VMC命令,有很多功能,把你的程序配置到云端,可以随时观看你程序的健康状况等等。还有一个Eclipse插件是专门为Spring服务的,可以把你的Spring程序无缝部署到Cloud Foundry平台里。
Cloud Foundry架构设计的非常好,不需要任何其他的工具就可以简单的实现scalibilty,而且把运维的成本降到很低,你可以用一个简单的工具进行管理,从创建、运行到更新,IT运营的成本是非常低的。Cloud Foundry 主要包括两个API,一个是你的程序生命周期管理API,你可以创建、启动一个程序,或者将它删除。另一个是Service相关API,你可以判断这个Cloud里有多少Service正在运行,可以选择你想要的Service。比如我有Rails程序,本来是不需要缓存,但是如果我需要Redis,就可以通过一两个命令把Redis并入我的Rails程序里,然后使用它的缓存功能。
这张slide介绍的是我们平时部署程序到Cloud Foundy一些常用的命令,比如你创建好一个程序后就可以选择一个app名字把它Push上去,对这个app的CRUD都可以操作。然后是程序的设置相关的命令,你想设置它的Instance数量、查看Log都是没有任何问题的,之后命令是处理程序需要的一些Service,以及User自己的信息等等,因为在开发之前,Cloud Foundry系统中需要注册这个开发者的信息,
我们可以看看更详细的Cloud Foundry的架构,当初的设计目标是希望Cloud Foundry本身是一个非常动态的系统,不想留下任何静态的配置文件,或者是需要人工干预的东西,整个系统中间是有一个处理消息的系统叫做Nats,其他所有的组件都是通过发消息和周围的组件进行交互,所以当你往里加一些模块的时候,它就会向一个Cloud Controller注册,然后可以通过消息系统知道这里已经有这个组件了。因为存在这个中心的消息系统,不同的软件、模块之间都可以按照随机的顺序来启动。
因为是通过Message发送来Subscribe/Publish这些东西,整个系统的性能很好,所以每个核心组件都可以添加,它们会自动注册,所有的东西都可以被其他人使用。
这张slide大致的架构图,主要分为两个部分,左边的是cloud controller接受开发者把程序Push上来,之后将程序部署到DEA运行,另一部分是普通用户使用运行在Cloud Foundry程序时,route会选择正确的路径,找到相对应的Instance,将用户的request发送过去。还有一个是Service Life Circle Management,负责管理运行在Cloud Foundry之中的恶各种 Service,比如Mysql,Redis,Mongodb等等。Service有自己的API,你想把自己公司的遗留系统通过 serivce provider的方式加入Cloud Foundry,供运行在Cloud Foundry之中的程序使用。
接下来我们看看Cloud Foundry是怎么管理程序生命周期的,开发者把自己的程序Push上来之后,Cloud Controller会把这个程序记录下来,记录到CC Database里,然后分析这个程序需要哪些部件,创建程序的运行脚本,或者改一些程序的配置。你的程序可能需要某一个数据库比如MySQL,因为数据库是在云里面的,他们会随时设定一个用户名和密码,然后更新你的程序的配置。如果是Rails,他们会自动把这些需要的 rubygems拿回来做build,最后把所有的东西全部打包放到DEA之中,这就是程序真正运行的地方,这个时候程序就真正开始运行了。现在 Cloud Controller存在一些问题,比如安全方面,因为Build用户上传的程序其实有一些安全风险。
Router其实很简单,就是一个简单的Ruby程序,当一个程序部署之后,开始运行的时候它会把这个信息告诉Nats,我已经可以处理用户的请求了,Nats会告诉Router这个信息,之后再有新的用户发过来的请求,Router就会正确的将这个请求发送到一个正在运行中的Instance上面。
这一张是DEA,就是Cloud Foundry之中程序真正在运行的时候,比如Rails、Java/Spring程序都是在DEA中运行的,DA会监控每个程序运行的状况,这个程序占了哪些Ports,占用了多少CPU,使用了多少内存。运行在DEA里的程序直接连接后端的Services。
最后这个是Service Provider,所有程序都是通过Service Provider来做的,当他们的Service启动,他们会告诉 Nats我这个Service已经好了,其他需要使用这个service的组件可以找到他们。如果有很多你已经有很多已经开发好程序,比如遗留系统,你可以把这个系统的API打包成一个Service放到Cloud Foundry里面。