服务注册发现协调系统及其方法与流程

文档序号:18142182发布日期:2019-07-10 11:11阅读:252来源:国知局
服务注册发现协调系统及其方法与流程

本发明涉及计算机软件领域,具体地,涉及服务注册发现协调系统及其方法。



背景技术:

随着科学技术的不断发展及互联网行业的飞速提升,各领域公司都构建了应用于所属领域的业务系统及应用。随着自身业务的不断发展和需求的提升,业务系统的规模越做越大,构建业务系统已经是一个庞大的工程。随着服务注册发现的出现,构建大型系统复杂度太高的问题终于有所缓解。

服务注册发现是一种微服务的协调服务,基于此服务,架构师可以将系统中的复杂业务拆分成成百上千的小的相互独立的服务,这些小服务可以部署在不同地点、不同的服务器上,这样服务之间就可以简单调用而忽略具体的部署细节。服务注册发现是大型系统的核心组件,它的出现大大降低了分布式系统的构建的复杂性。

现有的服务注册发现系统一般使用paxos协议或raft协议作为一致性同步算法,支持分布式部署,支持客户端watch等功能,但是在算法和流程上,设计过于复杂,效率低且容易出错误。



技术实现要素:

有鉴于此,提出了本发明,其能够简单快速地实现服务注册发现系统的部署,有利于高效地在服务器上注册和监听微服务。

根据本发明的第一方面,提供了一种用于服务注册发现协调系统中的服务器的方法,包括:启动和记录所述服务器的启动时间;查询与所述服务器关联的另一服务器的启动时间;比较所述服务器的启动时间和所述另一服务器的启动时间;以及当所述服务器的启动时间晚于所述另一服务器的启动时间时,将所述服务器的状态更新为备用服务器状态。根据所述方法,如果服务器的启动时间晚于相关联的服务器的启动时间,可以简单地将该服务器降级为备用服务器,而使用更早启动的服务器作为主服务器。

在一个实施例中,所述方法还可以包括生成所述服务器的本地ticket;查询所述另一服务器的ticket;当所述服务器的启动时间和所述另一服务器的启动时间基本相同时,比较所述本地ticket的权值和所述另一服务器的ticket的权值;以及当所述本地ticket的权值更小时,将所述服务器的状态更新为备用服务器状态。因此,除了启动时间,本发明还利用具有权值的ticket来确定或更新服务器的状态,在启动时间基本相同的情况下,优先将具有更大权值的服务器设为主服务器。

在一个实施例中,其中,当所述服务器的启动时间和所述备用服务器的启动时间相差不超过预设阈值(比如1秒)时,比较所述本地ticket的权值和所述备用服务器的ticket的权值,以及当所述本地ticket的权值更小时,将所述服务器的状态更新为备用服务器状态。因此,当服务器的启动时间与另一服务器的启动时间相差不大时,例如,小于预设阈值(比如1秒),不直接将服务器更新为备用服务器,而是通过考察该服务器和另一服务器的ticket的权值来确定是否切换服务器状态。这样,可以避免在启动时间相差不大时产生的不必要的切换开销。

在一个实施例中,所述方法还可以包括:当所述服务器的启动时间早于所述另一服务器的启动时间时,或者当所述本地ticket的权重大于或等于所述另一服务器的ticket的权值时,将所述服务器的状态更新为主机服务器状态;以及开启端口和开启监听服务。因此,当服务器的状态被更新为主服务器状态下,该服务器可以实现服务注册与发现,通过相应的端口来接收服务注册请求和监听各个服务心跳。

根据本发明的第二方面,提供了一种用于服务注册发现协调系统中的服务器的方法,包括:启动和记录所述服务器的启动时间;查询与所述服务器关联的另一服务器的启动时间;比较所述服务器的启动时间和所述另一服务器的启动时间:当所述服务器的启动时间早于所述另一服务器的启动时间时,将所述服务器的状态更新为主服务器状态。因此,在服务器启动之后,如果该服务器的启动时间早于相关联的另一服务器启动时间,可以简单地将该服务器升级为主服务器,而使用更早启动的服务器作为主服务器。相应地,另一服务器可以降级为备用服务器。

