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

邮箱: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

最新文章

  1. python(一)
  2. CSS3 文本3D效果
  3. [vijos P1034] 家族
  4. html公用库
  5. 启动另外一个activity,并返回结果
  6. Eclipse项目和MyEclipse项目
  7. 使用carrierwave出现MiniMagick::Invalid错误的解决方法
  8. leetcode Maximal Rectangle 单调栈
  9. Eclipse部署Web项目(图文讲解)
  10. awk学习笔记一:基础(转)
  11. perl中my和our的区别分析
  12. 原创:工作指派问题解决方案---模拟退火算法C实现
  13. c语言程序设计第4周编程练习(素数和)
  14. 打印机威胁:嵌入式Web服务有安全问题
  15. 学习ASP.NET Core Razor 编程系列十一——把新字段更新到数据库
  16. 【js】字符串方法
  17. java 运行时异常与非运行时异常理解
  18. kettle性能优化
  19. Java中的生产者、消费者问题
  20. Perl语言编程>>学习笔记2

热门文章

  1. unity3d中布娃娃系统
  2. PHP投票实现24小时间隔投票
  3. ES6 Promise catch
  4. Linux 系统目录结构(转)
  5. 进程上下文切换 – 残酷的性能杀手(上)(转载cppthinker.com)
  6. bootstrap的两种在input框里面增加一个图标的方式
  7. eclipse下的tomcat内存设置大小(转)
  8. asp.net生成视图时报错 未引用System.Runtime, Version...
  9. GCC手册学习(序)
  10. 【java设计模式】之 单例(Singleton)模式