技术领域
[0001] 本申请涉及通信领域,并且更具体地,涉及一种调用服务器的方法和代理服务器。
相关背景技术
[0002] 随着服务的发展,越来越多的中国公司开始实施出海战略,将服务部署到海外等不同区域(Region)的服务器中,为当地民众提供服务。但是,由于服务运营、个人隐私数据保护或当地法律法规等原因,一些服务只能部署在特定的Region的服务器中,导致其它Region中部署的服务器调用者需要跨Region调用某些Region中的服务器提供者所提供的服务器。由于不同Region中的服务器隶属于不同的服务器集群,而针对服务器集群来说每个服务器集群中的服务器注册中心是独立部署的,不同的服务器集群之间需要通过在服务器提供者所属的服务器集群中,部署的服务器负载均衡(server load balancing,SLB)才能实现跨服务器集群的服务器调用,因此调用服务器过程需要经由SLB路由和转发实现,导致跨服务器集群调用服务器性能差。因此,如何提高跨服务器集群的调用服务器的性能,成为亟待解决的问题。
具体实施方式
[0048] 下面将结合附图,对本申请中的技术方案进行描述。
[0049] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,在本申请实施例的描述中,“多个”是指两个或多于两个。
[0050] 本申请实施例提供的调用服务器的方法可以应用于跨区域的调用服务器过程中。
[0051] 图1是本申请实施例适用的一种场景示意图。该示意图包括服务器注册中心#1、服务器注册中心#2、与服务器注册中心#1同属于区域#1的服务器提供者#1以及与服务器注册中心#2同属于区域#2的服务器调用者#1。
[0052] 其中,服务器注册中心指的是服务器架构中的一个重要的组件,在服务器架构里面主要起到了协调者的作用。服务器注册中心可以看成是服务器架构中服务器地址、属性等信息注册和管理的节点。
[0053] 例如,服务器注册中心接收所属的服务器集群中的服务器提供者注册服务器信息,同时将服务器注册信息发布给该服务器集群中的订阅该服务器提供者的服务器调用者,提供服务器的订阅发布、变更通知等功能,实现所属的服务器集群中的服务器调用。
[0054] 具体地,服务器注册中心包含以下几个功能:
[0055] 1)、服务器发现。
[0056] 服务器注册/反注册:保存服务器提供者和服务器调用者的信息;
[0057] 服务器订阅/取消订阅:服务器调用者订阅服务器提供者的信息;
[0058] 服务器路由选择:具有筛选整合服务器提供者的能力。
[0059] 2)、服务器配置。
[0060] 配置订阅:服务器提供者和服务器调用者订阅服务器相关的配置;
[0061] 配置下发:主动将配置推送给服务器提供者和服务器调用者。
[0062] 3)、服务器健康检测。
[0063] 检测服务器提供者的健康情况,其中,服务器提供者的健康情况指的是该服务器提供者是否能够正常运行,实现相应的功能。
[0064] 服务器提供者:被服务器调用者调用的服务器。
[0065] 服务器调用者:调用服务器提供者的服务器。
[0066] 应理解,上述服务器注册中心、服务器提供者以及服务器调用者只是一种可能的称呼,并不对本申请构成任何限定。例如,服务器注册中心还可以称之为微服务器注册中心或注册中心等;服务器提供者还可以称之为服务器提供端;服务器调用者还可以称之为服务器消费端等。
[0067] 还应理解,图1中所示的服务器注册中心的个数、区域个数以及与每个服务器注册中心同属于一个区域中的服务器提供者或服务器调用者的个数只是一种示例,并不对本申请构成任何限定。例如,在图1所述的区域#1中还可以包括除图1中所示的服务器提供者#1之外的服务器提供者或服务器调用者,这里不再一一举例说明。
[0068] 从图1中可以看出每个区域中包括的服务器构成一个服务器集群,并且每个区域中的服务器注册中心是独立部署的。因此,不同的区域之间的服务器调用者不能直接互相订阅对方的服务器提供者,只能是一个服务器集群中的服务器调用者直接订阅该服务器集群中的服务器提供者。
[0069] 上面结合图1简单说明了本申请实施例提供的调用服务器的方法能够应用的场景。下面在详细介绍本申请的实施例之前,为了便于对本申请方案的理解,首先简单介绍本申请实施例提供的服务器调用的方法涉及到的几个基本概念,可以理解,这些基本概念中涉及的具体描述仅仅是举例,并不构成对其的限定。:
[0070] 1、服务。
[0071] 服务是一种在系统后台运行的应用程序类型,就是应用程序编程接口。具体地,随着互联网的飞速发展,应用越来越多,而应用之间的交互也不可避免。其中,业务技术架构的微服务化指的是,按照功能模块不同将应用进行划分,并将核心服务抽取出来,作为独立的服务。进而逐渐形成稳定的服务中心,使得前端的应用能够更快速的响应多变的市场需求,同时不同的应用可以共享后端的公共能力,降低重复开发成本。
[0072] 微服务是一种软件架构风格(software architecture style),以专注于单一责任与功能的小型功能区块(small building blocks)为基础,利用模组化的方式组合出复杂的大型应用程序。目前国内外的大型互联网企业,大部分已经实现微服务化。例如,亚马逊网络服务(amazon web services,AWS)使用自研的coral service的微服务框架实现自身业务的微服务化、网飞(Netflix)使用微服务框架完成了视频业务的前后台拆分和业务微服务化。
[0073] 应理解,本申请实施例中所涉及的微服务具有更广泛的范围,包括面向服务架构(service oriented architecture,SOA)化的微服务、基于分布式服务框架开发的微服务、或者基于开源服务框架构建的业务服务/微服务。
[0074] 还应理解,本申请实施例中所涉及的服务包括微服务。
[0075] 2、服务器。
[0076] 服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。服务器的构成包括处理器、硬盘、内存、系统总线等,和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。在网络环境下,根据服务器提供的服务类型不同,分为文件服务器、数据库服务器、应用程序服务器等。
[0077] 本申请中所涉及的服务器指的是提供服务的设备。
[0078] 3、区域。
[0079] 泛指地理区域。例如,亚太区、拉美区、西亚北非区等。
[0080] 4、全球化。
[0081] 全球化是一种概念,是一种人类社会发展的现象过程。全球化目前有诸多定义,通常意义上的全球化是指全球联系不断增强,人类生活在全球规模的基础上发展及全球意识的崛起。本申请实施例中的全球化指业务服务部署在全球的不同区域,为各区域用户提供服务。
[0082] 5、服务器集群。
[0083] 多个服务器以及一个服务器注册中心构成一个服务器集群,其中,一个服务器集群中可以包括多个上述的服务器调用者和/或服务器提供者。
[0084] 应理解,所述的一个服务器注册中心可以是一个服务器或者多个服务器构成的一个服务器注册中心。还应理解,上述的属于不同区域中的服务器必然属于不同的服务器集群。例如,图1中的区域#1中的服务器提供者#1和区域#2中的服务器调用者#1必然属于两个不同的服务器集群。
[0085] 进一步地,还应理解,同一个区域中,也可能包括不同的服务器集群。也就是说属于同一个区域中的服务器不一定属于同一个服务器集群。例如,对于比较大的区域,可能存在多个瞬时动作的偏移控制(instantaneous deviation control,IDC)机房,可能会每个IDC机房都会部署一个服务器集群,也就是说该区域中存在多个不同的服务器集群。
[0086] 6、服务器调用。
[0087] 服务器调用者发现服务器提供者,调用服务器提供者,进而实现服务器调用。应理解,本申请中所涉及的服务器调用,指的是服务器调用者需要调用服务器提供者中提供服务,进而服务器调用者能够实现服务器提供者中的服务功能。
[0088] 首先,在业务全球化之前,不存在跨服务器集群的服务器调用,下面结合图2简单说明同一个服务器集群中的调用服务器的流程。
[0089] 图2是同一个服务器集群中的调用服务器的示意图。该示意图包括服务器注册中心、服务器调用者以及服务器提供者。其中,服务器注册中心、服务器调用者以及服务器提供者位于同一个服务器集群。该示意图还包括S110-S130三个步骤,下面简单介绍这三个步骤。
[0090] S110,该服务器集群中的服务器提供者在该服务器集群中的服务器注册中心中自动注册。
[0091] 即,该服务器集群中的服务器注册中心接收该服务器集群中的服务器提供者的注册信息。该服务器集群中的服务器注册中心管理该服务器集群中的服务器。
[0092] 例如,服务器提供者#1在服务器注册中心中注册自身的名称、接口以及地址等信息。其中,服务器提供者的地址能够确定该服务器提供者,接口信息能够指示该服务器提供者的功能。
[0093] S120,该服务器集群中的服务器调用者在该服务器集群中的服务器注册中心中自动发现和订阅服务器。
[0094] 即,该服务器集群中的服务器调用者能够通过该服务器集群中的服务器注册中心获知能够订阅的服务器提供者。
[0095] 具体地,服务器调用者向服务器注册中心发送订阅请求消息,该订阅请求消息中携带服务器调用者需要调用的服务器提供者的名称。
[0096] 例如,服务器调用者向服务器注册中心发送订阅请求消息,该订阅消息用于订阅该服务器调用者需要调用的服务器提供者的信息。
[0097] 服务器注册中心接收到订阅消息之后,在本地注册的服务器调用者的信息中,选择能够被调用的多个服务器提供者,并执行S121,服务器注册中心向服务器调用者发送响应消息,响应消息中包括多个服务器提供者的地址以及接口信息。
[0098] S130,该服务器集群中的服务器调用者调用该服务器集群中的服务器提供者。
[0099] 服务器调用者根据预配置路由规则,调用多个服务器提供者中的一个服务器提供者。
[0100] 其中,预配置路由规则包括以下任意一种:
[0101] 1)、随机路由策略:按照随机算法,将服务器调用信息随机路由到服务器提供者,进而调用路由指向的服务器提供者;
[0102] 2)、时延权重策略:按照调用每个服务器提供者服务所需的平均时延分配不同的权重系数,时延小的权重系数高,分配到低时延服务器提供者的调用消息会多一些,最终达到处理快的服务器提供者路由的消息多,处理慢的服务器提供者路由更少一些;
[0103] 3)、指定服务器提供者策略:事先配置好路由顺序,优先向指定的服务器提供者路由,只有当指定的服务器提供者都不可用时,才切换到其它服务器提供者。
[0104] 具体地,该服务器集群中的服务器调用者采用远程过程调用(remote procedure call,RPC)协议实现对等网络(peer to peer,P2P)调用服务器提供者。其中,RPC协议是一种通过网络从远程计算机程序上请求服务器,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如传输控制协议(transmission control protocol,TCP)或用户数据报协议(user datagram protocol,UDP),为通信程序之间携带信息数据。
[0105] 由图2可知,位于同一个服务器集群中的服务器调用者可以直接调用该服务器集群中的服务器提供者,从而实现服务器调用。
[0106] 在业务全球化发展前提下,需要实现跨服务器集群的服务器调用,下面结合图3简单介绍不同服务器集群中的服务器调用流程。
[0107] 图3是现有技术中不同服务器集群中的服务器调用的示意图。该示意图包括服务器注册中心#1、与服务器注册中心#1位于同一个服务器集群#1的服务器调用者#1、服务器注册中心#2、与服务器注册中心#2位于同一个服务器集群#2的服务器提供者#1以及服务器负载均衡(server load balancing,SLB)。其中,SLB部署在服务器提供者#1所属的服务器集群#2的前端。
[0108] 具体地,SLB中包括路由规则,该路由规则是将不同的服务器集群的服务器调用信息路由到SLB所属的服务器集群中后端对应的服务器提供者上。服务器调用者配置需要跨服务器集群的服务器调用提供者的SLB地址,通过访问SLB代理服务,通过SLB做负载均衡和消息转发,最终将服务器调用路由到后端对应的服务器提供者上。其中,SLB地址为公网中的地址,服务器调用者能够获取到。
[0109] 该示意图还包括S210-S250五个步骤,下面简单介绍这五个步骤。
[0110] S210,服务器集群#2中的服务器提供者#1在服务器集群#2中的服务器注册中心#2中自动注册服务器。
[0111] 即,服务器集群#2中的服务器注册中心#2接收到服务器集群#2中的服务器提供者#1注册的信息。服务器集群#2中的服务器注册中心#2管理服务器集群#2中的服务。
[0112] S220,服务器集群#1中的服务器调用者#1在服务器集群#1中的服务器注册中心#1中自动发现和订阅服务器。
[0113] 即,服务器集群#1中的服务器调用者#1能够通过服务器集群#1中的服务器注册中心#1获知能够订阅的服务器,以及该服务器的服务器提供者。也就是说服务器集群#1中的服务器调用者#1只能直接订阅服务器集群#1中的服务器。
[0114] S230,服务器集群#1中的服务器调用者#1无法调用服务器集群#2中的服务器。
[0115] 即,服务器集群#1中的服务器调用者#1无法订阅其他服务器集群部署的服务器,因为服务器集群#1中的服务器和服务器集群#2中的服务器是隶属于两个而不同的服务器集群,为不同的集群组网。
[0116] 也就是说,由于不同服务器集群部署的服务器隶属于不同的服务器集群,服务器集群#1中的服务器调用者无法自动发现服务器集群#2中的服务器提供者,导致无法做服务器自动路由,只能部署一个SLB代理,通过SLB来做跨服务器集群的路由分发。即,执行S240和S250实现服务器调用。
[0117] S240,服务器调用者#1配置需要跨服务器集群的服务器调用的SLB地址。
[0118] 服务器调用者#1配置服务器集群#2中部署的SLB地址,通过SLB代理转发调用消息。
[0119] S250,SLB转发服务器调用。
[0120] SLB进行负载均衡和调用消息转发,将服务器调用信息路由到后端对应的服务器提供者#1上。
[0121] 图3所示的服务器调用者#1调用服务器提供者#1与图2中所述的RPC调用不同,为超文本传输安全协议(hyper text transfer protocol over secure socket layer,HTTPS)调用。
[0122] 综上所述,图3所示的跨服务器集群的服务器调用,由于不同服务器集群中部署的服务器隶属于不同的服务器集群,一个服务器集群中的服务器调用者无法自动发现另一个服务器集群中的服务器提供者,导致服务器调用者无法实现服务器调用自动路由,只能通过在服务器调用者所属的服务器集群中部署SLB代理,通过SLB来实现跨服务器集群的服务器调用的路由分发,该技术方案存在的主要缺点包括:
[0123] 1)、服务器调用的时延增加:如图2所示一个服务器集群中的服务器调用者和服务器提供者之间直接建立TCP链路,做P2P的RPC调用,性能比较高。而图3所示的跨服务器集群的服务器调用,服务器调用者的调用消息需要经由SLB转发,增加了时延、网络开销和潜在的故障点。
[0124] 2)、服务器调用的可靠性降低:相比于图2中所示的RPC调用,图3所示的跨服务器集群的服务器调用通过HTTPS调用,则服务框架内置的负载均衡、失败自动重试、故障隔离、熔断降级、流控等功能都无法使用,服务器调用的可靠性降低。
[0125] 3)、服务器调用的资源和运维管理成本增加:为了解决跨服务器集群调用,新增了SLB服务器部署、以及SLB路由规则开发和维护等工作,这些增加了系统的资源开销,以及研发和运维成本。
[0126] 为了解决上述图3中所述的跨服务器集群的服务器调用存在的问题,本申请提出一种调用服务器的方法,
[0127] 能够提高跨服务器集群的服务器调用的性能。下面结合图4-图7详细介绍本申请实施例提供的调用服务器的方法。
[0128] 图4是本申请实施例提供的一种在跨服务器集群的架构下的调用服务器的方法的示意图。包括:
[0129] 第一服务器集群,第一服务器集群中包括第一服务器注册中心、代理服务器和至少一个第一服务器(如图4所示的第一服务器#1~第一服务器#N);
[0130] 第二服务器集群,第二服务器集群中包括第二服务器注册中心和至少一个第二服务器(如图4所示的第二服务器#1~第二服务器#N),所述第一服务器集群与所述第二服务器集群之间无交集。
[0131] 该示意图还包括S310-S330三个步骤,下面详细介绍这三个步骤。
[0132] S310,代理服务器向第二服务器注册中心发送第一订阅消息。
[0133] 具体地,代理服务器能够根据配置信息向至少一个第二服务器注册中心分别发送第一订阅消息,每个第一订阅消息用于订阅至少一个第二服务器的信息。
[0134] 例如,配置信息指示代理服务器需要从3个不同的第二服务器注册中心获取相应的被调用的第二服务器的信息。则,代理服务器向3个第二服务器注册中心分别发送3个订阅消息,每个订阅消息用于订阅对应的第二服务器注册中心中的被调用的第二服务器的信息。其中,配置信息中的内容以及配置信息的来源将在下面详细介绍,这里不赘述。
[0135] 其中,至少一个第二服务器注册中心分别属于至少一个第二服务器集群,代理服务器为第一服务器集群中能够与至少一个第二服务器注册中心连接的服务器,至少一个第二服务器为第一服务器集群中的至少一个第一服务器订阅的、且属于至少一个第二服务器集群中的服务器。
[0136] 示例性地,上述至少一个第二服务器为上述的至少一个第一服务器需要跨服务器集群调用的服务器,可以称之为被调用的服务器,或者,称之为目标服务器。下文中,将第一订阅消息订阅的至少一个第二服务器,称之为至少一个目标服务器或服务器提供者。
[0137] 具体地,在该实施例中描述的是至少一个第一服务器调用至少一个第二服务器。因此,该实施例中的第一服务器可以看成上述的服务器调用者,第二服务器可以看成上述的服务器提供者。但是,本申请中并不限制第一服务器一定为服务器调用者,在其他场景下第一服务器可以为服务器提供者被另外的服务器调用,为服务器提供者;同理,本申请中并不限制第二服务器一定为服务器提供者,在其他场景下第一服务器可以为服务器调用者调用另外的服务器。基于本实施例中的第一服务器需要调用第二服务器的设定,下文中,将至少一个第一服务器,称之为至少一个服务器调用者。另外,为了方便理解如何跨集群调用服务器,图4中的第一服务器集群里仅示出了至少一个第一服务器(服务器调用者),第二服务器集群里仅示出了至少一个第二服务器(服务器提供者),但是本领域技术人员可以理解,第一服务器集群还可以包括至少一个服务器提供者,第二服务器集群里还可以包括至少一个服务器调用者,在此不予详细描述。
[0138] 应理解,代理服务器只是为了区别于第一服务器集群中的其他服务器的称呼,并不影响本申请实施例的保护范围,其他能够实现本申请代理服务器的功能的服务器均在本申请的保护范围内。
[0139] 例如,从代理服务器实现的功能来说,可以将代理服务器称之为第一服务器注册中心的注册中心代理服务器(Proxy),或者,代理服务器可以简称为代理。
[0140] 具体地,第一服务器集群与第二服务器集群之间可以无交集。示例性地,第一服务器集群属于一个区域,第二服务器集群属于另一个区域;或者,第一服务器集群与第二服务器集群可以属于同一个区域,但是第一服务器集群和第二服务器集群为该区域中两个不同的服务器集群。应理解,在何种条件下可以将两个服务器集群称为不同的服务器集群,可以基于现有中任意一种不同的服务器集群的划分,本申请对此并不限制。
[0141] 为了便于描述,图4以代理服务器向一个第二服务器集群中的第二服务器注册中心发送第一订阅消息为例进行说明的。应理解,实际应用中,第二服务器集群可以为多个集群,每个集群里均包括一个服务器注册中心,那么本申请中的代理服务器可以向多个第二服务器集群中的服务器注册中心发送第一订阅消息,图4中所示的第二服务器集群为上述的至少一个第二服务器集群中的任意一个第二服务器集群,图4中的第二服务器注册中心为对应的第二服务器集群中的服务器注册中心。图4只是一种举例不能限制本申请的保护范围。
[0142] 其中,配置信息能够用于确定代理服务器向哪些第二服务器集群中的第二服务器注册中心发送第一订阅消息,以及代理服务器根据配置信息能够确定获取哪些目标服务器的信息。所以说在本申请实施例中代理服务器如何获取配置信息至关重要,下面提供几种代理服务器能够获知上述配置信息的方式:
[0143] 方式一:配置信息为预先配置在代理服务器中的配置信息。
[0144] 也就是说,在第一服务器集群中部署代理服务器时,开发者已经获知第一服务器集群中哪些服务器调用者需要跨服务器集群调用目标服务器,以及需要调用的目标服务器分别属于哪些服务器集群和哪些应用。在开发者部署代理服务器时将获取的信息作为预设的配置信息,写入到代理服务器中。即,第一服务器集群中的代理服务器在运行时能够根据自身预设的配置信息对应去至少一个第二服务器注册中心中,订阅第一服务器集群中的至少一个服务器调用者需要调用的目标服务器的信息。
[0145] 具体地,开发者已经获知第一服务器集群中哪些服务器调用者需要跨服务器集群调用目标服务器可以是第一服务器集群中的服务器调用者人工通过邮件、配置文件等方式,发送给代理服务器的开发者的。
[0146] 例如,第一服务器集群中包括3个服务器调用者需要跨服务器集群调用目标服务器,该3个服务器调用者分别向第一服务器集群中的第一服务器注册中心发送第二订阅消息,每个第二订阅消息中包括自身需要调用的目标服务器所属的服务器集群的名称、目标服务器所属的服务器集群中的服务器注册中心地址、目标服务器所属的应用的名称以及目标服务器的名称。开发者在第一服务器集群中部署代理服务器时,基于该第一服务器集群中的服务器注册中心接收到的所有需要跨服务器集群调用服务器的服务器调用者发送的第二订阅消息中的目标服务器所属服务器集群的名称、目标服务器所属的服务器集群中的服务器注册中心地址、目标服务器所属的应用的名称以及目标服务器的名称确定需要写到代理服务器中预设的配置信息,进行代理服务器的部署。
[0147] 假设,3个服务器调用者中的服务器调用者#1需要调用服务器集群#2中属于应用#A的目标服务器#a、服务器调用者#2需要调用服务器集群#3中属于应用#B的目标服务器#b、服务器调用者#3需要调用服务器集群#4中属于应用#C的目标服务器#c。开发者部署代理服务器时,配置信息中包括服务器集群#2-服务器集群#4、服务器集群#2-服务器集群#4中的服务器注册中心#2-服务器注册中心#4的地址、应用#A-应用#C以及目标服务器#a-目标服务器#c。则,在第一服务器集群中部署了代理服务器之后,代理服务器能够根据配置信息向服务器集群#2-服务器集群#4中的服务器注册中心分别发送订阅消息#1-订阅消息#3,其中,订阅消息#1用于从服务器集群#2中的服务器注册中心#2订阅属于应用#A的目标服务器#a、订阅消息#2用于从服务器集群#3中的服务器注册中心#3订阅属于应用#B的目标服务器#b、订阅消息#3用于从服务器集群#4中的服务器注册中心#4订阅属于应用#C的目标服务器#c。
[0148] 方式二:配置信息为第一服务器注册中心发送给代理服务器的。
[0149] 例如,如图4所示的,本申请实施例提供的调用服务器的方法流程还包括S311,第一服务器注册中心向代理服务器发送触发消息,该触发消息中携带了上述的配置信息。具体地,该触发消息用于触发代理服务器根据配置信息获取至少一个目标服务器的信息。
[0150] 也就是说,在方式二下,开发者无需在第一服务器集群中部署代理服务器时,将配置信息写入到代理服务器中。在跨服务器集群调用服务器的流程中,第一服务器注册中心能够触发代理服务器实现跨服务器集群调用服务器。
[0151] 例如,第一服务器集群中包括3个服务器调用者需要跨服务器集群调用目标服务器,该3个服务器调用者分别向第一服务器集群中的第一服务器注册中心发送第二订阅消息,每个第二订阅消息中包括自身需要调用的目标服务器所属的服务器集群的名称、目标服务器所属的服务器集群中的服务器注册中心地址、目标服务器所属的应用的名称以及目标服务器的名称。进而第一服务器注册中心将接收到的第二订阅消息中需要跨服务器集群调用的服务器集群的名称、所属的服务器集群中的服务器注册中心地址、目标服务器所属的应用的名称以及目标服务器的名称作为配置信息,携带在触发代理服务器获取至少一个目标服务器的信息的触发消息中,发送给代理服务器。则,代理服务器接收到触发消息之后根据触发消息中携带的配置信息,向至少一个第二服务器注册中心分别发送第一订阅消息,从而获取至少一个目标服务器的信息。
[0152] 假设,3个服务器调用者中的服务器调用者#1需要调用服务器集群#2中属于应用#A的目标服务器#a、服务器调用者#2需要调用服务器集群#3中属于应用#B的目标服务器#b、服务器调用者#3需要调用服务器集群#4中属于应用#C的目标服务器#c。
[0153] 首先,服务器调用者#1-服务器调用者#3分别向第一服务器注册中心发送订阅消息#1-订阅消息#3,其中,订阅消息#1携带服务器集群#2中的服务器注册中心#2订阅属于应用#A的目标服务器#a信息、订阅消息#2携带服务器集群#3中的服务器注册中心#3订阅属于应用#B的目标服务器#b信息、订阅消息#3携带服务器集群#4中的服务器注册中心#4订阅属于应用#C的目标服务器#c信息。
[0154] 其次,第一服务器注册中心根据接收到的订阅消息#1-订阅消息#3,确定配置信息。具体地,配置信息包括服务器集群#2-服务器集群#4、服务器集群#2-服务器集群#4中的服务器注册中心#2-服务器注册中心#4的地址、应用#A-应用#C以及目标服务器#a-目标服务器#c。
[0155] 再者,第一服务器注册中心确定服务器调用者#1-服务器调用者#3均是跨服务器集群进行服务器调用。所以第一服务器注册中心向代理服务器发送触发消息,触发代理服务器获取服务器调用者#1-服务器调用者#3需要调用的目标服务器的信息。其中,触发消息中携带第一服务器注册中心确定的配置信息。
[0156] 最后,代理服务器被触发消息触发之后,根据触发消息中的配置信息,向服务器集群#2-服务器集群#4中的服务器注册中心#2-服务器注册中心#4分别发送订阅消息#4-订阅消息#6,其中,订阅消息#4用于从服务器集群#2中的服务器注册中心#2订阅属于应用#A的目标服务器#a、订阅消息#5用于从服务器集群#3中的服务器注册中心#3订阅属于应用#B的目标服务器#b、订阅消息#6用于从服务器集群#4中的服务器注册中心#4订阅属于应用#C的目标服务器#c。
[0157] 方式三:配置信息为服务器调用者发送给代理服务器的。
[0158] 例如,如图5所示,第一服务器集群中的至少一个服务器调用者(如图5所示的服务器调用者#1-服务器调用者#3)需要跨服务器集群调用目标服务器。具体地,至少一个服务器调用者与代理服务器相连接,并向代理服务器分别发送的第一指示信息,至少一个第一指示信息用于确定配置信息,第一指示信息用于指示代理服务器获取至少一个目标服务器的信息。
[0159] 例如,第一服务器集群中包括3个服务器调用者(如图5所示的服务器调用者#1-服务器调用者#3)需要跨服务器集群调用目标服务器,该3个服务器调用者分别向代理服务器发送第一指示信息,每个第一指示信息中包括自身需要调用的目标服务器所属的服务器集群的名称、目标服务器所属的服务器集群中的服务器注册中心地址、目标服务器所属的应用的名称以及目标服务器的名称。进而代理服务器将接收到的第一指示信息中需要跨服务器集群调用的目标服务器所属服务器集群的名称、目标服务器所属的服务器集群中的服务器注册中心地址、目标服务器所属的应用的名称以及目标服务器的名称作为配置信息,从而获取至少一个目标服务器的信息。
[0160] 假设,3个服务器调用者中的服务器调用者#1需要调用服务器集群#2中属于应用#A的目标服务器#a、服务器调用者#2需要调用服务器集群#3中属于应用#B的目标服务器#b、服务器调用者#3需要调用服务器集群#4中属于应用#C的目标服务器#c。
[0161] 首先,服务器调用者#1-服务器调用者#3分别向代理服务器发送第一指示信息#1-第一指示信息#3,其中,第一指示信息#1携带服务器集群#2中的服务器注册中心#2订阅属于应用#A的目标服务器#a信息、第一指示信息#2携带服务器集群#3中的服务器注册中心#3订阅属于应用#B的目标服务器#b信息、第一指示信息#3携带服务器集群#4中的服务器注册中心#4订阅属于应用#C的目标服务器#c信息。
[0162] 其次,代理服务器根据接收到的第一指示信息#1-第一指示信息#3,确定配置信息。具体地,配置信息包括服务器集群#2-服务器集群#4、服务器集群#2-服务器集群#4中的服务器注册中心#2-服务器注册中心#4的地址、应用#A-应用#C以及目标服务器#a-目标服务器#c。
[0163] 最后,代理服务器根据配置信息,向服务器集群#2-服务器集群#4中的服务器注册中心#2-服务器注册中心#4分别发送订阅消息#4-订阅消息#6。其中,订阅消息#4用于从服务器集群#2中的服务器注册中心#2订阅属于应用#A的目标服务器#a、订阅消息#5用于从服务器集群#3中的服务器注册中心#3订阅属于应用#B的目标服务器#b、订阅消息#6用于从服务器集群#4中的服务器注册中心#4订阅属于应用#C的目标服务器#c。
[0164] 在方式三下,可选地,上述的至少一个服务器调用者依然向第一服务器注册中心发送第二订阅消息。
[0165] 例如,服务器调用者#1-服务器调用者#3分别向第一服务器注册中心发送订阅消息#1-订阅消息#3,其中,订阅消息#1携带服务器集群#2中的服务器注册中心#2订阅属于应用#A的目标服务器#a信息、订阅消息#2携带服务器集群#3中的服务器注册中心#3订阅属于应用#B的目标服务器#b信息、订阅消息#3携带服务器集群#4中的服务器注册中心#4订阅属于应用#C的目标服务器#c信息。
[0166] 在方式三下,可选地,上述的至少一个服务器调用者无需向第一服务器注册中心发送第二订阅消息。因为,上述的至少一个服务器调用者已经向代理服务器发送了第一指示信息,使得代理服务器获知了所属的第一服务器集群中的需要跨服务器集群调用服务器的服务器调用者以及具体需要调用的目标服务器所属的服务器集群和所属的应用。则,代理服务器可以向第一服务器注册中心发送转发信息,用于转发自身获取到的信息。
[0167] 应理解,图5只是一种举例,并不对本申请构成任何限定。例如,第一服务器集群中的跨服务器集群调用服务器的服务器调用者的个数可以与图5所示的不同。
[0168] 还应理解,上述方式一至方式三只是本申请提供的代理服务器能够获知上述配置信息的几种可能的实现方式,并不对本申请构成限定。其他的通过在服务器集群中部署上述代理服务器,或者,部署与上述的代理服务器类似功能的服务器。用于跨服务器集群获取代理服务器所属服务器集群中、跨服务器集群调用服务器的服务器调用者需要调用的目标服务器的信息的方法均在本申请的保护范围之内。
[0169] 由上述可知,代理服务器获知配置信息之后能够根据配置信息向至少一个第二服务器注册中心分别发送第一订阅消息。具体地,配置信息包括至少一个第二服务器集群的标识、至少一个第二服务器注册中心地址、至少一个目标服务器所属的应用的名称以及至少一个目标服务器的名称。
[0170] 下面根据上述的第二服务器集群与第一服务器集群之间的关系,给出几种配置信息包括多种信息的形式。
[0171] 示例性地,当图4中的第二服务器集群与第一服务器集群属于不同的区域。
[0172] 例如,第一服务器集群中的跨服务器集群调用服务器的服务器调用者需要调用第二服务器集群中的属于应用1的服务器名称为1的目标服务器。第一服务器集群属于区域#1,第二服务器集群属于区域#2,且第二服务器集群所属的区域#2中只包括该第二服务器集群,其中,区域#1的标识为Region 1,区域#2的标识为Region 2。则,上述的配置信息中包括如下信息:
[0173] 1)Region 2
[0174] 2)scURL:https://xxx/path
[0175] 3)app1
[0176] 4)ServiceName1
[0177] 其中,区域2(Region 2)为区域#2的标识,由于区域#2中只包括该第二服务器集群,则,Region 2可以理解为第二服务器集群的标识;服务器集群统一资源定位符(servicecluster uniform resource locator,scURL)表示第二服务器集群中的第二服务器注册中心的地址,应用1(application1,app1)表示目标服务器所属的应用1的名称,服务器名称1(ServiceName1)表示隶属于应用1的第一服务器集群中的服务器调用者需要调用的目标服务器的名称。
[0178] 示例性地,当图4中的第二服务器集群与第一服务器集群属于同一个区域。
[0179] 例如,第一服务器集群中的跨服务器集群调用服务器的服务器调用者需要调用第二服务器集群中的属于应用1的服务器名称为1的目标服务器。第一服务器集群属于区域#1,第二服务器集群也属于区域#1,第一服务器集群在区域#1中的相对标识为SC 1,第二服务器集群在区域#1中的相对标识为SC 2。则,上述的配置信息中包括如下信息:
[0180] 1)SC 2
[0181] 2)scURL:https://xxx/path
[0182] 3)app1
[0183] 4)ServiceName1
[0184] 其中,服务器集群2(service cluster 2,SC 2)为区域#1中第二服务器集群的相对标识,scURL表示第二服务器集群中的第二服务器注册中心的地址,app1表示目标服务器所属的应用1的名称,ServiceName1表示隶属于应用1的第一服务器集群中的服务器调用者需要调用的目标服务器的名称。
[0185] 示例性地,当图4中的第二服务器集群与第一服务器集群属于不同的区域,且二服务器集群所属的区域中包括多个服务器集群。
[0186] 例如,第一服务器集群中的跨服务器集群调用服务器的服务器调用者需要调用第二服务器集群中的属于应用1的服务器名称为1的目标服务器。第一服务器集群属于区域#1,第二服务器集群属于区域#2,且第二服务器集群所属的区域#2中包括多个服务器集群,其中,区域#1的标识为Region 1,区域#2的标识为Region 2,第二服务器集群在区域#2中的相对标识为SC 2。则,上述的配置信息中包括如下信息:
[0187] 1)Region 2&SC 2
[0188] 2)scURL:https://xxx/path
[0189] 3)app1
[0190] 4)ServiceName1
[0191] 其中,区域2和服务器集群2(region 2 and service cluster 2,Region 2&SC 2)为第二服务器集群所属的区域#2的标识以及该第二服务器集群在所属的区域#2中的相对标识;scURL表示第二服务器集群中的服务器注册中心的地址,app1表示目标服务器所属的应用1的名称,ServiceName1表示隶属于应用1的第一服务器集群中的服务器调用者需要调用的目标服务器的名称。
[0192] 具体地,由前文叙述的可知本申请实施例提供的调用服务器的方法还可以应用于微服务架构下。所以服务器名称1还可以是微服务器名称1(microServiceName1)。
[0193] 应理解,服务器集群的标识能够唯一确定该标识对应的服务器集群。例如,服务器集群的标识为多个服务器集群中每个服务器集群的索引;或者,服务器集群的标识为在一个区域中的相对标识。
[0194] 进一步,由上述可知配置信息还包括目标服务器所属的应用的名称以及目标服务器的名称。下面根据目标服务器所属的应用的不同,进一步给出几种配置信息包括多种信息的形式。
[0195] 示例性地,当目标服务器同属于一个应用时,上述的配置信息中包括如下信息:
[0196] 1)Region 2
[0197] 或,
[0198] 1a)SC 2
[0199] 或,
[0200] 1b)Region 2&SC 2
[0201] 2)scURL:https://xxx/path
[0202] 3)app1
[0203] 4)ServiceName1
[0204] 5)ServiceName2
[0205] 其中,1)、1a)以及1b)对应的为上述的第二服务器集群的标识,2)对应的为上述第二服务器集群中的第二服务器注册中心的地址,这里不再赘述。app1表示目标服务器所属的应用1的名称,ServiceName1和ServiceName2表示隶属于应用1的第一服务器集群中的服务器调用者需要调用的两个目标服务器的名称。
[0206] 示例性地,当目标服务器属于多个应用时,上述的配置信息中包括如下信息:
[0207] 1)Region 2
[0208] 或,
[0209] 1a)SC 2
[0210] 或,
[0211] 1b)Region 2&SC 2
[0212] 2)scURL:https://xxx/path
[0213] 3)app1
[0214] 4)ServiceName1
[0215] 5)ServiceName2
[0216] 6)app2
[0217] 7)ServiceName3
[0218] 8)ServiceName4
[0219] 其中,1)、1a)以及1b)对应的为上述的第二服务器集群的标识,2)对应的为上述第二服务器集群中的第二服务器注册中心的地址,这里不再赘述。app1表示目标服务器所属的应用1的名称,ServiceName1和ServiceName2表示隶属于应用1的第一服务器集群中的服务器调用者需要调用的两个目标服务器的名称;app2表示目标服务器所属的应用的名称,ServiceName3和ServiceName4表示隶属于应用2的第一服务器集群中的服务器调用者需要调用的两个目标服务器的名称。
[0220] 应理解,上述代理服务器需要获取的目标服务器信息对应的目标服务器可以是多个,多个目标服务器可以属于不同的应用。
[0221] 还应理解,上述的配置信息的包括的信息的形式只是几种举例,并不能限制本申请的保护范围。其他,能够使得代理服务器准确获取至少一个目标服务器的信息的配置信息也在本申请的保护范围之内。
[0222] 由上述可知,代理服务器既能够与第一服务器集群中的第一服务器注册中心连接,还能够与至少一个第二服务器集群中的第二服务器注册中心连接。即,代理服务器能够注册到其他服务器集群中的服务器注册中心中。
[0223] 由上述可知某个服务器集群中的代理服务器能够与多个服务器集群中的服务器注册中心连接,并向多个服务器注册中心注册本身相关的信息。例如,注册自身的名称、地址以及接口等信息。
[0224] 下面结合图6简单介绍每个服务器集群中的代理服务器如何注册到多个服务器注册中心的。
[0225] 图6是本申请实施例提供的一种代理服务器注册的示意图。该示意图包括服务器集群#1-服务器集群#N、每个服务器集群中包括一个服务器注册中心(如图6所示的服务器注册中心#1-服务器注册中心#N)、每个服务器集群中包括一个代理服务器(如图6所示的代理服务器#1-代理服务器#N)。
[0226] 具体地,图6中实线箭头表示服务器集群#1中的代理服务器#1向服务器注册中心#1-服务器注册中心#N注册自身的信息;图6中长虚线箭头表示服务器集群#2中的代理服务器#2向服务器注册中心#1-服务器注册中心#N注册自身的信息;以及图6中短虚线箭头表示服务器集群#N中的代理服务器#N向服务器注册中心#1-服务器注册中心#N注册自身的信息。
[0227] 上面详细介绍了代理服务器如何根据配置信息向至少一个第二服务器注册中心分别发送第一订阅消息,以及详细介绍了配置信息包括的信息和来源。应理解,代理服务器向至少一个第二服务器注册中心分别发送第一订阅消息的目的是为了获取第一服务器集群中需要跨服务器集群调用服务器的服务器调用者所需的目标服务器的信息。所以在代理服务器向至少一个第二服务器注册中心分别发送第一订阅消息之后,需要接收至少一个第二服务器注册中心的反馈信息,即,在执行上述的S310之后,需要执行S320。
[0228] S320,第二服务器注册中心向代理服务器发送响应消息。
[0229] 至少一个第二服务器集群中的第二服务器注册中心接收到代理服务器发送的第一订阅消息之后,每个第二服务器集群中的第二服务器注册中心根据订阅消息中携带需要订阅的目标服务器所属的应用的名称以及目标服务器的名称,搜索目标服务器的信息。并将目标服务器的信息携带在响应消息中反馈给代理服务器。
[0230] 为了便于描述,图4以一个第二服务器集群中的第二服务器注册中心向代理服务器发送响应消息为例进行说明的。应理解,本申请中可以分别是多个第二服务器集群中的多个第二服务器注册中心分别向代理服务器发送响应消息,图4中所示的第二服务器集群为上述的至少一个第二服务器集群中的任意一个第二服务器集群,图4中的第二服务器注册中心为对应的第二服务器集群中的服务器注册中心。图4只是一种举例不能限制本申请的保护范围。
[0231] 具体地,第二服务器集群中的第二服务器注册中心中注册有第二服务器集群中的服务器提供者的信息。第二服务器集群中的第二服务器注册中心根据接收到的第一订阅消息中携带的第二服务器所属的应用的名称以及第二服务器的名称,确定第二服务器注册中心中已注册的服务器提供者的信息中哪些服务器提供者属于该订阅消息中携带的第二服务器所属的应用的名称对应的应用,以及哪些服务器提供者注册的名称为该订阅消息中携带的第二服务器的名称。
[0232] 进一步地,将满足该订阅消息中携带的第二服务器所属的应用的名称,以及第二服务器的名称的服务提器供者的信息作为第二服务器的信息携带在响应消息中反馈给代理服务器。
[0233] 应理解,代理服务器会从多个第二服务器集群中的服务器注册中心接收到响应消息,并且每个响应消息中携带有,对应的服务器集群中满足代理服务器发送的订阅消息中携带的第二服务器所属的应用的名称,以及第二服务器的名称的服务器提供者的信息。
[0234] 例如,如S310中的方式二所述的,代理服务器接收第一服务器注册中心发送的触发消息触发之后,根据触发消息中的配置信息,向服务器集群#2-服务器集群#4中的服务器注册中心#2-服务器注册中心#4分别发送订阅消息#4-订阅消息#6。其中,订阅消息#4用于从服务器集群#2中的服务器注册中心#2订阅属于应用#A的目标服务器#a、订阅消息#5用于从服务器集群#3中的服务器注册中心#3订阅属于应用#B的目标服务器#b、订阅消息#6用于从服务器集群#4中的服务器注册中心#4订阅属于应用#C的目标服务器#c。
[0235] 假设,图4所示的第二服务器集群为上述的服务器集群#2,第二服务器注册中心为上述的服务器注册中心#2。则,在服务器集群#2中的服务器注册中心#2中管理有服务器集群#2中的所有服务器提供者的信息,当服务器注册中心#2接收到代理服务器发送的订阅消息#4,且获取到订阅消息#4中携带的应用#A以及目标服务器#a时,在服务器注册中心#2中注册的服务器提供者的信息中搜索属于应用#A且服务器名称为“#a”的服务器提供者。将匹配到的服务器提供者的信息作为上述的第二服务器的信息携带在响应消息中反馈给代理服务器。
[0236] 应理解,代理服务器从第二服务器注册中心中获取目标服务器的信息,与图2所示的在同一个服务器集群中,服务器调用者订阅服务器提供者信息类似。不同的是,代理服务器获取目标服务器信息并不是代理服务器需要调用服务器,而是代理服务器所属的第一服务器集群中有服务器调用者需要调用该目标服务器。但是,代理服务器向第二服务器注册中心发送第一订阅信息并订阅相关的目标服务器的信息与同一个服务器集群中服务器调用者订阅服务类似。这里对于代理服务器具体的订阅过程不再赘述。
[0237] 具体地,代理服务器从至少一个第二服务器注册中心接收到至少一个目标服务器的信息之后。为了代理服务器所属的第一服务器集群中的、需要跨服务器集群调用服务器的服务器调用者,能够顺利调用需要调用的目标服务器,代理服务器需要将接收到的至少一个目标服务器的信息注册到第一服务器集群中的第一服务器注册中心中。即,执行S330,代理服务器向第一服务器注册中心中注册至少一个目标服务器的信息。
[0238] 具体地,代理服务器将接收到的至少一个目标服务器的信息注册到第一服务器注册中心之后,第一服务器注册中心中即保存有该至少一个目标服务器的信息。第一服务器注册中心根据第一服务器集群中跨服务器集群调用服务器的服务器调用者的第二订阅信息,将目标服务器的地址信息以及接口信息反馈给服务器调用者。
[0239] 应理解,在第一服务器注册中心中已经注册有至少一个目标服务器的信息之后,第一服务器集群中的需要跨服务器集群调用目标服务器的服务器调用者调用目标服务器时,相当于是在同一个服务器集群中调用目标服务器,因为在所属的服务器集群的服务器注册中心中已经注册有目标服务器的信息。
[0240] 由于,在第一服务器注册中心中已经注册有至少一个目标服务器的信息之后,第一服务器集群中的需要跨服务器集群调用目标服务器的服务器调用者调用目标服务器的流程与,在同一个服务器集群中调用服务器提供者类似,这里不再详述服务器调用者调用目标服务器的流程。
[0241] 由上述可知,本申请通过在第一服务器所属的第一服务器集群中,部署能够跨服务器集群订阅第二服务器集群中的第二服务器的信息的代理服务器。并且代理服务器将订阅到的第二服务器的信息注册到第一服务器注册中心中。由于在第一服务器注册中心中注册有第二服务器的信息,那么针对第一服务器来说,无需再跨服务器集群从第二服务器注册中心中订阅第二服务器的信息了,直接在第一服务器注册中心中就能够订阅到第二服务器的信息。因此,相比于图3所示的跨服务器集群的服务器调用方法来说:
[0242] 首先,本申请实施例提供的服务器调用的方法,在代理服务器订阅到第二服务器的信息并注册到第一服务器注册中心中之后,后续第一服务器在调用第二服务器时,直接在第一的服务器注册中心中就能订阅到第二服务器的信息,对于第一服务器来说相当于本服务器集群内调用服务器,可以如图2所示地做P2P的RPC调用,降低跨服务器集群的服务器调用的时延。
[0243] 其次,由于对于第一服务器来说相当于本服务器集群内调用服务器,那么本服务器集群内调用服务器框架内置的负载均衡、失败自动重试、故障隔离、熔断降级、流控等功能均能延续使用,服务器调用的可靠性高。
[0244] 还有,无需在服务器集群中增加图3所示的SLB能够降低系统的资源开销。
[0245] 示例性地,当某个服务器调用者能够调用的目标服务器包括多个时,服务器调用者能够从多个满足调用的服务器提供者中挑选一个进行调用。
[0246] 下面以第一服务器集群中的第一服务器为例,进行说明当第一服务器能够调用的目标服务器包括多个时,第一服务器如何实现服务器调用的。其中,第一服务器为第一服务器集群中上述的需要跨服务器集群调用服务器的至少一个服务器调用者中的任意一个。
[0247] 示例性地,第一服务器能够调用的第二服务器来自上述的至少一个第二服务器集群。具体地,第一服务器基于预设路由规则调用第二服务器集群中第二服务器。其中,预设路由规则包括:
[0248] 一级路由规则,用于将第一服务器的调用服务器信息路由到第二服务器集群,以及
[0249] 二级路由规则,用于在第一服务器的调用服务器信息路由到第二服务器集群之后,将第一服务器的调用服务器信息路由到第二服务器;
[0250] 第二服务器集群为至少一个第二服务器集群中满足一级路由规则的第二服务器集群,第二服务器为第二服务器集群中满足二级路由规则的第二服务器。
[0251] 例如,第一服务器从第一服务器注册中心中订阅目标服务器#1。
[0252] 若第一服务器注册中心发现第一服务器集群中包括目标服务器#1的服务器提供者的信息,则第一服务器注册中心将目标服务器#1的服务器提供者的信息反馈给第一服务器,第一服务器优先调用所属的第一服务器集群中的目标服务器。具体地,调用方法如图2所示,这里不再赘述。
[0253] 若第一服务器注册中心发现第一服务器集群中的目标服务#器1的服务器提供者均不可用,或者,第一服务器集群中没有部署目标服务器#1的服务器提供者。则,第一服务器注册中心触发上述的代理服务器跨服务器集群获取目标服务器#1的服务器提供者的信息。
[0254] 假设,在3个服务器集群(服务器集群#1-服务器集群#3)中均获取到目标服务器#1的服务器提供者的信息,且每个服务器集群中包括3个服务器提供者(服务器提供者#1-服务器提供者#3)。则,第一服务器基于预设路由规则调用第二服务器集群中第一目标服务器包括:
[0255] 第一服务器调用服务器集群#1中的服务器提供者#1。
[0256] 其中,服务器集群#1为所述3个服务器集群中满足一级路由规则的服务器集群。
[0257] 示例性地,一级路由规则为随机路由规则,即,第一服务器从服务器集群#1-服务器集群#3随机选择到服务器集群#1;或者,
[0258] 一级路由规则为时延权重路由规则:第一服务器按照从每个服务器集群调用服务器的平均时延分配不同的权重系数,时延小的权重系数高,分配到低时延服务器集群的调用服务器消息会多一些,即,第一服务器从服务器集群#1-服务器集群#3中选择调用时延最小的服务器集群#1;或者,
[0259] 一级路由规则为指定服务器集群规则:事先配置好路由顺序,优先向指定的服务器集群路由,只有当指定的服务器集群中的服务器提供者都不可用时,才切换到其它服务器集群,即,第一服务器从服务器集群#1-服务器集群#3中指定了服务器集群#1;或者,[0260] 一级路由规则为轮巡规则:从第一个服务器集群开始依次选择服务器集群。
[0261] 服务器提供者#1为所述服务器集群#1中的3个服务器提供者(服务器提供者#1-服务器提供者#3)中满足二级路由规则的服务器提供者。
[0262] 示例性地,二级路由规则为随机路由规则,即,第一服务器从服务器提供者#1-服务器提供者#3随机选择到服务器提供者#1;或者,
[0263] 二级路由规则为时延权重路由规则:第一服务器按照从每个服务器提供者调用服务器的平均时延分配不同的权重系数,时延小的权重系数高,分配到低时延服务器提供者的调用服务器消息会多一些,即,第一服务器从服务器提供者#1-服务器提供者#3中选择调用时延最小的服务器提供者#1;或者,
[0264] 二级路由规则为指定服务器提供者规则:事先配置好路由顺序,优先向指定的服务器提供者路由,只有当指定的服务器提供者中的服务器提供者都不可用时,才切换到其它服务器提供者,即,第一服务器从服务器提供者#1-服务器提供者#3中指定了服务器提供者#1;或者,
[0265] 二级路由规则为轮巡规则:从第一个服务器提供者开始依次选择服务器提供者。
[0266] 应理解,一个服务器集群中的服务器提供者可能会发生故障。例如,某个服务器提供者下线。如果,上述的代理服务器将接收到的至少一个目标服务器的信息注册到第一服务器注册中心之后,不再更新。会导致某些目标服务器的信息指示的服务器提供者发生故障了,当时第一服务器注册中心并不知晓,导致第一服务器集群中的服务器调用者在调用该目标服务器时调用不成功。
[0267] 因此,为了避免第一服务器集群中的服务器调用者,服务器调用失败。本申请实施例中,代理服务器将上述的订阅消息携带在心跳请求消息中;则当目标服务器发生故障了,代理服务器接收到所述至少一个第二服务器注册中心发送的心跳响应消息,所述心跳响应消息中包括第二指示信息,所述第二指示信息用于指示所述至少一个目标服务器中发生故障的目标服务器。
[0268] 示例性地,一个服务器集群中的服务器可能会发生故障,也就是说代理服务器根据配置信息获取到的至少一个目标服务器的信息指示的目标服务器可能会发生故障。因此,在本申请实施例中,为了提高服务器调用的准确性,代理服务器将订阅消息携带在心跳请求消息中发送给对应的第二服务器集群中的服务器注册中心。
[0269] 例如,图4中的第二服务器注册中心在接收到代理服务器发送的心跳请求消息之后,并检测本服务器集群中的某个目标服务器出现故障,第二服务器注册中心会向代理服务器发送心跳响应消息,所述心跳响应消息中包括第二指示信息,第二指示信息用于指示代理服务器有一个目标服务器出现了故障,无法支持调用。
[0270] 假设,第二服务器集群中有3个目标服务器。代理服务器首先根据配置信息从第二服务器注册中心中获取到该3个目标服务器的信息,并将该3个目标服务器的信息注册到第一服务器注册中心中。代理服务器继续根据配置信息向第二服务器注册中心发送第一订阅消息,该第一订阅消息携带在心跳请求消息中,当第二服务器注册中心进行服务器健康检测,发现该3个目标服务器中有一个目标服务器发生了故障,则第二服务器注册中心向代理服务器发送心跳响应消息,且该心跳响应消息中携带了第二指示信息,指示哪一个目标服务器发生了故障。进而,代理服务器再反馈给第一服务器注册中心,能够提高第一服务器集群中服务器调用者调用服务器的性能。
[0271] 上面结合图4-图6详细介绍了本申请实施例提供的调用服务器的方法的具体流程。下面结合具体实施例说明本申请实施例提供的调用服务器的方法的应用。
[0272] 图7是本申请实施例提供的一种调用服务器的方法的应用示意图。包括亚太区域,以及在亚太区域中部署的源服务器注册中心、代理服务器、服务器调用者,其中,服务器调用者中包括路由缓存表;欧洲区域,以及在欧洲区域中部署的目的服务器注册中心、服务器提供者#1和服务器提供者#2。
[0273] 应理解,亚太区域中的源服务器注册中心、代理服务器以及服务器调用者为同一个服务器集群中的服务器;欧洲区域中的目的服务器注册中心、服务器提供者#1和服务器提供者#2为同一个服务器集群中的服务器。
[0274] 例如,服务器提供者#1和服务器提供者#2为提供登陆服务的服务器。欧洲区域的用户,在欧洲区域时能够直接调用服务器提供者#1或服务器提供者#2实现登陆服务。当用户从欧洲区域漫游到亚太区域时,由于数据不允许出欧洲区域,亚太区域里面没有该用户的登陆数据。此时用户在使用亚太区域中的服务器调用者实现登陆服务,可以通过亚太区域部署的代理服务器调用服务器提供者#1或服务器提供者#2,调用成功以后就能登陆成功了。
[0275] 具体地,亚太区域中的服务器调用者需要跨服务器集群调用该欧洲区域中的服务器提供者#1和/或服务器提供者#2提供的目标服务器,开发者在亚太区域中部署代理服务器时,将欧洲区域的标识、目的服务器注册中心的地址、服务器提供者#1和服务器提供者#2提供的目标服务器所属的应用的名称以及目标服务器的名称,作为预设的配置信息写入到代理服务器中,使得代理服务器能够跨服务器集群获取到服务器提供者#1和服务器提供者#2的信息。其中,预设的配置信息可以通过本地配置文件的方式(例如,一种标记语言(yet another markup language,YAML))进行配置。具体地,配置信息包括如下信息:
[0276] 1)欧洲区域名称;
[0277] 2)目的服务器注册中心地址:https://xxx/path;
[0278] 3)目标服务器所属的应用的名称;
[0279] 4)目标服务器名称;
[0280] 下面从管理数据流和业务数据流分别介绍图7中的服务器调用。
[0281] 管理数据流:
[0282] 步骤一:欧洲区域中部署的服务器提供者(例如,图7中所示的服务器提供者#1和服务器提供者#2)将各自的信息注册到目的服务器注册中心中。其中,所注册的服务器的信息包括:服务器提供者的名称、地址以及接口信息。
[0283] 应理解,图7中的目的服务器注册中心负责欧洲区域中的服务器的信息注册和服务器订阅,以及亚太区域中的代理服务器连接到目的服务器注册中心之后,将目的服务器注册中心注册的满足目标服务器的服务器提供者的信息反馈给代理服务器,实现跨服务器集群的服务器调用。
[0284] 其中,目的服务器注册中心实现服务器的信息注册包括:
[0285] 欧洲区域中的服务器提供者通过目的服务器注册中心软件开发工具(software development kit,SDK)连接目的服务器注册中心,将需要注册的服务器的地址信息、名称以及接口信息等注册到目的服务器注册中心。
[0286] 目的服务器注册中心实现服务器的订阅包括:
[0287] 亚太区域中部署的代理服务器根据配置信息,通过源服务器注册中心SDK连接到目的服务器注册中心,获取目的服务器注册中心中注册的满足目标服务器的服务器提供者的信息。
[0288] 由于,本申请实施例中主要涉及跨服务器集群的服务器调用,因此图7中并未示出欧洲区域中的服务器订阅。其中,同一个服务器集群中的服务器订阅在前文已结合图2进行说明,这里不再赘述。
[0289] 步骤二:代理服务器从目的服务器注册中心获取服务器提供者#1和服务器提供者#2的信息。
[0290] 具体地,代理服务器根据自身的配置信息确定通过源服务器注册中心SDK连接到目的服务器注册中心,根据配置信息中的目标服务器所属的应用的名称以及目标服务器的名称,获取服务器提供者#1和服务器提供者#2的信息。
[0291] 应理解,本申请实施例中的在亚太区域中部署代理服务器,可以是单机部署或者是集群部署。其中,单机部署指的是亚太区域中的服务器集群在一台机器上部署着,进而代理服务器单机部署即可;但是,在一般情况下,为了保证服务器集群能够顺利运行,服务器集群会部署在多台机器上,使得某台机器故障时,该服务器集群仍然可以运行,进而代理服务器需要集群部署。
[0292] 也就是说,本申请中所涉及的在一个服务器集群中部署代理服务器基于该服务器集群的部署情况,进行代理服务器的部署。
[0293] 步骤三:代理服务器将服务器提供者#1和服务器提供者#2的信息注册到源服务器注册中心中。
[0294] 代理服务器获取到目的服务器注册中心中的服务器提供者#1和服务器提供者#2之后,将服务器提供者#1和服务器提供者#2注册到源服务器注册中心。这样亚太区域中的服务器调用者就可以正常订阅到欧洲区域中的目标服务器了,实现跨服务器集群的服务器调用。
[0295] 步骤四:源服务器注册中心将服务器提供者#1和服务器提供者#2的信息作为服务器调用者需要调用的目标服务器的信息反馈给服务器调用者。
[0296] 应理解,图7中所示的源服务器注册中心负责提供亚太区域中的和欧洲区域中的服务器的信息注册,以及亚太区域中的服务器调用者的服务器订阅。
[0297] 其中,源服务器注册中心实现服务器的信息注册包括:
[0298] 亚太区域中的服务器提供者通过源服务器注册中心SDK连接源服务器注册中心,将需要注册的服务器的地址信息、名称以及接口信息等注册到源服务器注册中心;欧洲区域中的服务器提供者#1和服务器提供者#2的信息,由代理服务器负责同步和注册到源服务器注册中心。
[0299] 源服务器注册中心实现服务器的订阅包括:
[0300] 亚太区域中的服务器调用者通过源服务器注册中心SDK连接源服务器注册中心,将需要调用的目标服务器的名称注册到源服务器注册中心。源服务器注册中心将需要调用的目标服务器的地址信息以及接口信息等反馈给服务器调用者,服务器调用者将接收到的目标服务器的地址信息同步到本地路由表中,用于后续的服务器调用和负载均衡。对于服务器调用者,不需要关心目标服务器部署的位置信息,即目标服务器可能部署在亚太区域中,或者欧洲区域中。
[0301] 步骤五:更新。
[0302] 代理服务器需要实现跨服务器集群的心跳检测机制,通过与欧洲区域中的目标服务器注册中心做心跳交互,代理服务器将自己订阅的目标服务器所属的应用的名称以及目标服务器的名称携带到心跳请求消息中。
[0303] 目标服务器注册中心检测订阅的服务器提供者#1和服务器提供者#2运行状态,如果发现有变更,将变更的列表携带到心跳响应中发送给代理服务器。代理服务器获取到变更列表信息之后,将其同步到源服务器注册中心。由源服务器注册中心发送变更通知消息到服务器调用者,服务器调用者接收到变更通知消息之后,主动到源服务器注册中心查询最新的目标服务器的信息,将最新的目标服务器的信息缓存到本地路由缓存表中,后续服务器调用时,就可以剔除掉已经下线或者故障的目标服务器,保障跨服务器集群的服务器调用的成功率。
[0304] 业务数据流:
[0305] 步骤一:服务器调用者进行服务器调用。
[0306] 由上述的管理数据流可知,服务器调用者本地的路由缓存表中缓存有目标服务器的信息。也就是说服务器调用者已经获取到服务器提供者#1和服务器提供者#2的信息。进而需要调用服务器时,根据路由规则选择服务器提供者#1或服务器提供者#2完成调用。
[0307] 具体地,路由规则包括:
[0308] 一级路由规则,由于图7所示的实施例代理服务器只从欧洲区域中获取到服务器提供者#1和服务器提供者#2的信息,所以服务器调用者的一级路由规则路由到欧洲区域。应理解,图7只是一种举例,当代理服务器从多个区域/服务器集群获取到目标服务器的信息时,服务器调用者需要基于一级路由规则从多个区域/服务器集群中选择一个区域/服务器集群,这里不再赘述。
[0309] 二级路由规则,服务器调用者基于二级路由规则从服务器提供者#1和服务器提供者#2中选择一个服务器提供者进行服务器调用。例如,二级路由规则为随机路由规则。则,服务器调用者随机选择到服务器提供者#1进行服务器调用。
[0310] 上面结合图4-图7详细介绍了本申请提供的调用服务器的方法,下面结合图8详细介绍本申请提供的代理服务器。
[0311] 参见图8,图8是实施例本申请提出的代理服务器10的示意图。代理服务器,部署在第一服务器集群中,所述第一服务器集群中还包括第一服务器注册中心和至少一个服务器调用者,所述至少一个第一服务器需要从第二服务器集群中调用至少一个第二服务器,所述第二服务器集群中还包括第二服务器注册中心。如图8所示,装置10包括通信接口110、处理器120以及存储器130。
[0312] 存储器130,用于存储计算机程序;
[0313] 通信接口110用于收发信息;
[0314] 所述处理器120还用于从存储器中调用并运行该计算机程序,使得所述代理服务器执行以下步骤:根据配置信息向所述第二服务器注册中心发送第一订阅消息,所述第一订阅消息用于订阅被调用的至少一个第二服务器的信息,
[0315] 接收所述第二服务器注册中心发送的响应消息,所述响应消息中携带所述被调用的至少一个第二服务器的信息;
[0316] 将所述被调用的至少一个第二服务器的信息注册到所述第一服务器注册中心中,用于所述至少一个第一服务器调用所述至少一个第二服务器。
[0317] 装置10和方法实施例中的代理服务器完全对应,装置10的相应单元用于执行图4所示的方法实施例中由代理服务器执行的相应步骤。
[0318] 其中,代理服务器执行方法实施例中接收的步骤。例如,执行图4中的S320从第二服务器注册中心接收响应消息。代理服务器执行方法实施例中代理服务器内部实现或处理的步骤。例如,执行图4中的S330注册订阅到的目标服务器的信息。代理服务器还用于执行方法实施例中发送的步骤。例如,执行图4中的S310向第二服务器注册中心发送订阅消息。
[0319] 本申请还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该指令在计算机上运行时,使得计算机执行上述如图4-图7所示的方法中代理服务器执行的各个步骤。
[0320] 本申请还提供了一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行如图4-图7所示的方法中代理服务器执行的各个步骤。
[0321] 本申请还提供一种芯片,包括处理器。该处理器用于读取并运行存储器中存储的计算机程序,以执行本申请提供的服务器调用方法中由代理服务器执行的相应操作和/或流程。可选地,该芯片还包括存储器,该存储器与该处理器通过电路或电线与存储器连接,处理器用于读取并执行该存储器中的计算机程序。进一步可选地,该芯片还包括通信接口,处理器与该通信接口连接。通信接口用于接收需要处理的数据和/或信息,处理器从该通信接口获取该数据和/或信息,并对该数据和/或信息进行处理。该通信接口可以是输入输出接口。
[0322] 本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0323] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0324] 在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0325] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0326] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0327] 所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0328] 以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。