在一个实施例中,所述方法还可以包括:生成所述服务器的本地ticket;查询所述服务器的ticket;当所述服务器的启动时间和所述另一服务器的启动时间基本相同时,比较所述本地ticket的权值和所述主服务器的ticket的权值;当所述本地ticket的权值更大时,将所述服务器的状态更新为主服务器状态。除了启动时间,本发明还利用具有权值的ticket来确定或更新服务器的状态,在启动时间相同的情况下,优先将具有更大权值的服务器设为主服务器。

在一个实施例中,所述方法还可以包括:当所述服务器的启动时间和所述另一服务器的启动时间相差不超过预设阈值(比如1秒)时,比较所述本地ticket的权值和所述另一服务器的ticket的权值,当所述本地ticket的权值更大时,将所述服务器的状态更新为主服务器状态。因此,提供了关于启动时间差别的预设阈值。当服务器的启动时间与另一服务器的启动时间相差不大时,例如,启动时间相差小于预设阈值(比如1秒),则不将服务器更新为主服务器。而是通过考察服务器和另一服务器的ticket的权值来确定是否切换服务器状态。这样,可以避免在启动时间相差不大时产生的不必要的切换开销。

在一个实施例中,所述方法还可以包括:查询所述另一服务器的工作状态;如果所述另一服务器的工作状态不正常,将所述服务器的状态更新为主服务器状态。因此,当主服务器出现异常状态时,这意味着可能无法继续提供服务注册发现的业务,这时可以直接将备用服务器更新为主服务器以替代原来的主服务器。

在一个实施例中,所述方法还可以包括:在将所述服务器的状态更新为主服务器状态之后,将所述另一服务器上的服务信息同步到本地,以及开启端口和开启监听服务。在备用服务器更新为主服务器之后,其将提供同样的业务,因而有必要将原来的主服务器上的服务信息(如快照形式)同步到本地。另外,本地的服务器也将继续实现服务注册与发现,通过相应的端口来接收服务注册请求和监听各个服务心跳。

根据本发明的第三方面,提供了一种服务器,包括:处理器;和存储有指令的存储器,所述指令在被所述处理器执行时,使得在所述服务器上实施如本发明第一方面或第二方面所述的方法。

根据本发明的第四方面,还提供了一种计算机可读存储介质,其上存储有指令,所述指令在被执行时,使得实施如本发明第一方面或第二方面所述的方法。

本发明通过清晰、合理、巧妙的流程设计,让服务注册发现系统的复杂度大大降低,不仅提高了系统的工作效率,又提高了系统的稳定性,满足了服务注册发现的常用功能,更能适应未来发展的新需求。

附图说明

构成说明书的一部分的附图描述了本发明的实施例,其与具体描述一起用于解释本发明的原理。参照附图,根据以下详细描述,可以更加清楚地理解本发明,其中:

图1示出了根据本发明实施例的服务注册发现协调系统;

图2示出了根据本发明实施例的用于服务提供者的方法的流程图;

图3示出了根据本发明实施例的用于服务消费者的方法的流程图;

图4示出了根据本发明实施例的服务器的方法的流程图

图5示出了根据本发明另一实施例的服务器的方法的流程图。

图6示出了根据本发明再一实施例的服务器的方法的流程图;

图7示出了根据本发明实施例的服务注册发现协调系统中的各组件的时序图;以及

图8示出了用于实现本发明的实施例的服务器的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。

图1示出了根据本发明实施例的服务注册发现协调系统100。该系统100可以作为分布式服务系统的支撑系统,包括服务发现组件110、服务消费者120、服务提供者130。

服务发现组件110可以包括主机111(也称为主服务器)和备机112(也称为备用服务器)。主机111用以维护集群和服务信息。所述服务信息可以包括目录、关键字、创建时间、心跳时间、ip和端口等字段,不限于此。集群信息包括ip、端口、ticket(票据)、创建时间等字段,不限于此。备机112作为主机的备机,当主机1宕机或无法使用时,备机112可用替代主机,继续提供服务,从而达到系统高可用性的目的。根据本发明的实施例,另外,主机111和备机112可以相互通信,以便实现各自状态的转变和服务的中继,例如,相互交换注册服务信息。

