Cloud Foundry:主要组件介绍
Cloud Foundry
Cloud Foundry(以下称为cf)是PaaS中的一种,其提供抽象IaaS提供平台服务。可以用一句话总结cf的特性:“这是我的代码,给我在云平台上跑。不要告诉我其他细节上的问题。”
Here is my source code, run it one the cloud platform for me. I do not care how.
为了实现与IaaS的解耦,cf并不直接与IaaS交互,而是通过扩展运行的集群环境中的service和DEA组件(新版本由Diego替代),实现动态扩展和管理。cf的组件众多,下面依据《Cloud Foundry: The Definitive Guide》以及官方文档介绍cf主要的功能组件。
Routing
Router(路由)主要包括:GoRouter、TCPRouter、External Load Balancer。所有基于http的流量首先从外部负载均衡(External Load Balancer)进入,然后负载均衡再将请求指向GoRouter。
(Go)Router起到反向代理的功能,将所有来路HTTP流量指路到合适的组件(比如Cloud Controller、运行在Diego cell上的应用)。路由采用round-robin的方式将请求发送给后续组件。并且路由还会周期性地向Diego BBS(Bulletin Board System)查询每个应用当前运行的cells、containers,以便维护自身的路由表。路由表以cell’s IP以及host-side port for the cell’s containers 的形式构成。
Auth and User Management
cf使用UAA组件(user account and authentication)作为安全验证组件,其管理开发者、客户、应用的访问和身份验证。
OAuth2 authorization(授权访问):请求获取资源时通过访问凭证(tokens)进行授权
authentication(身份认证):使用凭证(credentials)对用户身份存储和管理。
SSO:单点登录
endpoint manager:端点管理
此外,用户身份存储还分为:内部存储和外部存储并通过LDAP、SAML访问。
App LifeCycle and System State
应用生命周期以及系统状态管理是Cloud Controller组件(以下简称cc)的功能。
cc对开发者暴露REST API以提供应用的部署功能(代替原来的DEA,Droplet Execution Agent)。当用户向cf提交应用后,cc会通过CC-Brige连接Diego Brain。Diego Brain会协助Diego cells进行软件的stage(部署到类生产环节环境)和run。
cc会使用两个组件进行系统状态的存储:一个是Blobstore,一个是ccdb(Cloud Controller Database)。
Blobstore用来存储大型二进制文件,例如:
- 源码包
- 资源文件
- buildpacks
- Droplets(pack + staging) and other container images
而ccdb存储cc的元数据。
此外还有提一下cc的监控同步组件。在cf中的任务分为Tasks(一次性)和LRP(Long Running Processes,长期执行)的概。对于LRP,我们需要依据用户调用所设置的实例数量,实时管理应用实例。
监控和同步的组件有nsync, BBS, and Cell Reps,进行持续监控状态并reconcile app(代替原来的HM9000组件)。
- nsync:收到cc消息,更新DesiredLRP
- bbs:launch or kill 实例,将ActualLRP匹配DesiredLRP
- cell rep:监控容器并提供AcutalLRP
App exec
cf中执行应用和tasks的组件为上面提及的Diego。Diego的意思是用go语言实现的DEA组件,可以说是cf的弹性运行时(elastic runtime)子系统,位于cf的核心。提供应用或者tasks的制定、编排和布局(scheduling、orchestration and placement)。
Garden是cf的容器(container)管理API。
Messaging
消息通讯走的是http或者https协议。有两个组件进行消息的存储。
一个是consul:存储长期存活的;另一个是上述监控同步使用的BBS(Bulletin Board System),存储的是实时更新的应用状态数据。
系统的路由触发器组件依然使用NATS Message Bus传输,用来广播最新的路由表。
Metrics and Logging
将系统组件的性能指标、应用日志聚合在一起的组件,名叫Loggregator(log aggregator)。Loggregator通过每个vm上部署的metron agent组件收集指标和日志。
Loggregator内部使用Firehose将日志聚合成结构化、易于使用的格式;使用Nzzle进行监控数据的分析。而Loggegator最后可以通过stream的形式将日志数据发送给开发者。
Others
Stack:拥有rootfs文件系统,与Droplets一起使用;Stack提供Container运行应用需要的文件系统。
Service Brokers:该组件与cc交互,支持第三方或者用户自己开发的服务。