看起来,Cloud Foundry是某种“中间人”,它允许你的应用程序从许多公共云中使用服务。它是如何实现这一点的呢?是否有一个单一的API可以使用,类似于LibCloud或JCloud?例如,你可以使用一个提供商的服务,以及另一个提供商的服务吗?Cloud Foundry本身提供任何服务,还是仅仅是一个中间人,允许你轻松地迁移到另一个平台,并在单个应用程序中使用来自不同提供商的不同服务组合?
我是Cloud Foundry的开发者——是的,Cloud Foundry确实有点模糊(无意冒犯)。希望我能帮助澄清一些事情。
Cloud Foundry是一个平台即服务,但它需要在其下面拥有一个基础设施即服务。通过BOSH工具,Cloud Foundry支持vSphere、vCloud、OpenStack和Amazon AWS作为基础架构。大多数Web应用程序开发人员不关心这些,但对于那些必须担心大型IT基础设施的人来说,这真的很酷。
您是AcmeCorp的IT负责人。您有50000名员工,他们都使用内部Web服务Fizzbuzz来帮助完成工作。为了支持所有员工,您需要在几台配备强大处理器和大量内存的机器上运行数十个Fizzbuzz应用程序实例,并且还需要大量磁盘空间来存储内部使用的Foo、Bar和Baz应用程序所生成的信息。您已经远远超出了自己管理刀片服务器的能力范围,因此您决定租用数据中心。我是Cloud Foundry的开发者倡导者,想要在Mark的回答基础上添加一些内容,关注你原始问题中提到的其他细节。
首先,你提到了GAE和Azure。这两个平台都有一定的限制 - 例如,GAE限制了特定语言和API的使用。两者都不是开源的。CF是可扩展的(新版本支持构建包,例如,使您能够选择“任何”语言运行时),并且您可以选择在所需的位置运行它。
Mark提到了4个我们今天可以在IaaS上运行CF,但是假设涉及的IaaS(让我们将Azure、CloudStack、Google Compute Engine等作为未来目标)能够支持少量我们称之为云服务提供程序接口(CPIs),那么您也可以在这些基础架构上部署Cloud Foundry。
你问如何使用不同供应商的服务。像Heroku一样,即将发布的Cloud Foundry(.com)版本将支持一个“市场”,您可以从额外的供应商插件功能,如果您正在运行自己的Cloud Foundry实例,则可以选择哪些服务部署并连接到您的应用程序。
非常酷!如果您想了解更多,请在邮件列表中与我们交流!
我希望能添加一些关于API的评论到Andy的回答里,但是不幸的是我的声望还不够。据我所知,Cloud Foundry 确实没有特定的API,但它提供了许多有用的信息通过环境变量(例如VCAP_SERVICES,VCAP_APPLICATION,VCAP_CONSOLE_IP,VCAP_APP_PORT
),这些信息可以从任何语言或框架中访问。虽然许多来自这些变量的信息是 Cloud Foundry 内部的,但其中一些可能非常有用。 主要的一个是VCAP_SERVICES
,它提供关于绑定到您的应用程序的服务的信息。
例如,如果我想收集有关 Azure 云服务实例(比如它的 ID)的信息,我的应用程序当前正在运行,我将使用 Azure Management Library 中的此类。
反过来,Cloud Foundry 提供 VCAP_APPLICATION 环境变量,其中包含以下字段:
{"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平台上还没有实现此功能,但我希望这个功能能够被实现(因为它是非常有用的)并且可能会向我们的应用程序公开一些新的环境变量(比如VCAP_LOGS
, VCAP_PERFORMANCE_COUNTERS
)。