在阅读的过程中有不论什么问题,欢迎一起交流

邮箱:1494713801@qq.com   

QQ:1494713801

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。启动了一个thinserver,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

【Cloud Foundry】Cloud Foundry学习(四)——Service的更多相关文章

  1. Spring Cloud 微服务架构学习笔记与示例

    本文示例基于Spring Boot 1.5.x实现,如对Spring Boot不熟悉,可以先学习我的这一篇:<Spring Boot 1.5.x 基础学习示例>.关于微服务基本概念不了解的 ...

  2. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  3. Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档

    0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...

  4. TweenMax动画库学习(四)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  5. SVG 学习<四> 基础API

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  6. Android JNI学习(四)——JNI的常用方法的中文API

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  7. SCARA——OpenGL入门学习四(颜色)

    OpenGL入门学习[四] 本次学习的是颜色的选择.终于要走出黑白的世界了~~ OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数 ...

  8. ZigBee学习四 无线+UART通信

    ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique messag ...

  9. Expression Blend学习四控件

    原文:Expression Blend学习四控件 Expression Blend制作自定义按钮 1.从Blend工具箱中添加一个Button,按住shift,将尺寸调整为125*125; 2.右键点 ...

  10. day 83 Vue学习四之过滤器、钩子函数、路由、全家桶等

    Vue学习四之过滤器.钩子函数.路由.全家桶等   本节目录 一 vue过滤器 二 生命周期的钩子函数 三 vue的全家桶 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 Vue的过滤 ...

随机推荐

  1. 移动端(阿里rem)布局

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 获取ping的最短、最长、平均时间

    # -*- coding: utf-8 -*- import osimport rep = os.popen('ping 120.26.77.101') out = p.read()regex = r ...

  3. 回调函数callback使用例子

    代码如下: <!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <tit ...

  4. 获取SQL Server的安装时间

    近期安装SQL Server 2014时.还没有正式的License,仅仅能试用3个月.想知道什么时候到期,就要知道SQL Server 2014是什么时候安装的.假设你没有特意记录安装日期(实际大部 ...

  5. mongodb安装的两条命令

    1. 安装 下载并安装,注意安装方式为custom,路径自定义(d:\chengxu\mongodb),安装成功后在mongodb文件夹下新建data文件夹(内新建db文件夹)和logs文件夹(内新建 ...

  6. angularJS 使用自定义指令输出模板

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  7. 关于wcf,webservice,webapi或者其他服务或者接口有什么区别 WCF、WebAPI、WebService之间的区别 【转载】HTTP和SOAP完全就是两个不同的协议 WebService学习总结(一)——WebService的相关概念

    wcf,webservice采用的是rpc协议,这个协议很复杂,所以每次要传递.要校验的内容也很复杂,别看我们用的很简单,但实际是frame帮我们做掉了rpc生成.解析的事情webapi遵循是rest ...

  8. Laravel 手动分页实现

    Laravel 手动分页实现 基于5.2版本 在开发过程中有这么一种情况,你请求Java api获取信息,由于信息较多,需要分页显示.Laravel官方提供了一个简单的方式paginate($perP ...

  9. MySQL加速查询速度的独门武器:查询缓存

    [导读] 与朋友或同事谈到MySQL查询缓存功能的时候,个人喜欢把查询缓存功能Query Cache比作荔枝, 是非常营养的东西,但是一次性吃太多了,就容易上火而流鼻血,虽然不是特别恰当的比喻,但是有 ...

  10. PCIe学习笔记(15)--- TLP的ROUTING方式

    PCIE是POINT TO POINT的,不像PCI,是SHARED-BUS,总线上的数据,是被所有EP DEV看到的. 这一点与USB2.0比较类似,是广播方式的(BROADCASTING) USB ...