实现服务发现的方法及设备技术

技术编号:17444622 阅读:23 留言:0更新日期:2018-03-10 18:14
本申请的目的是提供一种实现服务发现的方法及设备,本申请通过在服务端根据服务进程的服务地址创建对应的服务文件;将所述服务文件的路径写入服务列表文件中。在客户端对服务列表文件的变更进行监听,当监听到服务列表文件发生变更时,根据服务列表文件的变更确定所述服务列表文件中增加的服务文件的路径;对所述增加的服务文件的路径对应的服务文件的变更进行监听,当监听到所述服务文件发生变更时,根据所述服务文件的变更在本地路由缓存中添加或移除所述服务文件的网络地址。从而通过订阅服务列表文件的变更和订阅服务文件的变更实现服务发现,能够支持后端物理存储的水平扩展。

【技术实现步骤摘要】
实现服务发现的方法及设备
本申请涉及计算机领域,尤其涉及一种实现服务发现的方法及设备。
技术介绍
服务发现是大部分分布式系统和面向服务架构的核心组件。服务定位问题通常可以划分为两个子问题——服务注册和服务解析,其中,服务解析在某些特定语境下也被称作服务发现。目前,ApacheZooKeeper(开源文件应用程序接口)是一个比较典型的用来做服务发现的系统。它提供的树形ZNode(节点)结构,比较适合服务发现问题中单个域名与多个服务地址之间的关系。ZooKeeper(分布式的开放源码的分布式应用程序协调服务)提供针对ZNode孩子节点列表的订阅,当有新的孩子节点被加入或者已有孩子被删除时,其父节点将会收到类型为CHILD的变更通知。孩子节点本身的值,以及孩子节点的孩子节点,当它们发生变化的时候,不会触发父节点的CHILD变更。ZooKeeper提供一种称为“临时节点”(EphemeralZNode)的机制,临时节点与创建它的会话(Session)的生命期绑定,当会话因为心跳停止而超时的时候,临时节点本身也将会一同随着会话的结束而自动删除。会话是靠ZooKeeper的客户端与服务端之间的心跳维持的。ZooKeeper主要利用了上述机制实现服务发现。当一个服务进程成功启动后,它会在ZooKeeper上创建一个临时节点,临时节点的名称或内容被用来存储服务进程的网络地址,临时节点位于某个域名节点之下。客户端应用程序列举该域名下的孩子节点,并订阅该节点的CHILD事件。当某个服务进程注册之后,域名下的CHILD事件被触发,最终通知到所有客户端应用程序,客户端应用程序将重新列举出域名下面的孩子节点列表,并更新它们的缓存。当某已注册服务进程正常退出之前,它会删除之前创建的临时节点,同样会触发CHILD事件,最终会被客户端感知到。当某个已注册的服务进程意外退出后,虽然它之前注册的临时节点不会被主动删除,但是由于它与ZooKeeper服务端的心跳不再维持,因此在一段时间之后(会话超时),临时节点会被ZooKeeper服务端自动删除,这个行为同样会触发CHILD事件,最终会被客户端感知到。ZooKeeper实现服务发现的方法比较直观和简单,很自然地用到了树形结构、临时节点机制、CHILD订阅通知机制等特性。但存在两个问题:第一个是它强依赖与树形目录结构,导致基于普通key/value实现的后端无法直接采用这种方案,限制了这种方案的普适性;第二个是它不能基于被注册的节点做水平伸缩扩展,因为父节点和孩子节点的层次关系决定了它们必须存在同一个ZooKeeper服务器上,然而一个节点下能创建的孩子节点是有上限的。申请内容本申请的一个目的是提供一种实现服务发现的方法及设备,解决目前现有技术中强依赖树形结构,不具有普适性,且不能基于被注册节点做水平伸缩扩展的问题。根据本申请的一个方面,提供了一种服务端的服务发现方法,该方法包括:根据服务进程的服务地址创建对应的服务文件;将所述服务文件的路径写入服务列表文件中;当所述服务进程发生注销时,删除所述对应的服务文件并将所述服务文件的路径从所述服务列表文件中移除。进一步地,上述方法中,将所述服务文件的路径写入服务列表文件中,包括:在所述服务列表文件中写入新的服务文件的路径时,先读取所述服务列表文件中的原有的服务文件的路径,再将所述原有的服务文件的路径加上所述新的服务文件的路径作为回写内容,将所述回写内容更新到所述服务列表文件中。进一步地,上述方法中,将所述服务文件的路径写入服务列表文件中,包括:当有多个新的服务文件的路径写入所述服务列表文件中时,每次在服务列表文件中只写入一个新的服务文件的路径,其中,待上一个新的服务文件的路径写入所述服务列表文件形成新的服务列表文件后,再在所述新的服务列表文件写入下一个新的服务文件的路径。进一步地,上述方法中,将所述服务文件的路径写入服务列表文件中之后,包括:若所述服务进程发生异常退出,在所述服务进程的会话超时后删除所述服务文件。更进一步地,上述方法中,所述若所述服务进程发生异常退出,在所述服务进程的会话超时后删除所述服务文件之后,包括:判断所述服务列表文件中路径所对应的服务文件是否存在,若否,则将所述服务文件的路径从所述服务列表文件中移除。根据本申请的另一个方面,提供了一种客户端的服务发现方法,该方法包括:对服务列表文件的变更进行监听,当监听到服务列表文件发生变更时,根据服务列表文件的变更确定所述服务列表文件中增加的服务文件的路径;对所述增加的服务文件的路径对应的服务文件的变更进行监听,当监听到所述服务文件发生变更时,根据所述服务文件的变更在本地路由缓存中添加或移除所述服务文件的网络地址。进一步地,上述方法中,所述对服务列表文件的变更进行监听,当监听到服务列表文件发生变更时,根据服务列表文件的变更确定所述服务列表文件中增加的服务文件的路径包括:当监听到服务列表文件发生变更时,读取所述服务列表文件得到服务文件的路径;将未发生变更时的服务列表中的路径与发生变更时所述读取的服务列表中的路径进行比较,根据比较结果确定增加的服务文件的路径;根据所述增加的路径确定对应增加的服务文件。进一步地,上述方法中,根据服务文件的变更在本地路由缓存中添加或移除所述服务文件的网络地址,包括:判断所述服务文件是否存在,若是,则将所述服务文件的网络地址添加到所述本地路由缓存中。进一步地,上述方法中,根据服务文件的变更在本地路由缓存中添加或移除所述服务文件的网络地址,包括:判断所述服务文件是否不存在,若是,则将所述服务文件的网络地址从本地路由缓存中移除,并解除对所述服务文件的变更的监听。进一步地,上述方法中,当监听到服务列表文件发生变更时,根据服务列表文件的变更确定所述服务列表文件中增加的服务文件的路径,包括:当监听到服务列表文件先后依次发生多次变更时,根据最新的服务列表文件的变更确定所述服务列表文件中增加的服务文件的路径。进一步地,上述方法中,当监听到所述服务文件发生变更时,根据服务文件的变更在本地路由缓存中添加或移除所述服务文件的网络地址,包括:当监听到所述服务文件先后依次发生多次变更时,根据最新的服务文件的变更在本地路由缓存中添加或移除所述服务文件的网络地址。根据本申请的又一方面,还提供了一种用于服务发现的服务设备,所述服务设备包括:创建装置,用于根据服务进程的服务地址创建对应的服务文件;写入装置,用于将所述服务文件的路径写入服务列表文件中;修改装置,用于当所述服务进程发生注销时,删除所述对应的服务文件并将所述服务文件的路径从所述服务列表文件中移除。进一步地,上述服务设备中,所述写入装置用于:在所述服务列表文件中写入新的服务文件的路径时,先读取所述服务列表文件中的原有的服务文件的路径,再将所述原有的服务文件的路径加上所述新的服务文件的路径作为回写内容,将所述回写内容更新到所述服务列表文件中。进一步地,上述服务设备中,所述写入装置用于:当有多个新的服务文件的路径写入所述服务列表文件中时,每次在服务列表文件中只写入一个新的服务文件的路径,其中,待上一个新的服务文件的路径写入所述服务列表文件形成新的服务列表文件后,再在所述新的服务列表文件写入下一个新的服务文件的路径。进一步地本文档来自技高网...
实现服务发现的方法及设备

