所以我一直在阅读Cloud Foundry,但我仍然对它是什么感到困惑。这是我对CF上的PaaS的看法,希望你们能告诉我,如果我错了,并解释得更好。
像Microsoft Azure或Google AppEngine这样的传统PaaS产品提供了一个完整的平台来开发,测试,托管和管理您的Web应用程序。但是,您必须使用他们的API,并且仅限于他们提供的服务以及他们支持的语言/框架。
Cloud Foundry似乎是某种“中间人”,它允许您的应用使用来自许多公共云的服务。它是如何实现这一目标的?您使用的是单个API吗,比如LibCloud或JCloud?例如,您可以使用来自一个提供商的一项服务和另一家提供商的另一项服务吗? Cloud Foundry本身是否提供任何服务,还是只是一个中间人,允许您轻松地从一个平台迁移到另一个平台,并在一个应用程序中使用来自不同提供商的不同服务组合?
答案 0 :(得分:81)
我是Cloud Foundry的开发人员 - 是的,Cloud Foundry确实有点模糊(没有双关语意)。希望我能帮助澄清一些事情。
Cloud Foundry是platform as a service,但它下方需要infrastructure as a service。 Cloud Foundry通过vSphere工具支持vCloud,OpenStack,Amazon AWS和BOSH作为基础架构。大多数Web应用程序开发人员并不关心这些,但对于那些不必担心大型IT基础架构的人来说,这真的很酷。
说你负责AcmeCorp的IT。您有50,000名员工都使用您的内部网络服务Fizzbuzz来帮助他们完成工作。为了支持所有员工,您需要在具有强大处理器和大量内存的多台计算机上运行Fizzbuzz应用程序的数十个实例,并且您需要大量磁盘空间来存储由您使用的Foo,Bar和Baz应用程序生成的信息内部也是。您已经远远超出了您在自己的刀片服务器上管理的范围,因此您决定租用数据中心。
不幸的是,AcmeCorp非常糟糕。财务部门对您使用的数据中心有很大的发言权,每隔几年他们就会让您从一个数据中心切换到另一个数据中心。每隔几年,您就会有几周的停机时间,而您的工程师会尝试通过在vSphere,vCloud,OpenStack或其他任何设备之间切换来修复Fizzbuzz中的错误。
如果您的工程师针对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。
答案 1 :(得分: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实例,则可以选择要部署哪些服务并连接到您的应用
这很酷:-)如果您想了解更多,请来邮件列表与我们联系!
答案 2 :(得分:6)
希望将此作为关于API的评论添加到Andy的答案中,但遗憾的是没有足够的声誉来做到这一点。据我所知,Cloud Foundry确实没有特定的API,但它通过环境变量(例如VCAP_SERVICES, VCAP_APPLICATION, VCAP_CONSOLE_IP, VCAP_APP_PORT
)提供了许多有用的信息,可以从任何语言或框架访问。虽然这些变量的大量信息是Cloud Foundry内部的,但其中一些可能非常有用。主要的是VCAP_SERVICES
,它提供与您的应用绑定的服务信息。
例如,如果我想收集有关我的应用当前运行的Azure Cloud Service实例(例如,其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
)将会公开我们的应用程序。
答案 3 :(得分:3)
当然,CF是您的IaaS(服务器,存储和网络)与您的应用程序之间的抽象层,使您可以在公共云和私有云之间移动您的应用程序,但它还有更多:
<强> 1。高度可水平扩展的基于容器的平台
应用程序在容器中运行,允许更好的资源管理,而不是将应用程序分配给主机(VM)。 Warden / Garden是CF本地容器技术,尽管最近版本也支持Docker。
<强> 2。一个自我修复平台,为您的应用程序提供多层HA
健康管理系统可以恢复失败的应用实例,容器主机,平台进程和虚拟机,而不会中断。可用区域支持在基础架构层提供HA。滚动更新和金丝雀部署即使在部署或平台升级期间也可以实现零停机。
第3。一个自以为是的多语言应用程序运行时
使用heroku&#34; buildpack&#34;构造,应用程序语言是自动检测的,并且适当的运行时堆栈构建在一个vanilla OS映像之上,允许开发人员专注于编写代码。
<强> 4。开发人员按需配置有状态数据服务
开发人员可以自行配置一个MySQL,RabbitMQ,Redis等集群,并将uri /凭证自动注入其应用程序的环境中。