Cloud Foundry解释说

所以我一直在读Cloud Foundry,但是我仍然对它是什么感到困惑。 这里是我在CF上的PaaS,希望你们可以告诉我,如果我错了,解释一下好一点。

像Microsoft Azure或Google AppEngine这样的传统PaaS产品提供了开发,testing,托pipe和pipe理您的Web应用程序的完整平台。 但是,您必须使用他们的API,并且仅限于他们提供的服务以及他们支持的语言/框架。

Cloud Foundry似乎是某种“中间人”,它允许您的应用程序使用来自许多公共云的服务。 它是如何完成的? 是否有一个您使用的API,比如LibCloud或JCloud? 例如,您可以使用一个服务提供商提供的服务,另一个服务提供商提供另一个服务吗? Cloud Foundry本身是否提供任何服务,还是仅仅是一个中间人,允许您轻松地从一个平台迁移到另一个平台,并在一个应用程序中使用来自不同提供商的不同服务组合?

我是Cloud Foundry的开发人员 – 是的,Cloud Foundry确实有点模糊(没有双关语意思)。 希望我能帮助澄清一些事情。

Cloud Foundry是一个平台即服务 ,但它需要一个基础架构作为服务 。 Cloud Foundry通过BOSH工具支持vSphere , vCloud , OpenStack和Amazon AWS作为基础架构。 大多数Web应用程序开发人员并不关心这一点,但对于那些不得不担心大型IT基础架构的人来说,这是非常酷的。

假设你负责AcmeCorp的IT工作。 你有5万名员工都使用你的内部networking服务Fizzbuzz来帮助他们完成工作。 为了支持所有的员工,需要在几台拥有强大处理器和大量内存的机器上运行Fizzbuzz应用程序的数十个实例,并且需要大量磁盘空间来存储由您使用的Foo,Bar和Baz应用程序生成的信息内部也是如此。 您远远超出了您自己的刀片服务器上pipe理的范围,因此您决定租用数据中心。

不幸的是,AcmeCorp是可怕的function障碍。 财务部门在使用数据中心方面拥有巨大的发言权,而且每过几年它们都会让您从一个数据中心切换到另一个数据中心。 每隔几年,您就有几个星期的停机时间,而您的工程师尝试通过切换vSphere,vCloud,OpenStack或其他任何方式修复Fizzbuzz中的错误。

如果您的工程师已经针对Cloud Foundry写了Fizzbuzz,Foo,Bar和Baz,而不是直接针对底层基础架构,那么您的宕机时间将会最小化。 您不必担心被locking到特定的数据中心,因为Cloud Foundry已将该主机层抽象掉了。 Cloud Foundry也支持一些特定的服务,包括PostgreSQL,MySQL,Mongo,Redis和RabbitMQ等等。 如果Foo,Bar和Baz使用Cloud Foundry提供的服务,那么当您在基础架构之间迁移时,就不必担心了。

之后,你会意识到,通过将Fizzbuzz卖给其他大型企业,你可以赚大钱。 您的状况非常好:因为您的工程师重新架构Fizzbuzz以在Cloud Foundry上运行,您只需将Cloud Foundry部署到AWS即可。 客户试了六个月,决定不再续约? 没问题,你没有任何数据中心租赁担心 – 只是终止所有这些EC2实例,继续前进。 您可以轻松地为每个Fizzbuzz实例提供一个Cloud Foundry部署即服务,这样您的客户数据就完全相互隔离了。

Cloud Foundry是开源的。 如果您发现它不适合您的需求,则不必仅仅通过电子邮件发送支持,而是等待Cloud Foundry工程师实现您的梦想function – 您也有源代码,以便您可以任何你需要的改变。 它可以在Apache 2.0许可下使用 ,所以很容易接受pull请求,虽然不是必需的。

我希望能够描绘出Cloud Foundry解决的各种问题。 随意在评论中询问更多细节,或者如果这对于将来的问题更有意义,可以查看Cloud Foundry邮件列表 。

