一种基于容器的服务多版本共存实现方法与流程

文档序号:12491475阅读:177来源:国知局
一种基于容器的服务多版本共存实现方法与流程
本发明属于分布式服务领域,具体涉及一种基于容器的服务多版本共存实现方法。
背景技术
:互联网企业,由于业务发展迅速、需求变化快等因素,需要软件应用能快速地实现业务以及响应客户需求的变化,所以分布式服务得到了广泛的应用。分布式服务的使用带来了如下3大好处:(1)独立高负载模块:将负载高的模块独立成一个服务,部署到独立的机器上,使高负载模块独享硬件资源,也避免高负载模块影响其它模块的正常使用。例如:产品模块可能是个访问量很大的模块,可以将其以服务的方式发布,其它模块调用其服务来访问其功能;(2)方便系统容量的伸缩:当服务访问量增加时,独立的服务可通过简单的增加硬件的方式进行容量的扩充。而当服务访问量降低后,多余的服务可以停止,可节约硬件的使用。例如:上面的产品模块,当访问量增加后,可以直接增加产品服务来进行扩容,访问量降低后,多余的服务可进行停止,硬件回收;(3)利于功能模块的复用:对于多个系统需要公用的功能模块,可以独立成独立服务,降低代码的重复。例如:多个系统都有登陆模块,可以将其独立为服务的形式发布,避免登陆模块代码的重复。分布式服务虽然带来上述优势,但同时也带来让人头痛的难题,即无法方便的对服务进行升降级。目前通用的服务升级流程包括:步骤1:停止部分服务应用,对此部分服务进行升级操作,如果新服务的接口与老服务的接口不相同,则需要避免未升级的客户端访问到升级后的服务;步骤2:停止部分客户端应用,升级客户端应用,并指定其访问升级后的服务;步骤3:重复步骤1-步骤2,直至所有的服务全部升级完成;相对于集中式服务部署,分布式服务分布的复杂难度高。其一是因为在分布式服务部署中,集中式的应用被切分成了多个应用,各个应用部署在多台机器上,发布量成倍增长,导致服务升降级时需要操作的机器成倍增长;其二是因为传统服务的发布需要重启服务,导致发布时间较长,可能需要数分钟至数小时之久,进一步增加了分布式服务发布的难度;其三是由于缺乏对服务的明确标示,无法区分新老服务,当新服务与老服务不兼容时,需要避免老客户端访问新服务。如何突破传统服务发布需要重启的局限性,同时实现既享有分布式服务所带来的好处,又不会增加服务发布与升降级的难度是当前急于迫切解决的难题。技术实现要素:为突破现有技术的局限性,本发明的目的是,通过在服务提供端配置多个服务节点,每个服务节点内配置多个容器,每个容器装载不同的服务集,不仅实现多版本服务的共存,也实现服务共存环境中清晰地区分不同服务类型及同一服务类型的不同版本;利用容器区分新、老版本服务,当添加新服务或停止旧服务后,客户端能根据自身的版本自动筛选欲调用的服务版本,并从相应的容器内获得服务调用结果,减少因客户端与调用服务版本不相一致时的人为控制调用;多版本服务的共存使服务应用在升级过程不需要再通过重新启动加载新服务,简化服务升级的繁琐流程,实现分布式环境中的服务热部署;本发明的技术方案是:一种基于容器的服务多版本共存实现方法,其特征在于,通过在服务端(服务提供端)配置多个服务节点,每个服务节点内配置多个容器,每个容器装载不同的服务集,不仅使服务的多个版本共存,也使在服务共存环境中清晰地区分不同服务类型及同一服务类型的不同版本;利用容器区分新、老版本服务,当添加新服务或停止旧服务后,客户端能根据自身的版本自动筛选欲调用的服务版本,并从相应的容器内获得服务调用结果,减少因客户端与调用服务版本不相一致时的人为控制调用;多版本服务的共存使服务应用在升级过程不需要再通过重新启动加载新服务,简化服务升级的繁琐流程,实现分布式环境中的服务热部署;具体步骤如下:步骤1:环境初始化,(1)服务端内配置多个服务节点,不同服务节点以IP地址和端口号作为唯一识别;(2)服务节点配置多个装载服务集的容器,并为不同容器分配唯一的ID号;(3)服务节点启动,并检查服务集的配置信息,配置信息指明当前需要发布的服务集名称和版本,以及这些服务集在服务节点内如何分配的信息;所述服务集,是业务服务的集合,是业务服务在容器内部署的最小单位;每一次新服务发布前,服务节点要从服务集仓库中下载欲发布的服务集,获取服务集配置信息;服务集由服务集仓库统一管理,服务集仓库提供服务集的上传、下载及版本管理;所述容器,是部署服务集的组件,是用于提供服务集运行的必要环境;所述服务节点,是包含容器的服务应用;一台物理机能部署多个服务节点,一个服务节点内能部署多个容器;特别地,所述服务集仓库和所述容器不同属于一个概念,所述服务集仓库中存储所有当前需要发布的服务集的配置信息,而所述容器是用于加载所述服务集仓库中某一个服务集的内容;步骤2:服务节点运行过程中启动服务节点中的容器,服务节点按照经检查过的服务集配置信息,将各服务集装载入相应的容器中;每个容器仅装载一个服务集,且不同版本的服务集也由不同的容器装载;特别地,在服务节点的运行过程中,服务节点能通过启动容器、停止容器、发布服务集的操作,动态地操作容器装载需要发布的服务集或停止正在运行的容器;步骤3:由各个容器启动装载在各自内部的服务集,将服务集中当前需要对外发布的服务注册信息输入服务注册中心,注册消息包含需注册服务的名称、服务版本号、服务所在服务节点的IP地址和接口号,以及服务所在容器的ID号;步骤4:服务注册中心接收到由服务节点内容器发送的服务注册信息后,存储服务注册信息,并提取服务名称、服务版本号、服务所在容器的ID号,并依据黑白名单规则,针对记录在白名单中的客户端,向它推送所有有关该注册服务的服务信息;针对记录在黑名单中的客户端,则拒绝推送;步骤5:客户端接收由服务注册中心发送的服务名称、服务版本号、服务所在容器的ID号和服务所在容器的编号,并将接收到的上述信息缓存至本地,保存在客户端的服务列表中;所述服务列表,存储关于某一项服务的服务名称、服务版本号、服务所在容器的ID号等;步骤6:当客户端有服务调用需求时,从本地缓存中获取服务列表,当客户端有服务调用需求时,从本地缓存中获取服务列表,综合考虑客户端调用需求、客户端版本、调用服务的版本及调用服务的当前版本更新情况,在服务列表中进行筛选,确定唯一且合适的装载调用服务的服务节点和容器;筛选具体包括:(1)根据服务名称和版本号,从服务列表中筛选出符合要求的服务;(2)在服务列表中,如果匹配到服务名称,但是无法匹配版本号,则选择版本号最大的服务进行匹配;(3)从筛选出的服务中,依据相应的负载均衡算法逻辑,选择出装载该服务的唯一服务节点内的容器,向筛选出的容器发送服务调用请求;特别地,步骤6中,客户端本地缓存有关于某一项服务多个版本的信息,客户端在服务调用过程中,能根据客户端版本和服务调用需求,选择合适的服务版本进行调用;步骤7:客户端根据经步骤6筛选出的服务,将服务的服务名称、服务版本号、服务所在容器的ID号形成服务调用请求,按照服务所在服务节点的IP地址和接口号,将调用请求发送至对应的服务节点处理;步骤8:服务节点接收到服务调用请求后,解析请求内容,获取欲调用服务所在容器的ID号,并根据容器ID号选择该服务所在的容器对服务调用请求进行处理;步骤9:服务节点将服务调用请求发送至步骤8中已选择的容器,由接收调用请求的容器根据请求信息中的服务名称及服务版本号,找到容器中服务集内对应的服务,执行服务并将结果反馈至客户端;步骤10:针对正在运行的服务节点,如欲向服务节点内添加服务集或卸载服务集时,由接收到请求的服务节点根据请求指令执行容器的启动或关闭;在新添服务集和卸载服务集的过程中,以容器隔离新添的服务集与其他服务集、欲卸载的服务集与其他服务集的联系,使客户端对其他容器内的服务集调用不会受到更新和卸载的影响。在应用更新过程中需要新添服务集时,服务节点从服务集仓库中下载服务集,按照服务集配置信息启动服务节点内的容器,并加载新服务集至容器中;容器通过向注册中心发送服务注册信息,实现新版本服务的公开发布;若是停止服务需要卸载服务集时,首先,注册中心从推送服务列表中删除欲停止的服务,并将最新的服务列表推送给所有客户端,以确保之后不会有请求访问欲停止服务的新请求;然后,注册中心通知服务节点停止服务,当服务节点接收到消息后,将停止服务所在的容器,并执行销毁容器的操作,包括停止服务的对外服务、取消在注册中心内的服务注册;进一步地,当服务升级后,客户端仍能在未升级的情况下,正常继续对服务的调用,不会因服务的更新而间断服务的调用;在新版本服务添加成功后,依据客户端版本与服务版本的区别,有不同的服务调用逻辑:若客户端版本号与调用服务的老版本号一致,当服务新版本发布后,客户端按照版本号完全匹配优先原则,依然直接调用老版本服务;只有在服务老版本完全停止后,客户端才会自动访问新版本服务;若客户端版本号和调用服务的老版本号不一致,当服务新版本发布后,客户端直接获取新版本服务集。本发明与其他技术方案相比较,具有有益效果:(1)本发明通过在服务节点内设置多个容器,利用容器装载不同种类的服务,也包括同一服务的不同版本,使不同种类的服务、不同版本的服务之间相互隔离,保证多版本服务能在服务提供端的共存;(2)本发明在服务节点运行时,通过直接操控服务节点内的容器启动或停止,执行服务的添加或卸载,并利用容器的隔离性,实现新添服务或卸载服务能独立于其他正常运行的服务,使服务的发布或停止不再经过传统服务发布的系统重启步骤,减少服务发布或停止的时间,提高服务提供端的工作效率;(3)本发明通过在客户端设置选择逻辑,实现在多版本服务共存的环境中,客户端的服务调用能自动匹配到欲调用服务的最适合版本,减少服务升级过程中因新、老服务不兼容而导致需要人为控制客户端访问的操作,减少服务升级、降级及服务发布的难度;附图说明图1为本发明实施例中一种基于容器的服务多版本实现方法的实施结构图图2为本发明实施例中服务节点内的容器结构图图3为本发明实施例中一种基于容器的服务多版本共存实现方法实施流程图图4本发明实施例中客户端调用服务的流程示意图具体实施例为使本发明的技术方案、技术目的及技术效果更清晰明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。图1为本发明实施例中一种基于容器的服务多版本实现方法的实施结构图,具体包括服务端101、注册中心102、客户端103、服务节点1和服务节点2,服务节点1中包含容器1-1和容器1-2,服务节点2包含容器2-1和容器2-2;其中服务端与注册中心相连,新服务的启动后,由服务端向注册中心传送该服务的注册信息;注册中心与客户端连接,用于将已发布服务的信息传送至客户端存储;客户端与服务端连接,一方面向服务端的服务节点发送服务调用请求,另一方面根据服务调用请求,从服务端获取需要的服务;所述容器存在于服务节点中,是指装载服务集的服务单元;其中服务集是业务服务的集合,服务集的上传、下载、版本管理由服务集仓库执行;所述服务节点存在于服务端内,是装载容器的服务应用;所述服务端101用于向客户端103提供服务接口,服务端101内能包含多个服务节点,一个服务节点内能装载多个容器,且一个服务节点以唯一的IP地址和服务端口号作为身份标识;一个容器内装载一种服务,且每一个容器被分配有唯一的ID号;所述注册中心102是已发布服务的信息聚合区,用于接收服务端发送的服务注册信息;每一次应用更新或停止导致的服务版本的变化,注册中心以新添或删除的方式,更新服务的注册信息;所述客户端103是服务调用端;客户端调用服务时,在多版本服务共存的环境下,按照预设选择逻辑,在新版本服务发布后,能根据当前客户端的版本号,自动匹配最适合的服务版本进行调用;图2为本发明实施例中服务节点内的容器结构图,服务节点内包含两类容器,即基础容器和业务容器;基础容器中加载业务容器公用且不对外提供服务的服务集,是业务容器1、业务容器2、业务容器3运行的基础环境;业务容器在服务节点启动时,由服务节点按照当前需要发布的服务集配置信息,装载服务集入相应业务容器服务节点内创建有多个业务容器,每个业务容器在创建时由服务节点通过容器ID库提供唯一的ID号;当容器内装载入服务集后,自动启动对服务集的发布操作;每一个业务容器内只能装载一种服务集,或同一种服务集的不同版本,使服务节点内的不同服务集之间相互隔离;本发明实施例中有服务集1和服务集2,其中服务集1的版本有V1.0和V2.0,按照容器装载单一服务的原则,容器1中只装载服务集1-V1.0,容器2中只装载服务集1-V2.0,容器3中只装载服务集2-V1.0;图3为本发明实施例中一种基于容器的服务多版本共存实现方法实施流程图,本发明实施例在服务端配置多个服务节点,每个服务节点内配置多个容器,每个容器装载不同的服务集,用以区分不同的服务类型和同一类型服务的不同版本;同时利用不同容器装载不同服务,使各个服务之间相互隔离,使新版本服务和旧版本服务得以区分;在本发明实施例中,服务节点(192.168.1.100:9998)内设有业务容器1、业务容器2,其中业务容器1中装载服务集1-V1.0,业务容器2中装载服务集2-V1.0,现在因应用升级,服务节点(192.168.1.100:9998)的服务集1需要升级版本到2.0,并由注册中心对新版服务进行发布,具体步骤有:步骤301:注册中心向服务节点(192.168.1.100:9998)发送“发布服务集1的V2.0版”的消息:步骤302:服务节点(192.168.1.100:9998)接收到服务发布消息后,经消息内容解析后获取服务集1-V2.0的服务名称,根据服务名称从服务集仓库中下载服务集;步骤303:服务节点(192.168.1.100:9998)创建并启动一个容器,根据容器ID库为新建的业务容器编号为“3”;业务容器3装载在服务节点(192.168.1.100:9998)内;步骤304:服务节点(192.168.1.100:9998)将服务集1-V2.0装载入业务容器3中,因为服务集1-V1.0和服务集1-V2.0分布在不同的业务容器中,因而即将发布的服务集1-V2.0和已经发布的服务集1-V1.0之间相互隔离,并以容器ID作为区分;步骤305:服务节点(192.168.1.100:9998)提取服务集1-V2.0的服务名称、服务版本号、容器ID、服务节点IP及端口号形成注册消息,发送至注册中心内存储,本发明实施例中的注册消息内容具体如下表:表1:服务集1的注册信息服务名称服务版本号容器ID服务节点IP及端口号服务集1V2.03192.168.1.100:9998步骤306:由注册中心根据服务名称判断客户端是否有订阅过该服务的记录,若客户端订阅过相同服务,则将本次更新后的服务集信息发送至客户端,加入客户端的服务列表,缓存在客户端本地;若客户端没有订阅过相同服务,则在之后客户端有订阅需求时候,将更新后的服务集信息发送至客户端;服务集1经过版本升级后,现在客户端本地的服务列表中如下:表2:客户端本地的服务列表信息服务名称服务版本号容器ID服务节点IP及端口号服务集1V1.01192.168.1.100:9998服务集2V1.02192.168.1.100:9998服务集1V2.03192.168.1.100:9998V2.0版服务集1的信息和V1.0版服务集1的信息现同时存在于客户端本地的服务列表中时,客户端现欲调用服务集1,具体步骤参阅图4本发明实施例中客户端调用服务的流程示意图,包括:步骤401:客户端根据欲调用服务的名称,在服务列表中进行完全匹配,匹配结果如下表:服务名称服务版本号容器ID服务节点IP及端口号服务集1V1.01192.168.1.100:9998服务集1V2.03192.168.1.100:9998步骤402:客户端根据欲调用服务的版本号,在服务列表进行匹配;本发明实施例中没有明确规定调用服务的版本号,返回最新版服务的信息,匹配结果如下:服务名称服务版本号容器ID服务节点IP及端口号服务集1V2.03192.168.1.100:9998步骤403:在分布式服务分布环境中,同一版本服务会分布在不同服务节点的业务容器内,经过服务筛选后,服务筛选结果可能不止一条;客户端需要在调用前根据路由规则,从步骤402中过滤的服务列表中,确定唯一一个服务,按照服务列表中记录的服务节点IP及端口号,将服务名称、服务版本号形成服务调用消息,按照服务节点的IP地址(192.168.1.100)和端口号(9998)发送至相应的服务节点;步骤404:服务节点(192.168.1.100:9998)接收到服务调用请求,解析内容获取请求中的业务容器ID号,并将服务调用请求交由对应的业务容器处理;在本发明实施例中,由业务容器3处理服务调用请求;步骤405:业务容器3根据调用请求中的服务名称(服务集1),找到服务并执行,并将结果返回给客户端;所属领域的普通技术人员应当理解:以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1