【问题标题】:Cloud Foundry explainedCloud Foundry 解释
【发布时间】:2016-01-19 09:29:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: web-applications service cloud cloud-foundry paas


    【解决方案1】:

    我是 Cloud Foundry 的开发人员 - 是的,Cloud Foundry 确实有点模糊(不是双关语)。希望我能帮助澄清一下。

    Cloud Foundry 是一个platform as a service,但它下面需要一个infrastructure as a service。 Cloud Foundry 通过BOSH 工具支持vSphere、vCloud、OpenStack 和Amazon 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 工程师实现您的梦想功能——您也有源代码,因此您可以制作您需要的任何更改。它在the Apache 2.0 license 下可用,因此我们很乐意接受拉取请求,尽管不是必需的。

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

    【讨论】:

    • 而仍然模糊的是定价? cf stack 是免费的吗?你付了什么钱?有什么问题吗? :)
    • 马克,很棒的信息。如果 AcmeCorp 不断在本地部署新的 Fizzbuzz 实例,每个实例的缓存、消息传递、日志记录、数据库连接、环境变量等配置略有不同,这些配置是否可以参数化并在自助服务控制台中公开? CloudFoundry,允许开发团队在他们认为合适的时候配置和部署新的 Fizzbuzz 实例?
    【解决方案2】:

    我是 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 实例,您可以选择部署哪些服务并将其连接到您的应用程序.

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

    【讨论】:

    • 感谢您填写我的回答中的空白,安迪!
    • 感谢你们,Mark 和 Andy!但是,我仍然对 API 有疑问。 Cloud Foundry 提供的某种通用 API 是否允许我的应用程序本身是通用的,从某种意义上说,我的代码将与我选择的任何 IaaS 产品一起运行?哦,当我在做的时候,有没有代码教程可以告诉我如何开始?
    • 您无需担心“Cloud Foundry API”。如果你纠正了一个死掉的标准 node.js、Grails、Ruby 等应用程序,那么你应该能够将它推送到 CF,而无需任何特殊的代码更改。关于教程,您可以查看 docs.cloudfoundry.com
    • 很好的答案和很好的见解@MarkRushakoff 和 andy-piper。谢谢你写这篇文章!
    【解决方案3】:

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

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

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

    【讨论】:

    • 如果您无法发布 cmets,则不应使用答案作为其他选项。但是,我认为这是合法的,因为您正在改进答案。我会建议将来而不是提出新的答案,而是建议对现有答案进行编辑。
    • “据我了解,Cloud Foundry 确实没有特定的 API”——事实上,云控制器 API 确实有(记录在此 docs.cloudfoundry.com/docs/reference/cc-api.html)。 “关于日志、监控和诊断的几句话。目前尚未在 CF PaaS 级别上实现”——这些功能正在通过正在开发的 Loggregator 添加。
    • 好吧,据我了解,所提到的 API 不是 PaaS 管理 API(当然,它在 CF 中实现并在 Andy 提供的链接中进行了描述),而是来自已部署应用程序的 API观点(可以被部署的应用程序调用的 API)。没有这样的应用程序 API(基本上,据我了解,因为支持大量框架)。如果我错了,请纠正我。
    【解决方案4】:

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

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

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

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

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

    3。一个固执己见的多语言应用程序运行时

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      相关资源
      最近更新 更多