服务消费者120运行于服务调用方,负责服务的监听和查询等功能。如果服务信息有变化,则服务消费者120会通知服务调用方。服务提供者130运行于服务提供方,负责注册服务、发送服务心跳、监控服务信息、监控主机111状态等功能。如图所示,服务消费者120和服务提供者130可以是多个,具体数量并无限制。

服务提供者130在启动时,都可以将服务地址与端口注册到服务发现组件110中,尤其是注册到主机110中。当服务消费者120需要调用服务提供者130时,可以从主机110获取服务提供者地址,然后向服务提供者130调用。

系统的启动顺序没有具体要求,然而一般情况下优先启动主机111,然后启动备机112、服务提供者130、消费提供者120。

图2示出了根据本发明实施例的用于服务提供者的方法200的流程图。方法200开始于步骤210,服务提供者连接主机,并且在步骤220,判断主机连接是否正常,如果主机连接不正常,则返回到步骤210重新连接主机,如果主机连接正常,则方法200前进到步骤230。

在步骤230,服务提供者向主机注册服务,并且如果不成功则返回重新注册,如果成功,则前进到步骤250,监听主机上的服务信息。然后,在步骤260,服务提供者可以判断本地服务信息和主机上的服务信息是否一致,如果不一致,返回到步骤230进行重新注册,如果一致,则前进到步骤270,向主机发送已注册服务的心跳,然后返回到步骤250监听主机上的服务信息。

图3示出了根据本发明实施例的用于服务消费者的方法300的流程图。方法300开始于步骤310,服务消费者连接主机。然后在步骤320查询主机的状态,如果连接不可用,则跳至步骤310。如果连接可用,则在步骤330,在主机上查询指定的服务信息。如果有可用服务或服务信息变化,则方法300前进到步骤340,通知服务消费方,否则回到步骤330。

图4示出了根据本发明实施例的服务器的方法400的流程图。在步骤410,服务器启动并记录其启动时间,然后在步骤420,生成服务器的ticket,ticket可以具有该服务器的权值,权值可以用于和其他机器进行比较。然后,在步骤430,服务器查询关联机器的启动时间和ticket。这里关联机器可以是与该服务器相连、能够升级成为主机或降级为备机的其他服务器。在步骤440,将服务器的启动时间和查询到的关联机器的启动时间进行比较,分为三种情况:

(1)如果该服务器的启动时间早于关联机器的启动时间,则方法400前进到步骤360,更新该服务器的状态为主机状态,并且在步骤470开启端口,启动监听服务;

(2)如果该服务器的启动时间更晚,例如,在一个实施例中,可以设置一个阈值(大于或等于0的任何时间值,如1秒),当服务器的启动时间晚于关联机器的启动时间超过该阈值时,认为服务器的启动时间更晚,这时方法400前进到步骤480,将该服务器的状态更新为备机;

(3)如果服务器的启动时间和关联机器的启动时间相同,例如,在一个实施例中,当二者相差在给定范围之内时,认为二者相同,则方法400前进到步骤450,进一步比较服务器的ticket权值和关联机器的ticket权值,如果服务器的ticket权值更高,则方法400前进到步骤460,更新该服务器的状态为主机状态,并且在步骤470开启端口,启动监听服务;否则,方法400前进到步骤480,将该服务器的状态更新为备机。在服务器的状态更新为备机的情况下,可以

在执行方法400之后,如果其结果是当前服务器被降级为备机,则相应地要将对应的关联机器从备机状态变更为主机状态。另外,需要说明的是,如果在步骤430中查询不到关联机器的启动时间(比如,关联机器尚未启动),则可以直接将该服务器的状态更新为主机状态,因为当前只有这台服务器可用。

图5示出了根据本发明另一实施例的服务器的方法500的流程图。在步骤510,服务器启动并记录启动时间,然后在步骤520,生成该服务器的ticket,ticket可以具有该服务器的权值,权值可以用于和其他机器进行比较。然后,在步骤530,备机查询关联机器的启动时间和ticket。这里关联机器可以是与该服务器相连的其他服务器,例如主机。在步骤540,将服务器的启动时间和查询到的关联机器的启动时间进行比较。比较结果分为三种情况:

(1)如果服务器的启动时间晚于关联机器(例如,对应的主机)的启动时间,则方法500前进到步骤460,更新该服务器的状态为备机状态;

