码迷,mamicode.com
首页 > 其他好文 > 详细

Cloud Foundry学习(四)——Service

时间:2014-11-04 13:09:34      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   os   sp   文件   数据   div   

    Services:Cloud Foundry的Service模块从源代码控制上看就知道是一个独立的、可Plugin的模块,以方便第三方把自己的服务整合入 CloudFoundry生态系统。在Github上看到service是与CloudFoundry Core项目vcap独立的一个repository,为vcap-service。Service模块其中设计原则是方便第三方服务提供商提供服务。在 这方面CloudFoundry做得很成功,从Github上看,已经有以下服务提供:a)MongoDB; b) mysql; c) neo4j; d) PostgreSql; e) RabbitMQ; f) Redis; g)vBlob。基类都是放在base文件夹中。

    第三方如果需要自己开发CloudFoundry的服务,需要继承改写它里面的两个基础类:Node和Gateway;而里面一些操作, 如:Provision,可以在base的provisioner.rb基础上加入自己的逻辑,同样的还有Service_Error和 Service_Message等。关于如何写自己的Service,ELC的博客会推出相应文章详细论述,并不在本文的讨论范围里面,从架构了解上来 说,只要知道服务间的关系,知道个服务与base间透过继承关系来横向扩充,而CloudFoundry与apps调用Service是通过base来完 成这一简单的架构方法即可。

    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的流程如下图:

bubuko.com,布布扣
 注意,vmc/STS到cloud controller的通信,到gateway的通信都是HTTP REST请求,gateway和node之间是NAT的消息。
注意:CF提供的服务是已经部署(可能没启动)的服务,服务节点是初始化CF的时候就准备好的。没有下载软件包,安装,部署的过程。

bind service

    绑定服务到应用:查找服务实例,查找credentials并返回给cloud controller。创建的服务,应用还不知道,需要通过绑定将服务的credentials信息设置到应用的环境变量,应用才能访问到。

 绑定mysql服务的流程如下:


bubuko.com,布布扣

 核心代码

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

Cloud Foundry学习(四)——Service

标签:style   blog   http   io   os   sp   文件   数据   div   

原文地址:http://blog.csdn.net/u010515761/article/details/40780965

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!