CN113014433B - 基于消息传播的服务注册发现方法 - Google Patents
基于消息传播的服务注册发现方法 Download PDFInfo
- Publication number
- CN113014433B CN113014433B CN202110228696.3A CN202110228696A CN113014433B CN 113014433 B CN113014433 B CN 113014433B CN 202110228696 A CN202110228696 A CN 202110228696A CN 113014433 B CN113014433 B CN 113014433B
- Authority
- CN
- China
- Prior art keywords
- message
- instance
- service
- instances
- list
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000007246 mechanism Effects 0.000 claims abstract description 27
- 230000005540 biological transmission Effects 0.000 claims abstract description 9
- 238000012163 sequencing technique Methods 0.000 claims abstract description 7
- 230000008569 process Effects 0.000 claims description 11
- 230000036541 health Effects 0.000 claims description 10
- 238000001514 detection method Methods 0.000 claims description 9
- 230000008859 change Effects 0.000 claims description 8
- 238000012545 processing Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 10
- 238000012360 testing method Methods 0.000 description 9
- 238000002474 experimental method Methods 0.000 description 3
- 230000000644 propagated effect Effects 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000007480 spreading Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/50—Network service management, e.g. ensuring proper service fulfilment according to agreements
- H04L41/5041—Network service management, e.g. ensuring proper service fulfilment according to agreements characterised by the time relationship between creation and deployment of a service
- H04L41/5054—Automatic deployment of services triggered by the service manager, e.g. service implementation by automatic configuration of network components
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种基于消息传播的服务注册发现方法,在注册中心为每个微服务设置一个微服务实例集群,实例完成注册后,注册中心拉取最新的服务列表,根据预先设置的优先级比较规则对实例进行优先级排序,得到优先级列表,如果自身是最高优先级,则作为Leader状态的实例采用预设的消息传播机制在集群中散播服务列表;微服务实例集群中状态为Leader的实例,周期性地从注册中心获取最新的服务列表并采用预设的消息传播机制在集中散播,完成服务注册发现。本发明采用leader实例与注册中心同步服务列表,并用消息传播方式将最新服务列表同步给集群其他实例,从而提高服务注册发现效率,同时降低注册中心压力。
Description
技术领域
本发明属于云计算微服务架构技术领域,更为具体地讲,涉及一种基于消息传播的服务注册发现方法。
背景技术
微服务架构是目前web开发的主流架构,服务注册发现是微服务架构中的核心功能之一。各个微服务之间通过远程调用的方式,相互配合完成计算任务,这就需要服务注册发现机制为远程服务调用提供基础。
图1是传统服务注册发现架构图。如图1所示,传统的服务注册发现机制是,各个微服务实例启动后,向注册中心发送注册信息实现服务注册,同时设置定时任务,定时从注册中心拉取最新的服务列表。因此,从新的服务实例上线和服务宕机下线,到服务消费者收到服务列表变更消息通常需要几十秒甚至几分钟的时间,因此,服务注册发现效率比较低。
为了提高服务发现的效率,只能提高服务实例从注册中心拉取服务列表的频率,但是在系统中有几万甚至几十万微服务实例的情况下,大量的实例高频地从注册中心拉取最新的服务列表,这会导致注册中心负载过大。因此需要对服务注册发现方法进行进一步研究,解决以上问题。
发明内容
本发明的目的在于克服现有技术的不足,提供一种基于消息传播的服务注册发现方法,采用leader实例与注册中心同步服务列表,并用消息传播方式将最新服务列表同步给集群其他实例,从而提高服务注册发现效率,同时降低注册中心压力。
为实现上述发明目的,本发明基于消息传播的服务注册发现方法包括以下步骤:
S1:每个微服务实例启动时,将自身信息注册到微服务的注册中心;
S2:在注册中心中为每个微服务设置一个微服务实例集群,并设置服务列表存储对应实例信息,当实例完成注册后,从注册中心拉取最新的服务列表,根据预先设置的优先级比较规则对实例进行优先级排序,得到优先级列表;
S3:实例在确定集群中所有实例的优选级列表后,判断自身是否为最高优先级,如果不是,则不做任何操作;如果是,则将自身状态设置为Leader状态,并采用预设的消息传播机制将从注册中心获取的服务列表散播给集群中的其他实例,其他实例在收到服务列表后根据预先设置的优先级比较规则对实例重新进行优先级排序,对本地的优先级列表进行更新;
S4:微服务实例集群中状态为Leader的实例,周期性地从注册中心拉取最新的服务列表,检查是否发生变化,如果未变化,则不做任何操作,否则采用预设的消息传播机制将最新的服务列表散播给集群中的其他实例,其他实例在收到服务列表后根据预先设置的优先级比较规则对实例进行优先级排序,对本地的优先级列表进行更新;
S5:当实例关闭或失效后,注册中心将该实例从对应微服务的服务列表中剔除。
本发明基于消息传播的服务注册发现方法,在注册中心为每个微服务设置一个微服务实例集群,实例完成注册后,注册中心拉取最新的服务列表,根据预先设置的优先级比较规则对实例进行优先级排序,得到优先级列表,如果自身是最高优先级,则作为Leader状态的实例采用预设的消息传播机制在集群中散播服务列表;微服务实例集群中状态为Leader的实例,周期性地从注册中心获取最新的服务列表并采用预设的消息传播机制在集中散播,完成服务注册发现。
本发明具有以下有益效果:
1)本发明引入集群和leader概念,只有leader实例与注册中心同步服务列表,并用消息传播方式将最新服务列表同步给集群其他实例,从而提高服务注册发现效率,同时降低注册中心压力;
2)对消息传播机制进行了改进,通过使用定节点和随机节点相结合的节点选择规则、info消息和ask消息相结合的消息模式,提高消息传播效率;
3)在实例剔除环节,还设计了健康检测机制检测实例是否宕机,提高剔除异常实例的效率。
附图说明
图1是传统服务注册发现架构图;
图2是本发明中服务注册发现架构图;
图3是本发明基于消息传播的服务注册发现方法的一种具体实施方式流程图;
图4是实例注册为优先级最高实例的流程示例图;
图5是实例注册为非优先级最高实例的流程示例图;
图6是本实施例中消息传播机制的流程图;
图7是图6中消息散播对象处理info消息的流程图;
图8是实例的环形结构示例图;
图9是本实施例中实例健康检测的流程图;
图10是对本发明进行测试时所采用的微服务架构图。
具体实施方式
下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
实施例
为了更好地说明本发明的技术方案,首先对本发明的服务注册发现架构进行简要说明。图2是本发明中服务注册发现架构图。如图2所示,本发明中引入了集群和Leader概念,即同一个服务的所有服务实例属于同一个集群,然后根据优先级比较规则,优先级最高的服务实例成为集群中的Leader实例。只有Leader实例从注册中心同步最新服务列表,如果发现数据变化,则通过消息传播方式将最新的服务列表同步给集群的其他服务实例节点,因此,注册发现变成以集群为单位与注册中心同步数据。
图3是本发明基于消息传播的服务注册发现方法的一种具体实施方式流程图。如图3所示,本发明基于消息传播的服务注册发现方法的具体步骤包括:
S301:微服务实例注册:
每个微服务实例启动时,将自身信息注册到微服务的注册中心。在微服务架构中,注册中心是记录当前所有在线微服务实例的程序进程,是所有实例的信息源。自身信息一般包括实例的IP地址、端口号、服务名等。
S302:微服务实例加入集群:
在注册中心中为每个微服务设置一个微服务实例集群,并设置服务列表存储对应微服务实例信息,当实例完成注册后,从注册中心拉取最新的服务列表,根据预先设置的优先级比较规则对实例进行优先级排序,得到优先级列表。
本实施例中通过微服务实例的IP地址和端口号确定其优先级,比较规则为:先比较端口号,端口号小的优先级高,若端口号相同,则比较IP地址,IP地址小的优先级高。
S303:微服务实例确认自身状态:
实例在确定集群中所有实例的优选级列表后,判断自身是否为最高优先级,如果不是,则不做任何操作;如果是,则将自身状态设置为Leader状态,并采用预设的消息传播机制将从注册中心获取的服务列表散播给集群中的其他实例,其他实例在收到服务列表后根据预先设置的优先级比较规则对实例重新进行优先级排序,对本地的优先级列表进行更新。
S304:服务发现:
微服务实例集群中状态为Leader的实例,周期性地从注册中心拉取最新的服务列表,检查是否发生变化,如果未变化,则不做任何操作,否则采用预设的消息传播机制将最新的服务列表散播给集群中的其他实例,其他实例在收到服务列表后根据预先设置的优先级比较规则对实例进行优先级排序,对本地的优先级列表进行更新。
S305:服务剔除:
当实例关闭或失效后,注册中心将该实例从对应微服务的服务列表中剔除。
为了更好地说明本发明的技术内容,采用一个具体例子对本发明进行举例说明。
图4是实例注册为优先级最高实例的流程示例图。如图4所示,该注册中心为集群式,包括3个注册中心,存在两个微服务程序的集群。假设实例A为微服务程序1的集群中新注册的实例,且其在集群中优先级最高,其具体过程如下:
首先实例A注册到注册中心并拉取服务列表,实例A根据服务列表得到其自身为优先级最高的实例,则将自身状态设置为leader状态,将新的服务列表在集群中进行散播。原本为leader状态的实例1在收到实例A的消息后,切换为follower状态,然后其他非leader的实例转发实例A的消息,直到所有实例均接收到新的服务列表。
图5是实例注册为非优先级最高实例的流程示例图。如图5所示,假设实例B为新注册的实例,且其在集群中优先级最高,其具体过程如下:
首先实例B注册到注册中心并拉取服务列表,实例B根据服务列表得到其优先级列表。原本为leader状态的实例1与注册中心同步服务列表,在检测到服务列表更新后,将更新后的服务列表在集群内散播,直到所有实例均接收到新的服务列表。此时实例1的操作也就是服务发现的操作。
根据以上流程可知,消息传播机制是本发明服务注册发现方法中的一项重要技术,用于在Leader状态的实例发现服务列表发生变更时,将最新的服务列表在集群中快速传播。因此,消息传播机制需要保证传播效率、稳定性、网络带宽使用率。在实际应用中,可以根据需要来选择具体的消息传播机制。
在本实施例中,为了适应本发明的服务注册发现场景,借鉴Gossip协议的消息传播思想设计了一种消息传播机制。图6是本实施例中消息传播机制的流程图。如图6所示,本实施例消息传播机制的具体步骤包括:
S601:选择消息散播对象:
当Leader状态的实例需要向微服务实例集群中其他实例散播服务列表时,首先需要选择作为消息散播对象的实例。原生Gossip协议散播节点选择方法是随机选择K个实例,在实例较多的集群中,消息传播效率不稳定,并且理论上不能保证消息一定能传播到所有实例。
本实施例对消息散播对象的选择规则进行了改进,选择的消息散播对象分为两类:指定实例和随机实例。指定实例是某实例每次消息传播时,固定传播的对象。随机实例是某实例每次消息传播时随机选择的对象,通常在每次消息传播时都不相同。指定实例保证传播稳定性,随机实例提升传播效率,并且可以避免某些实例之间的网络抖动,导致消息传播中断。本实施例中消息散播对象的选择方法如下:
需要散播服务列表的实例按照优先级列表对所有实例标注序号,记所有实例的数量为N,需要散播服务列表的实例的序号为m,则指定实例的序号xi的计算公式为:
xi=(m+2i)%N
其中,%表示取余操作,i=0,1,…,K1-1,K1表示预设的指定实例数量。为了使信息散播更有效率,指定实例数量K1是满足不等式K1<log2N的最大正整数。例如N=14,m=3时,则K=3,散播的指定实例的序号为4,5,7。
然后随机指定K2个与指定实例不同的随机实例,K2表示预设的随机实例数量。本实施例中K2=K1,随机实例的序号yi的计算公式为:
将选择得到指定实例和随机实例作为消息散播对象,就可以将消息散播出去。
S602:向消息散播对象发送info消息:
Leader状态的实例生成info消息并将info消息发送给指定实例和随机实例。
表1是本实施例中info消息的格式。
info类型标识 | 消息起点IP地址:端口:消息起点启动时间 | 消息序号 | 消息内容 |
表1
如表1所示,本实施例中info消息包括四个字段,字段1为消息类型标识,字段2为消息起点IP地址、端口、消息起点启动时间,字段3为消息序号,即leader状态的实例当前所散播的info消息的序号,字段4为消息内容,即服务列表。
S603:消息散播对象接收并处理info消息:
当某个作为消息散播对象的实例C1收到info消息后,从中提取中每个字段的具体内容并进行处理。图7是图6中消息散播对象处理info消息的流程图。如图7所示,消息散播对象处理info消息的具体步骤包括:
S701:比较消息起点的实例和实例C1的优先级,如果消息起点实例的优先级高于实例C1的优先级,则进入步骤S702,否则丢弃info消息,结束流程;
S702:实例C1从所维护的“已接收消息实例列表”查询消息起点实例的启动时间是否存在,如果存在,进入步骤S703,如果不存在,则进入步骤S704。
S703:比较info消息中消息起点启动时间t1与“已接收消息实例列表”中该消息起点实例的启动时间t2,如果t1>t2,则进入步骤S704,如果t1=t2,进入步骤S705,如果t1<t2,则丢弃info消息,结束流程。
S704:更新启动时间:
将“已接收消息序号列表”中消息起点实例的启动时间更新为info消息中的启动时间,进入步骤S707。
S705:比较info消息中的消息序号b1和“已接收消息序号列表”中维护的已接收到该起点的消息序号b2,若b1>b2,则进入步骤S706,否则丢弃info消息,结束流程。
S706:将“已接收消息序号列表”中该消息起点的消息序号更新为b1。
S707:状态检查:
检查实例C1状态是否为Follower状态,若本实例不是,则切换本实例状态为Follower状态,进入步骤S708,否则不做任何操作,直接进入步骤S708。
S708:更新本地服务列表和优先级列表:
实例C1根据info消息中的服务列表对本地服务列表和本地优先级列表进行更新。
S709:生成ask消息并发送:
实例C1按照步骤S402中的相同方法选择消息散播对象,然后根据info消息中的消息起点IP地址、端口号、消息起点启动时间、消息序号,生成ask消息发送给所选择的消息散播对象。表2是本实施例中ask消息的格式。
ask类型标识 | 消息起点IP地址:端口:消息起点启动时间 | 消息序号 |
表2
S710:其他实例接收ask消息并反馈:
当某个实例C2接收到ask消息后,采用如下方法确定是否接受该info消息:
a)比较消息起点实例和实例C2的优先级,如果消息起点实例的优先级高于实例C2的优先级,则进入步骤b),否则向实例C1回复拒绝接受消息。
b)实例C2从所维护的“已接收消息实例列表”查询消息起点实例的启动时间,如果不存在,向实例C1回复接受,如果存在,则比较ask消息中消息起点启动时间t1与“已接收消息实例列表”中该消息起点实例的启动时间t3,如果t1>t3,向实例C1回复接受消息,如果t1=t2,进入步骤c),如果t1<t2,则向实例C1回复拒绝接受消息。
c)实例C2比较ask消息中的消息序号b1和“已接收消息序号列表”中维护的已接收到该起点的消息序号b3,若b1>b3,则向实例C1回复接受消息,否则向实例C1回复拒绝接受消息。
S711:继续散播服务列表:
实例C1对反馈接受消息的消息散播对象转发info消息。
可见,当所有实例均接收过某个info消息后,不会再有实例会回复接受消息,从而停止服务列表的散播。
根据以上描述可知,本实施例所提出的消息传播机制,主要进行了两个方面的改进,其一为采用结合指定实例和随机实例的消息散播对象选择方式,指定实例保证传播时间的稳定性,随机实例提升消息传播效率,其二是通过ask和info两种消息类型结合,减少info消息的冗余发送,降低网络带宽占用。
此外,为了使服务剔除更加及时有效,本实施例中还设计了一种健康检测机制检测实例是否宕机,以提高剔除异常实例的效率。为了便于理解,可以根据优先级列表中实例的顺序,相邻实例依次相连,优先级最高与最低的实例相连,构成逻辑上的环形结构。图8是实例的环形结构示例图。环上相邻的节点之间通过ask消息,检测对方是否宕机。图9是本实施例中实例健康检测的流程图。如图9所示,本实施例中实例健康检测的具体步骤包括:
S901:定时发送ask消息:
每个实例根据优先级列表,定时向优先级低一级的实例发送ask消息,如果某实例优先级最低,则向优先级最高实例发送ask消息,该ask消息包含了该实例最近一次接收到的info消息中的消息起点IP地址、端口号、消息起点启动时间、消息序号。每个实例在收到ask消息后则按照相应流程反馈是否接受消息。
S902:ask消息检查:
每个实例定时检查最近一次从优先级高一级的实例发送ask消息的时间τ1,并计算当前时间τ2与时间τ1之间的时间差Δτ=τ2-τ1。
S903:如果时间差Δτ大于预设阈值T,则进入步骤S904,否则不做任何操作,本次健康检测结束。
S904:转发ask消息:
实例向优先级高一级的实例发送相同的ask消息。
S905:如果接收到优先级高一级实例反馈的消息,则不做任何操作,本次健康检测结束,否则进入步骤S906。
S906:随机选择实例发送check消息:
实例在未接收到优先级高一级的实例反馈的消息时,随机选择Q个实例发送check消息,Q的值根据需要设置,check消息中包括需要被检测的实例的IP地址和端口号。表3是本实施例中check消息的格式。
check类型标识 | 需要被检测的实例IP地址:端口号 |
表3
S907:辅助检测:
接收到check消息的实例向需要被检测的实例发送ask消息,如果收到反馈的消息,则向注册中心反馈实例已应答消息,否则向注册中心反馈实例无应答消息。
S908:确定是否宕机:
如果注册中心在预设时间内收到Q个某实例无应答的消息,则判定该实例宕机,将该实例从对应微服务的服务列表中剔除,否则不作任何操作,本次健康检测结束。
为了更好地说明本发明的技术效果,采用本发明服务注册发现方法和eureka服务注册发现方法进行对比实验。图10是对本发明进行测试时所采用的微服务架构图。如图10所示,该微服务架构中有两种微服务程序:微服务程序service-one和微服务程序service-two,并且每种微服务实例各启动100个实例,相关参数如下:Leader状态节点从注册中心拉取最新服务列表周期T1=5000ms;节点健康检测向优先级低一级节点发送心跳定时任务周期T2=3000ms,节点检查心跳超时定时任务周期T3=4000ms。
在本次实验验证中,Eureka服务注册发现方法的相关配置采用的是默认配置参数,微服务程序从注册中心拉取服务列表的周期为30s,微服务程序心跳续约周期为30s。
首先对100个实例的集群内部消息传播效率进行测试。即Service-one集群中Leader状态的实例在集群中发布一条info消息,要经过多长时间,集群中100个实例全部都接收到这条消息。经过100次试验,集群中所有节点均接收到leader状态实例所散播的info消息的平均时长为1711.44ms。
接下来模拟实例宕机进行服务剔除效率进行测试,即测试当实例宕机后到集群中其他实例全部获知该实例宕机所需的时间。依次关闭service-two集群的100个实例,测试得到平均服务剔除时间为8006.63ms。而采用Eureka服务注册发现方法所测得的平均服务剔除时间为225296.29ms。
然后对服务发现效率进行测试,依次启动service-two的服务实例,测试实例启动后到集群中其他实例全部获知该实例启动所需的时间。依次启动service-two集群的100个实例,测试得到平均服务剔除时间为3921.09ms。而采用Eureka服务注册发现方法所测得的平均服务剔除时间为29285.35ms。
表4是本次实验验证所得到本发明方法和Eureka服务注册发现方法的性能对比表。
表4
如表4所示,本发明服务注册发现方法从注册中心的拉取服务列表的次数与Eureka注册发现机制的比值约为1:16,但是根据测试结果可以得到,意外宕机节点的剔除时间比值约为1:27,服务发现时间的比值约为1:7.5。基于消息传播的服务注册发现机制下对注册中心的请求压力大幅降低,同时还显著提高了意外宕机节点剔除和服务发现的效率。
尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
Claims (4)
1.一种基于消息传播的服务注册发现方法,其特征在于,包括以下步骤:
S1:每个微服务实例启动时,将自身信息注册到微服务的注册中心;
S2:在注册中心中为每个微服务设置一个微服务实例集群,并设置服务列表存储对应实例信息,当实例完成注册后,从注册中心拉取最新的服务列表,根据预先设置的优先级比较规则对实例进行优先级排序,得到优先级列表;
S3:实例在确定集群中所有实例的优先级列表后,判断自身是否为最高优先级,如果不是,则不做任何操作;如果是,则将自身状态设置为Leader状态,并采用预设的消息传播机制将从注册中心获取的服务列表散播给集群中的其他实例,其他实例在收到服务列表后根据预先设置的优先级比较规则对实例重新进行优先级排序,对本地的优先级列表进行更新;
S4:微服务实例集群中状态为Leader的实例,周期性地从注册中心拉取最新的服务列表,检查是否发生变化,如果未变化,则不做任何操作,否则采用预设的消息传播机制将最新的服务列表散播给集群中的其他实例,其他实例在收到服务列表后根据预先设置的优先级比较规则对实例进行优先级排序,对本地的优先级列表进行更新;
S5:当实例关闭或失效后,注册中心将该实例从对应微服务的服务列表中剔除。
2.根据权利要求1所述的服务注册发现方法,其特征在于,所述消息传播机制的具体步骤包括:
1)当Leader状态的实例需要向微服务实例集群中其他实例散播服务列表时,首先需要选择作为消息散播对象的实例,具体方法为:需要散播服务列表的实例按照优先级列表对所有实例标注序号,记所有实例的数量为N,需要散播服务列表的实例的序号为m,则指定实例的序号xi的计算公式为:
xi=(m+2i)%N
其中,%表示取余操作,i=0,1,…,K1-1,K1表示指定实例的数量;
然后随机指定K2个与指定实例不同的随机实例,K2表示预设的随机实例数量;将选择得到的指定实例和随机实例作为消息散播对象;
2)Leader状态的实例生成info消息并将info消息发送给指定实例和随机实例;info消息包括四个字段,字段1为消息类型标识,字段2为消息起点IP地址、端口、消息起点启动时间,字段3为leader状态的实例当前所散播的info消息的序号,字段4为服务列表;
3)当某个作为消息散播对象的实例C1收到info消息后,从info消息中提取每个字段的具体内容并进行处理,具体步骤包括:
3.1)比较该info消息起点实例和实例C1的优先级,如果所述info消息起点实例的优先级高于实例C1的优先级,则进入步骤3.2),否则丢弃所述info消息,结束流程;
3.2)实例C1从所维护的“已接收消息实例列表”查询所述info消息的消息起点实例的启动时间是否存在,如果存在,进入步骤3.3),如果不存在,则进入步骤3.4);
3.3)比较所述info消息的消息起点启动时间t1与“已接收消息实例列表”中该info消息的消息起点实例的启动时间t2,如果t1>t2,则进入步骤3.4),如果t1=t2,进入步骤3.5),如果t1<t2,则丢弃所述info消息,结束流程;
3.4)将“已接收消息序号列表”中info消息的消息起点实例的启动时间更新为所述info消息中的消息起点启动时间,进入步骤3.7);
3.5)比较所述info消息中的消息序号b1和“已接收消息序号列表”中维护的已接收到该info消息起点实例的消息序号b2,若b1>b2,则进入步骤3.6),否则丢弃所述info消息,结束流程;
3.6)将“已接收消息序号列表”中该info消息起点实例的消息序号更新为b1;
3.7)检查实例C1状态是否为Follower状态,若实例C1不是,则切换实例C1状态为Follower状态,进入步骤3.8),否则不做任何操作,直接进入步骤3.8);
3.8)实例C1根据所述info消息中的服务列表对本地服务列表和本地优先级列表进行更新;
3.9)实例C1按照步骤1)中的相同方法选择消息散播对象,然后根据info消息中的消息起点IP地址、端口号、消息起点启动时间和消息序号,生成ask消息发送给所选择的消息散播对象;
3.10)当某个实例C2接收到ask消息后,采用如下方法确定是否接受该info消息:
a)比较所述info消息的info消息起点实例和实例C2的优先级,如果所述info消息起点实例的优先级高于实例C2的优先级,则进入步骤b),否则向实例C1回复拒绝接受info消息;
b)实例C2从所维护的“已接收消息实例列表”查询所述info消息的消息起点实例的启动时间,如果不存在,向实例C1回复接受info消息,如果存在,则比较ask消息中消息起点启动时间t1与“已接收消息实例列表”中该info消息的消息起点实例的启动时间t3,如果t1>t3,向实例C1回复接受info消息,如果t1=t2,进入步骤c),如果t1<t2,则向实例C1回复拒绝接受info消息;
c)实例C2比较ask消息中的消息序号b1和“已接收消息序号列表”中维护的已接收到该info消息起点实例的消息序号b3,若b1>b3,则向实例C1回复接受info消息,否则向实例C1回复拒绝接受info消息;
3.11)实例C1对反馈接受消息的消息散播对象转发info消息。
3.根据权利要求2所述的服务注册发现方法,其特征在于,所述步骤1)中实例数量K1是满足不等式K1<log2N的最大正整数。
4.根据权利要求1所述的服务注册发现方法,其特征在于,所述步骤S5中实例剔除时采用健康检测机制检测实例是否宕机,包括以下步骤:
S5.1:每个实例根据优先级列表,定时向优先级低一级的实例发送ask消息,如果某实例优先级最低,则向优先级最高实例发送ask消息,该ask消息包含了该实例最近一次接收到的info消息中的消息起点IP地址、端口号、消息起点启动时间、消息序号;每个实例在收到ask消息后则按照相应流程反馈是否接受该info消息;
S5.2:每个实例定时检查最近一次从优先级高一级的实例发送ask消息的时间τ1,并计算当前时间τ2与时间τ1之间的时间差Δτ=τ2-τ1;
S5.3:如果时间差Δτ大于预设阈值T,则向优先级高一级的实例发送相同的ask消息,否则不做任何操作;
S5.4:如果接收到优先级高一级的实例反馈的消息,则不做任何操作,否则进入步骤S5.5;
S5.5:实例在未接收到优先级高一级的实例反馈的消息时,随机选择Q个实例发送check消息,Q的值根据需要设置,check消息中包括需要被检测的实例的IP地址和端口号;
S5.6:接收到check消息的实例向需要被检测的实例发送ask消息,如果收到反馈的消息,则向注册中心反馈实例已应答消息,否则向注册中心反馈实例无应答消息;
S5.7:如果注册中心在预设时间内收到某个实例的Q个无应答消息,则判定该实例宕机,将该实例从对应微服务的服务列表中剔除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110228696.3A CN113014433B (zh) | 2021-03-02 | 2021-03-02 | 基于消息传播的服务注册发现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110228696.3A CN113014433B (zh) | 2021-03-02 | 2021-03-02 | 基于消息传播的服务注册发现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113014433A CN113014433A (zh) | 2021-06-22 |
CN113014433B true CN113014433B (zh) | 2022-01-11 |
Family
ID=76402122
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110228696.3A Expired - Fee Related CN113014433B (zh) | 2021-03-02 | 2021-03-02 | 基于消息传播的服务注册发现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113014433B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114615284A (zh) * | 2022-03-09 | 2022-06-10 | 北京沃东天骏信息技术有限公司 | 集群内消息通知方法、接收方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108833462A (zh) * | 2018-04-13 | 2018-11-16 | 中国科学院信息工程研究所 | 一种面向微服务的自注册服务发现的系统及方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108390766A (zh) * | 2017-10-25 | 2018-08-10 | 国云科技股份有限公司 | 一种适用于微服务的服务注册与发现方法 |
CN112019369A (zh) * | 2019-05-31 | 2020-12-01 | 烽火通信科技股份有限公司 | 一种微服务框架下动态配置管理方法及系统 |
CN110365750A (zh) * | 2019-06-25 | 2019-10-22 | 苏宁云计算有限公司 | 服务注册系统及方法 |
CN111615066B (zh) * | 2020-02-07 | 2021-07-16 | 中国海洋大学 | 一种基于广播的分布式微服务注册及调用方法 |
-
2021
- 2021-03-02 CN CN202110228696.3A patent/CN113014433B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108833462A (zh) * | 2018-04-13 | 2018-11-16 | 中国科学院信息工程研究所 | 一种面向微服务的自注册服务发现的系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113014433A (zh) | 2021-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4775153B2 (ja) | 運用管理システム、ノード、運用管理方法及びプログラム | |
CN108881354B (zh) | 一种推送信息存储方法、装置、服务器和计算机存储介质 | |
CN111263171A (zh) | 直播流的流媒体数据获取方法、边缘节点区域组网系统 | |
US20070041328A1 (en) | Devices and methods of using link status to determine node availability | |
CN111190736A (zh) | 基于微服务的低入侵分布式定时任务调度系统及方法 | |
CN109462640B (zh) | 一种元数据同步方法、数据端、交互系统及介质 | |
CN106953767B (zh) | 一种设备间的组网方法、装置及系统 | |
CN106452921B (zh) | 一种堆叠系统分裂检测方法及装置 | |
CN113014433B (zh) | 基于消息传播的服务注册发现方法 | |
WO2021135419A1 (zh) | 更新路由信息的方法、装置、计算机设备和存储介质 | |
WO2015062479A1 (zh) | 一种终端状态监测的方法、设备和系统 | |
US20080049607A1 (en) | Method and apparatus for checking maintenance association integrity and method and apparatus for adding maintenance end point | |
CN111884875A (zh) | 一种离线设备确定方法及装置 | |
US10091288B2 (en) | Ordered execution of tasks | |
Sridhar | Decentralized local failure detection in dynamic distributed systems | |
GB2505230B (en) | Leader node appointment | |
CN112491951B (zh) | 对等网络中的请求处理方法、服务器及存储介质 | |
EP2071764B1 (en) | A method, device and communication system thereof of electing local master | |
CN111092956A (zh) | 资源同步方法、装置、存储介质及设备 | |
KR20140125223A (ko) | 정보 중심 네트워킹 기반의 콘텐츠 네트워크에서 관리 인터페이스를 이용한 정보 수집 방법, 콘텐츠 네트워크 관리 시스템 및 노드 장치 | |
CN112929594A (zh) | 自组网级联方法、音频采集设备、会议系统、存储介质 | |
CN112533304B (zh) | 自组网络管理方法、装置、系统、电子设备以及存储介质 | |
CN115119230A (zh) | 确定主设备和从设备的方法、装置、设备及存储介质 | |
CN114363357A (zh) | 一种基于Gossip的分布式数据库网络连接管理方法 | |
US8327023B2 (en) | Querier election method, router, and network system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20220111 |