(2)如果服务器的启动时间更早,例如,在一个实施例中,可以设置一个阈值(大于或等于0的任何值,如1秒),当服务器的启动时间早于关联机器的启动时间超过该阈值时,认为服务器的启动时间更早,这时方法500前进到步骤580,将该服务器升级为主机;

(3)如果服务器的启动时间和关联机器的启动时间相同,例如,在一个实施例中,当二者相差在给定范围之内时,认为二者相同,则方法500前进到步骤550,进一步比较服务器的ticket权值和关联机器的ticket权值,如果服务器的ticket权值更低,则方法500前进到步骤560,更新该服务器的状态为主机状态;否则,方法500前进到步骤580,将该备机升级为主机。

需要注意的是,与方法400类似,在执行方法500之后,如果其结果是当前服务器升级为主机,则相应地要将对应的关联机器的状态变更为备机状态。另外,需要说明的是,如果在步骤530中查询不到关联机器的启动时间(比如,关联机器尚未启动),则可以直接将该服务器的状态更新为主机状态,因为当前只有这台服务器可用。

图6示出了根据本发明再一实施例的服务器的方法600的流程图。方法600示出了服务器处于备机状态下时所执行的流程的一部分。在步骤610,备机查询主机状态,然后在步骤620判断主机状态是否正常,如果主机状态正常则继续;否则将当前备机升级为主机,退出当前备机的处理流程,并进入主机的处理流程。继续方法600,在步骤630,备机查询主机的服务快照,并且在步骤640,判断查询到的主机的服务快照是否与本地服务快照一致,如果主机的服务快照与本地快照不同,则在步骤650将主机的服务快照信息同步至本地,并更新本地服务快照;如果相同,则返回到步骤610。

图7示出了根据本发明实施例的服务注册发现协调系统中的各组件的时序图。图7涉及了备机710、主机720、服务提供者730和服务消费者740,其中备机710、主机720、服务提供者730可以执行上述参考附图2至6描述的各个方法。参考图7,备机710依次执行启动、连接主机和监控主机状态。主机720在启动后将开启端口,启动监听服务,例如,监听来自服务提供者730的服务注册请求和心跳等,以及提供主机服务信息给服务提供者730。服务提供者730在启动后将连接到主机,以便向主机720注册服务、发送心跳、以及查询主机720的服务信息,与本地服务信息进行比对等。服务消费者740在启动后,连接到主机720并监控主机状态。

图8示出了用于实现本发明的实施例的服务器的结构示意图。如图7所示,服务器800(例如主机111或备机112)包括中央处理单元(cpu)801,其可以根据存储在只读存储器(rom)802中的程序或者从存储部分808加载到随机访问存储器(ram)803中的程序而执行各种适当的动作和处理。在ram803中,还存储有服务器800操作所需的各种程序和数据。cpu801、rom802以及ram803通过总线804彼此相连。输入/输出(i/o)接口805也连接至总线804。

以下部件连接至i/o接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至i/o接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。

特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,包括承载指令的在计算机可读介质,在这样的实施例中,该指令可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该指令被中央处理单元(cpu)801执行时,执行本发明中描述的各个方法步骤。

综上所述,本发明通过清晰、合理、巧妙的流程设计,让服务注册发现系统的复杂度大大降低,不仅提高了系统的工作效率,又提高了系统的稳定性,满足了服务注册发现的常用功能,更能适应未来发展的新需求。

尽管已经参考特定示例实施例描述了本主题,但是显而易见的是,在不脱离所公开主题的更广泛的精神和范围的情况下,可以对这些实施例进行各种修改和改变。因此,说明书和附图应被视为说明性的而非限制性的。形成其一部分的附图通过说明而非限制的方式示出了可以实践主题的特定实施例。所描述的实施例以足够的细节进行描述,以使本领域技术人员能够实践本文所公开的教导。可以利用其他实施例并从中得出其他实施例,使得可以在不脱离本公开的范围的情况下进行结构和逻辑替换和改变。因此,本说明书不应被视为具有限制意义,并且各种实施例的范围仅由任何所附权利要求以及这些权利要求所赋予的等同物的全部范围来限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1