深度剖析深度剖析CloudFoundry的架构设计的架构设计
VMware在今年4月份突然发布了业内第一个开源的PaaS——CloudFoundry。发布至今的这几个月里,笔者一直关注它的演
进,并从它的架构设计中获益良多,觉得有必要写出来与大家分享一下。
本文会分为两个部份:第一部份主要介绍CloudFoundry的架构设计,从它所包含的模块介绍起,到各部份的消息流向,各模
块如何协调合作;第 二部份会在第一部份的基础上,以如何在你的数据中心里面用CloudFoundry部署一个私有PaaS为目标,
把第一部分介绍到的架构知识使用起来。
第一部份讲的很多内容,会引用Pat在10月12日的VMwareCloud Forum上面关于CloudFoundry架构的演讲。Pat是
CloudFoundry Core的负责人,他的那次演讲很值得一听。如果你当时在场,并且理解他所说的内容,本部份可以选择直接跳
过。我除了会把说的内容讲具体点外,不太可能可 以讲得比他好。
一、架构及模块
从总体地看,CloudFoundry的架构如下:
这个架构图以及下文所用到的各模块架构图均来自Pat的PPT。从上图能够看到CloudFoundry主要有以下几大组件组成:
1、 Router:顾名思义,Router组件在CloudFoundry中是对所有进来的Request进行路由。进入Router的request主要有两
类:首先是来自VMCClient或者STS的,由CloudFoundry使用者发出的,管理型指令。
例如:列出你所有apps的vmcapps,提交一个apps等等。这类request会被路由到AppLife Management组件,又叫
CloudController组件去;第二类是外界对你所部署的apps访问的request。这部份requests 会被路由到Appexecution,又或者
叫做DEAs的组件去。所有进入CloudFoundry系统的requests都会经过Router组件, 看到这里可能会有朋友会担心Router成为
单点,从而成为整个云的瓶颈。
但是CloudFoundry作为云系统,其设计的核心就是去单点依赖,组件平行扩充,且可替代的以保证扩展性,这是
CloudFoundry,甚 至所有云计算系统的设计原则,后文会讨论CloudFoundry如何做到这点,目前只要知道,系统可以部署多
个Routers共同处理进来的 requests,但是Router上层的LoadBalance不在CloudFoundry的实现范围,CloudFoundry只保证所
有的 request是无状态的,这样就使上层均衡附载选择面非常非常大了,例如可以通过DNS做,也可以部署硬件的
LoadBalancer,或者简单点,弄 台ngnix作负载均衡器,都是可行的。
Router组件,目前版本是对nginx的一个简单封装。熟悉ngnix的朋友应该知道,它可以一个套接字文件(.sock文件)作为输
入输出。所有安装CloudFoundry的Router组件服务器都会安装一个nginx,其ngnix.conf文件有以下配置:
从整体的来看,Router组件的结构如下: