问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何把自己的引用发布成cloudfoundry中的service

发布网友 发布时间:2022-04-26 19:49

我来回答

1个回答

热心网友 时间:2023-10-25 14:56

目前,CloudFoundry已经集成了很多第三方的中间件服务,并且提供了用户添加自定义服务的接口。随着Cloud Foundry的发展,开发者势必会将更多的服务集成进Cloud Foundry,以供app使用,也扩展了app的功能。
本部分主要描述通用service集成进入Cloud Foundry所需要做的设计以及实现。
1. service概念的对应
将通用的service类型集成进Cloud Foundry,需要做的第一个也是最重要的工作,就是须将待集成service的多种概念与Cloud Foundry中对于service的概念进行对应。
Cloud Foundry中这些概念包括:service instance,credentials,provision和bind等。
Cloud Foundry中service概念有很多,现将以上四种最为主要的概念进行具体的阐述:
1.1 service instance
serviceinstance是一项服务的具体事例。它是Cloud Foundry对于service操作的最终载体,存在于Cloud Foundry的Service Node中,上一层的管理者为Service Node。在实际应用过程中,service instance由Cloud Foundry上运行在DEA中的app访问,并且一个service instance可以被多个app同时访问。通用service的集成的首要任务就是,在通用service中抽象出service instance的具体表现形式。
1.2 credentials
credentials是serviceinstance的认证信息。当创建一个service instance的时候,Cloud Foundry会为这个service instance创建认证信息,也就是credentials,它的作用是:作为app访问这个service instance所必需的认证信息。在创建service instance的时候,Cloud Foundry将产生的credentials存在Cloud Controller,在执行app与service instance的时候,Cloud Foundry会重新生成一个credentials信息,然后由Cloud Controller在绑定app的时候,将这个credentials写入该app的环境变量中,以供app访问,app通过手持credentials信息直接通过RESTful接口,访问位于Service Node的service instance。通用service的集成中,credentials起到使得service instance之间互相独立的作用,另外还起到app访问service instance的凭证信息。
1.3 provision a service
provisiona service是指,在Cloud Foundry中在相应的Service Node上创建一个service instance的过程。其中主要包括两个方面的操作:第一,在Service Node创建service instance;第二,将service instance的credentials的信息传递给Cloud Controller,并对该数据进行持久化。通用service 的集成过程中,首先要实现的就是provision a service的工作,只有实现provision,才会有service instance的概念,并有之后对于service instance的种种操作。
1.4 bind a service
bind a service是指,在CloudFoundry中app应用需要使用一项service时,app发送请求绑定一个或多个service instance,并最后完成绑定的整个过程。bind a service是app访问service instance之前最后一步Cloud Foundry接管的操作。bind a service具体的操作是Cloud Foundry将serviceinstance的crdentials信息在app应用打包的时候,写入app的环境变量中,最终由app应用启动会被读取,app通过这个crdentials信息直接访问service instance。在通用service的集成过程中,bind是最为重要的步骤之一,只有bind成功后,service instance才有存在的意义。
2. 通用service的迁移
在明确了CloudFoundry中service的概念之后,紧接着就是将通用service向Cloud Foundry中迁移的问题。
在Cloud Foundry中,将通用service集成进来,有两个方面需要设计实现:第一,service数据的表现形式与存储形式;第二,service整体框架的设计与实现。
2.1 Service数据表现形式与存储形式
Service作为服务存在于CloudFoundry中,有很多种不同的类型。每一种类型的service在实现过程中,service instance都会以某种表现形式存在,Cloud Foundry对于service的操作全部都是限于这个service instance,关于service instance内部的具体操作,都是由app在访问这个service instance过程中来完成。
传统的关系型数据库中,serviceinstance的表现形式就是关系型数据库的一个db。这个db的创建由关系型数据库的server来创建。
这里db作为一种serviceinstance的表现形式,在Cloud Foundry中大多数的数据库服务中都有体现,不论是关系型数据库或者是NoSQL数据库。db的表现形式,只是Cloud Foundry中最常用的service表现形式,另外其他的service表现形式还有很多,也可以由Cloud Foundry service集*员自行定义。
Service数据表现形式定义完备之后,还需要设计完成Cloud Foundry中service相关信息内容的具体存储形式。
首先,设计实现serviceinstance的存储,是Cloud Foundry中关于service存储的首要任务。Service instance的存储形式,主要是提供一个可靠的环境供Cloud Foundry中app的访问。传统的关系型数据库以及NoSQL数据库都是以db为表现形式,以db形式存储于存储介质中,具体的组织由数据库server端接管并存储。另外,service instance可以根据应用场景的不同,根据抽象出的service instance概念,将service instance存储于其他的系统中,比如某些文件系统中等。
其次,service相关信息的存储,还包括在service操作过程中产生的重要信息的存储。例如,在service instance创建完毕之后,产生的credentials需要在多个地方进行存储。在传统的关系型数据库及NoSQL数据库中,credentials在Service Node,Service Gateway以及Cloud Controller处均有存储。其中,credentials在Service Node处的存储是另外维护一个db来存储所有service instance的crdentials,而在Service Gateway处的存储是直接存储在内存中的一个hash队列中;最终在Cloud Controller处也会对credentials信息进行持久化,存储在Cloud Controller的postgres数据库中。
2.2 Service框架实现
在Cloud Foundry中集成通用service的框架实现主要包括两个方面:ServiceNode实现与Service Gateway实现。当以上两个框架设计实现完毕之后,还需要将这个通用service的Service Node与Service Gateway作为Cloud Foundry的两个组件,将这两个组件的启动添加至整个Cloud Foundry的启动脚本中,以便Cloud Foundry的自动化启动。
2.2.1 Service Node实现
ServiceNode的功能主要是实现接收Service Gateway的请求,并最终向service server发送最终关于service instance的操作请求,并将操作结果保存并返回给Service Gateway。
ServiceNode的实现主要包括两个层次,一个层次是该类型service的Service Node模块实现,另一个层次是所有service的基类Service Base的实现。
首先关于基类ServiceBase的实现,通用service继承开发者不需要做很多,在Cloud Foundry的安装过程中,基类已经以Gem包的形式被安装至该类型Service Node的节点处。
要集成的service的Service Node则须集成开发者自行设计并实现。在该部分的设计实现中,除了基本的配置初始化,添加周期任务,连接消息中间件只为,最为重要的就是如何与更底层的service server的通信,这体现在provision与bind等方法的具体实现上。如果底层service server对外暴露接口,则调用接口的具体实现就在provision和bind等方法中。
2.2.2 Service Gateway实现
ServiceGateway的功能主要是从Cloud Controller处接收对于service instance的操作请求,将请求进行初步处理,通过处理后的结果,给相应的Service Node发送对于service instance的操作请求。
ServiceGateway的实现主要包括两个层次,一个层次是该类型service的Service Gateway模块实现,另一个层次是所有service的基类Service Base的实现。
所以通用service的ServiceGateway的实现,是由相应的Service Gateway创建一个继承Service Base的类。传统的关系型数据库以及NoSQL数据库服务,由于业务逻辑的缘故,只需要继承所有的Service Base类中的方法,即可实现所有的Service Gateway功能。
但是当继承某一项service的时候,由于service概念的差异,在ServiceGateway处具体实现的时候,并不是按着Service Base的业务逻辑来运行,所以需要在该类型service的Service Gateway处进行重写方法,或者新增方法实现。
2.2.3 Service Node与Service Gateway的启动
一旦将需要集成的service的Service Node和ServiceGateway设计完成并实现后,则需要将这两个组件的启动添加到Cloud Foundry。
这一部分所需要做的工作并不多,主要还是让Cloud Foundry在启动组件的时候,检测到集成进去的service的Service Node以及Service Gateway。并到相应的目录下,找到Service Node和Service Gateway的启动脚本并执行。以上为启动流程,停止等操作也是相同的原理。
CloudFoundry中注册的组件在vcap_components.json文件中,路径为:~/cloudfoundry/.deployment/devbox/config/vcap_components.json。在其中添加需要继承service的Service Node和ServiceGateway。
另外在执行的时候,CloudFoundry会执行vcap_components.rb文件。在该文件中,有具体启动时,需要启动的组件,则在该部分添加需要的Service Node和Service Gateway。具体代码如下:
## services: gateways & nodes
%w(redis mysql mongodb rabbitmq postgresql vblob neo4j memcached couchdb elasticsearch filesystem).each do |service|
ServiceComponent.register("#{service}_gateway")
end

