63

所以我一直在阅读 Cloud Foundry,但我仍然对它是什么感到困惑。无论如何,这是我对 CF 上的 PaaS 的看法,希望你们能告诉我我是否错了,并更好地解释它。

Microsoft Azure 或 Google AppEngine 等传统 PaaS 产品提供了一个完整的平台来开发、测试、托管和管理您的 Web 应用程序。但是,您必须使用他们的 API,并且仅限于他们提供的服务和他们支持的语言/框架。

Cloud Foundry 似乎是某种“中间人”,它允许您的应用程序使用来自许多公共云的服务。它是如何做到这一点的?您是否使用单一 API,例如 LibCloud 或 JCloud?例如,您能否使用一个提供商的一项服务和另一家提供商的另一项服务?Cloud Foundry 本身是否提供任何服务,或者它只是一个中间人,允许您轻松地从一个平台迁移到另一个平台,并在单个应用程序中使用来自不同提供商的不同服务组合?

4

4 回答 4

86

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

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

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

不幸的是,AcmeCorp 功能异常严重。财务部门对你使用的数据中心有很大的发言权,每隔几年他们就会让你从一个数据中心切换到另一个数据中心。每隔几年,当您的工程师尝试修复 Fizzbuzz 中由于在 vSphere、vCloud、OpenStack 等之间切换而暴露的错误时,您就会有数周的停机时间。

如果您的工程师针对 Cloud Foundry 而不是直接针对底层基础架构编写了 Fizzbuzz、Foo、Bar 和 Baz,那么您的停机时间将会最小化。您不必太担心被锁定到特定的数据中心,因为该托管层已被 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 工程师实现您的梦想功能——您也有源代码,因此您可以制作您需要的任何更改。它在 Apache 2.0 许可下可用,因此很乐意接受拉取请求,尽管不是必需的。

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

于 2013-05-03T04:51:50.643 回答
23

我是 Cloud Foundry 的开发人员倡导者,想在 Mark 的回答中添加一些内容,以关注您在原始问题中提到的其他一些细节。

首先,您提到了 GAE 和 Azure。这两者都有一定的限制——例如,GAE 将您限制为特定的语言和 API。也不是开源的。CF 是可扩展的(例如,新版本支持 buildpack,使您可以选择“任何”语言运行时),您可以选择在您想要的地方运行它。

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

您询问如何使用不同提供商的服务。与 Heroku 一样,即将推出的 Cloud Foundry (.com) 版本将支持“市场”,您可以在其中插入来自其他供应商的功能,如果您正在运行自己的 Cloud Foundry 实例,您可以选择部署哪些服务并将其连接到您的应用程序.

这很酷 :-) 如果您想了解更多信息,请通过邮件列表与我们交谈!

于 2013-05-03T18:22:27.377 回答
6

想将此作为关于 API 的评论添加到 Andy 的答案中,但不幸的是没有足够的声誉来做到这一点。据我了解,Cloud Foundry 确实没有特定的 API,但它通过环境变量(例如VCAP_SERVICES, VCAP_APPLICATION, VCAP_CONSOLE_IP, VCAP_APP_PORT)提供了许多有用的信息,可以从任何语言或框架访问。虽然来自此类变量的大量信息是 Cloud Foundry 内部的,但其中一些可能非常有用。主要的是VCAP_SERVICES提供有关服务的信息,这些信息绑定到您的应用程序。

例如,如果我想收集有关我的应用程序当前正在运行的 Azure 云服务实例的信息(例如,它的 ID),我将使用Azure 管理库中的此类

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)将暴露给我们的应用程序。

于 2013-07-26T10:48:32.367 回答
4

当然,CF 是您的 IaaS(服务器、存储和网络)和您的应用程序之间的抽象层,为您提供在公共云和私有云之间移动应用程序的可移植性,但它还有更多:

1. 一个高度水平扩展的基于容器的平台

与将应用程序分配给主机 (VM) 相比,应用程序在容器中运行允许更好的资源管理。Warden/Garden 是 CF 原生容器技术,尽管最近的版本也支持 Docker。

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

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

3. 自以为是的多语言应用程序运行时

使用 heroku “buildpack” 结构,可以自动检测应用程序语言,并在 vanilla OS 映像之上构建适当的运行时堆栈,从而使开发人员可以专注于编写代码。

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

开发人员可以自行配置 MySQL、RabbitMQ、Redis 等集群的一部分,并将 uri/credentials 自动注入到他们的应用程序环境中。

于 2016-01-19T01:29:31.930 回答