【技术保护点】
一种服务端的服务发现方法,其中,所述方法包括:根据服务进程的服务地址创建对应的服务文件;将所述服务文件的路径写入服务列表文件中;当所述服务进程发生注销时,删除所述对应的服务文件并将所述服务文件的路径从所述服务列表文件中移除。

【技术特征摘要】
1.一种服务端的服务发现方法,其中,所述方法包括:根据服务进程的服务地址创建对应的服务文件;将所述服务文件的路径写入服务列表文件中;当所述服务进程发生注销时,删除所述对应的服务文件并将所述服务文件的路径从所述服务列表文件中移除。2.根据权利要求1所述的方法,其中,所述将所述服务文件的路径写入服务列表文件中,包括:在所述服务列表文件中写入新的服务文件的路径时,先读取所述服务列表文件中的原有的服务文件的路径,再将所述原有的服务文件的路径加上所述新的服务文件的路径作为回写内容,将所述回写内容更新到所述服务列表文件中。3.根据权利要求1或2所述的方法,其中,所述将所述服务文件的路径写入服务列表文件中,包括:当有多个新的服务文件的路径写入所述服务列表文件中时,每次在服务列表文件中只写入一个新的服务文件的路径,其中,待上一个新的服务文件的路径写入所述服务列表文件形成新的服务列表文件后,再在所述新的服务列表文件写入下一个新的服务文件的路径。4.根据权利要求1所述的方法,其中,将所述服务文件的路径写入服务列表文件中之后,包括:若所述服务进程发生异常退出,在所述服务进程的会话超时后删除所述服务文件。5.根据权利要求4所述的方法,其中,所述若所述服务进程发生异常退出,在所述服务进程的会话超时后删除所述服务文件之后,包括:判断所述服务列表文件中路径所对应的服务文件是否存在,若否,则将所述服务文件的路径从所述服务列表文件中移除。6.一种客户端的服务发现方法,其中,所述方法包括:对服务列表文件的变更进行监听,当监听到服务列表文件发生变更时,根据服务列表文件的变更确定所述服务列表文件中增加的服务文件的路径;对所述增加的服务文件的路径对应的服务文件的变更进行监听,当监听到所述服务文件发生变更时,根据所述服务文件的变更在本地路由缓存中添加或移除所述服务文件的网络地址。7.根据权利要求6所述的方法,其中,所述对服务列表文件的变更进行监听,当监听到服务列表文件发生变更时,根据服务列表文件的变更确定所述服务列表文件中增加的服务文件的路径包括:当监听到服务列表文件发生变更时,读取所述服务列表文件得到服务文件的路径;将未发生变更时的服务列表中的路径与发生变更时所述读取的服务列表中的路径进行比较,根据比较结果确定增加的服务文件的路径;根据所述增加的路径确定对应增加的服务文件。8.根据权利要求6所述的方法,其中,根据服务文件的变更在本地路由缓存中添加或移除所述服务文件的网络地址,包括:判断所述服务文件是否存在,若是,则将所述服务文件的网络地址添加到所述本地路由缓存中。9.根据权利要求6所述的方法,其中,根据所述服务文件的变更在本地路由缓存中添加或移除所述服务文件的网络地址包括:判断所述服务文件是否不存在,若是,则将所述服务文件的网络地址从本地路由缓存中移除,并解除对所述服务文件的变更的监听。10.根据权利要求6所述的方法,其中,当监听到服务列表文件发生变更时,根据服务列表文件的变更确定所述服务列表文件中增加的服务文件的路径,包括:当监听到服务列表文件先后依次发生多次变更时,根据最新的服务列表文件的变更确定所述服务列表文件中增加的服务文件的路径。11.根据权利要求6所述的方法,其中,当监听到所述服务文件发生变更时,根据服务文件的变更在本地路由缓存中添加或移除所述服务文件的网络地址,包括:当监听到所述服务文件先后依次发生多次变更时,根据最新的服务文件的变更在本地路由缓存中添加或移除所述服务文件的网络地址。12.一种用于服务发现的服务设备,其中,所述服务设备包括:创建装置,用于根据服务进程的服务地址创建对应的服务文件;写入装置,用于将所述服务文件的路径写入服务列表文件中;修改装置,用于当所述服务进...

【专利技术属性】
技术研发人员:唐治洋卢毅军陶云峰
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1