%w(redis mysql mongodb rabbitmq postgresql vblob neo4j memcached couchdb elasticsearch).each do |service|
ServiceComponent.register("#{service}_node")
end
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
石料加工服务可以全部交给第三人完成吗 山东沃尔德集团集团所辖公司介绍 齐鲁银行无忧贷和市民贷哪个好 什么叫补按揭 后按揭贷款什么意思 买房者续按揭有什么危害 加按揭是什么意思 八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 如何把自己的引用发布成cloudfoundry中的service 北京鹏腾科技发展有限公司怎么样? PostgreSQL数据库中char,varchar和text的区别 PostgreSQL数据库中char,varchar和text的区别 房子买在石景山黑石头路九十九号院,我是北京市户口能从其它区迁移到石景山区吗 以下postgreSQL什么意思啊 能否详细解释下 黑石头路99号院怎么样?好不好?值不值得买? 如何向postgreSQL中添加bytea类型的大对象数据 如何使用Blob数据类型在Postgres-database 求一款高品质安卓手机内录声音软件, 或者教下怎么提取视频里的声音 postgresql blob好不好用 教你如何把手机里的照片传到U盘里! 这种小樱桃里面真的有蛆吗?如果有的话要怎么样才能让它出来。 樱桃里面的虫子能吃吗 樱桃为什么会有蛆 樱桃里真的有蛆吗 樱桃和杨梅里的蛆都是开花时蝇下的?其它水果如柚子里有这种蛆吗? 如果吾吃了有蛆的樱桃,蛆虫会寄生在体内吗? 泡好了樱桃酒 很漂亮 却发现里面有很多小的蛆 可以喝吗 樱桃里有蛆,你还敢吃吗? 北京汽车西站到石景山区黑石头路8号多远? 如何快速看懂navicat for PostgreSQL 模式和表 如何快速看懂navicat for PostgreSQL 模式和表 我在北京石景山区黑石头路,有什么共享汽车的APP? 如何使用c++调用postgis 函数 如何使用c++调用postgis 函数 收音机经典老歌在哪个台 有哪位知道为什么说数据库技术是信息资源管理最有效的手段 有哪位知道为什么说数据库技术是信息资源管理最有效的手段 如何接经典轩逸车收音机 EMS SQL Manager 破解版 for PostgreSQL好不好 EMS SQL Manager 破解版 for PostgreSQL好不好 我想为我公司申请一人免费的空间,把公司的资料发布出去 动态网页该学ASP,JSP,还是PHP?哪一种比较好比较流行一些? 安装sqlmap时出现的问题 最后出现 No module named thirdparty.clientfo... 安装sqlmap时出现的问题 最后出现 No module named thirdparty.clientform.clientform 懂行的人说下国产经典收音机哪种质量最好 请问一个asp,net的问题? 请问一个asp,net的问题? 弱弱的问个问题:扩展名是.php和.asp是什么文件啊,干什么用的啊?