Cloudfoundry(CF)是VMware推出的开源的PaaS平台,提供给用户应用部署运行的环境,并支持多种第三方应用服务。
概述
Cloudfoundry目前支持的服务主要有:
RDS:mysql,postgresql
NoSQL:redis,mongodb,couchdb,neo4j
MQ:rabbitmq
Filesystem:local,nfs
Object Storage: vblob
Cache:memcached
其他应用服务:elasticsearch,oauth
并且用户可以方便的将自己的服务加入到CF中来。
服务模块
cf提供的服务按模块分可以分为:service gateway和 service node。类层次结构上分为两层:vcap-service-base提供了base的getway(vcap-service-base\lib\gateway.rb启动gateway,启动了一个thin服务器,vcap-services-base\lib\base\asynchronous_service_gateway.rb,提供服务的处理方法)和node,具体的服务则需重载或实现gateway和node的一些方法。
Service Gateway
service gateway提供REST接口。从cloud controller过来的请求会先到service gateway做初步的处理,接着查找对应的服务节点,将请求通过发消息的方式委托给具体服务的节点处理。
Service Node
Service Node负责具体的处理gateway的消息,管理service如创建(provision)删除(provision)绑定(bind)解绑(unbind),恢复服务(restore)等,并将具体请求发送到服务实例。
重要的概念
Service Instance
服务实例,具体的运行的服务进程,如运行着的mysqld。运行在Service Node中,由Service Node管理,为DEA中的app提供服务。
Credentials
凭据,服务的配置和认证信息。创建服务的时候,service node会创建credentials,绑定app时则加入到app的环境变量中,app拿到改信息则可以访问具体的服务。
关键工作流程
provision service
创建服务实例,生成credentials。这里的创建服务,对不同的服务类型处理方案是不同的,例如mysql则是创建一个数据库和一个用户,并没有新的服务实例启动。而对于redis则是启动了新的服务实例。
创建mysql的流程如下图:
注意,vmc/STS到cloud controller的通信,到gateway的通信都是HTTP REST请求,gateway和node之间是NAT的消息。
注意:CF提供的服务是已经部署(可能没启动)的服务,服务节点是初始化CF的时候就准备好的。没有下载软件包,安装,部署的过程。
bind service
绑定服务到应用:查找服务实例,查找credentials并返回给cloud controller。创建的服务,应用还不知道,需要通过绑定将服务的credentials信息设置到应用的环境变量,应用才能访问到。
绑定mysql服务的流程如下:
核心代码
cloud controller
1. cloud_controller-master\cloud_controller\config\routes.rb:cloud controller URL到方法映射
2. cloud_controller-master\cloud_controller\app\controllers\services_controller.rb:针对service的controller
gateway
1. vcap-services-base-master\lib\base\asynchronous_service_gateway.rb:暴露接口的gateway
2. vcap-services-base-master\lib\base\provisioner.rb:gateway的服务方法
Service Node
1. vcap-services-base-master\lib\base\node.rb:node基类
2. cf-services-release-master\src\mysql_service\lib\mysql_service\node.rb:mysql node
参考
1. http://docs.cloudfoundry.com/docs/using/services/
2. http://cnblog.cloudfoundry.com/2012/06/30/69/
3. http://blog.sina.com.cn/s/blog_902f34a901014hw5.html
4. http://blog.csdn.net/shlazww/article/details/8112874
5. http://blog.csdn.net/minghe_uestc/article/details/8577856
6. 源码,日志