【Cloud Foundry】Cloud Foundry学习(四)——Service

2024-05-16 15:58
文章标签 学习 cloud service foundry

本文主要是介绍【Cloud Foundry】Cloud Foundry学习(四)——Service,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在阅读的过程中有任何问题,欢迎一起交流

邮箱: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,启动了一个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

这篇关于【Cloud Foundry】Cloud Foundry学习(四)——Service的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995367

相关文章

Spring Boot 3 整合 Spring Cloud Gateway实践过程

《SpringBoot3整合SpringCloudGateway实践过程》本文介绍了如何使用SpringCloudAlibaba2023.0.0.0版本构建一个微服务网关,包括统一路由、限... 目录引子为什么需要微服务网关实践1.统一路由2.限流防刷3.登录鉴权小结引子当前微服务架构已成为中大型系统的标

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Sentinel 断路器在Spring Cloud使用详解

《Sentinel断路器在SpringCloud使用详解》Sentinel是阿里巴巴开源的一款微服务流量控制组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、... 目录Sentinel 介绍同类对比Hystrix:Sentinel:微服务雪崩问题问题原因问题解决方案请

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06