我是Cloud Foundry的开发者倡导者,希望在Mark的回答中增加一点,以便重点关注您在原始问题中提到的其他一些细节。

首先,你提到GAE和Azure。 这两者都有一定的局限性 – 例如,GAE限制您使用特定的语言和API。 也不是开源。 CF是可扩展的(新版本例如有buildpack支持,使您可以select“任何”语言运行库),并且您可以select在需要的地方运行它。

Mark提到4个IaaS提供商,我们可以在今天运行CF,但假设有问题的IaaS(假设我们包括Azure,CloudStack,Google Compute Engine等作为未来的目标)可以支持一小部分我们称之为云提供商接口(CPIs ),那么您也可以将Cloud Foundry部署到这些基础架构上。

您问如何使用来自不同提供商的服务。 像Heroku一样,即将推出的Cloud Foundry(.com)版本将支持“市场”,您可以从其他供应商那里插入function,如果您正在运行自己的Cloud Foundry实例,则可以select要部署和连接到应用程序的服务。

这很酷:-)如果你想知道更多的话,请在邮件列表上与我们联系。

想将这个作为关于API的评论添加到Andy的答案中,但不幸的是没有足够的声望去做。 据我了解,Cloud Foundry确实没有特定的API,但它通过环境variables(如VCAP_SERVICES, VCAP_APPLICATION, VCAP_CONSOLE_IP, VCAP_APP_PORT )提供了许多有用的信息,可以从任何语言或框架访问。 尽pipe这些variables的许多信息是Cloud Foundry的内部信息,但其中一些信息可能相当有用。 主要的是VCAP_SERVICES ,提供有关服务的信息,绑定到您的应用程序。

例如,如果我想要收集有关Azure云服务实例(即其ID)的信息,我的应用程序正在运行该实例,则我将使用Azurepipe理库中的此类 。

Cloud Foundry提供了VCAP_APPLICATION env。 variables,其中将包含以下字段:

 {"application_users": [], "instance_id":"97467a9cf508cb75273284b948b6319b", "instance_index":1, "application_version":"330b7caf-50e5-48f4-8792-1c80a90b06f1", "application_name":"helloworld", "application_uris":["helloworld.vcap.me"], "started_at":"2013-07-22 10:58:16 +0300", "started_at_timestamp":1374479896, "host":"0.0.0.0", "port":61014, "limits":{"mem":256,"disk":1024,"fds":16384}, "version":"330b7caf-50e5-48f4-8792-1c80a90b06f1", "name":"helloworld", "uris":["helloworld.vcap.me"], "users":[], "start":"2013-07-22 10:58:16 +0300", "state_timestamp":1374479896} 

最后,谈谈日志,监视和诊断。 这个目前没有在CF PaaS级别上实现,但是我希望这会被实现(因为这是一个非常有用的function),也许一些新的env。 variables(如VCAP_LOGS, VCAP_PERFORMANCE_COUNTERS )将暴露给我们的应用程序。

当然CF是你的IaaS(服务器,存储和networking)和你的应用程序之间的一个抽象层,给你提供了在公有云和私有云之间移动你的应用程序的可移植性,但是它也是更多的:

1.高度横向扩展的基于容器的平台

应用程序运行在容器中,比将应用程序分配给主机(VM)更好的资源pipe理。 守望者/花园是CF本地容器技术,尽pipe在最近的版本中也支持Docker。

2.为您的应用程序提供多层HA的自我修复平台

健康pipe理系统可以使失败的应用程序实例,容器主机,平台进程和虚拟机复活,而不会中断。 可用区域支持在基础架构层提供HA。 即使在部署或平台升级期间,滚动更新和金丝雀部署也可实现零停机时间。

3.一个有意见的,多语言应用程序运行时

使用heroku“buildpack”构造,应用程序语言被自动检测,相应的运行时栈build立在vanilla操作系统映像之上,允许开发人员专注于编写代码。

4.开发人员按需提供有状态数据服务

开发人员可以自动提供一个MySQL,RabbitMQ,Redis等集群的uri /凭证自动注入到他们的应用程序的环境。