一种远程过程调用协议自适应方法、相关装置及服务器与流程

文档序号:32408143发布日期:2022-12-02 20:55阅读:26来源:国知局
一种远程过程调用协议自适应方法、相关装置及服务器与流程
一种远程过程调用协议自适应方法、相关装置及服务器
1.本技术是分案申请,原申请的申请号是201810554879.2,原申请日是2018年05月31日,原申请的全部内容通过引用结合在本技术中。
技术领域
2.本技术涉及计算机技术领域,尤其涉及一种远程过程调用协议自适应方法、相关装置及服务器。


背景技术:

3.远程过程调用(remote procedure call,rpc)是一种常见的分布式系统的通信机制和开发方法,它允许开发人员像调用本地服务一样调用远程服务,调用者对网络通信、参数编码等细节透明,甚至不用感知远程服务的部署位置。rpc在提供了强大的远程调用能力的同时不失本地调用的语义简洁性,从而在分布式计算领域特别是服务化架构中得到大量应用。分布式系统中的各个服务一般通过命名服务来互相发现。图1为现有技术中的一种rpc的场景示意图,该场景中包括服务消费者(consumer)、服务提供者(provider)、服务运行容器(container)、注册中心(registry)和监控中心(monitor),rpc的流程包括:
4.1、服务运行容器启动、加载、运行服务提供者;
5.2、服务提供者启动后向注册中心注册自己可提供的服务,注册的信息包括但不限于:对外暴露的互联网协议地址(internet protocol address,ip)、端口等信息;
6.3、服务消费者在启动后向注册中心订阅自己所需的服务,可称为目标服务。
7.4、注册中心将提供目标服务的服务提供者的注册信息发送给该服务消费者,另外,如果目标服务的信息有变更,则注册中心也会将变更的信息发送给服务消费者。
8.5.服务消费者基于负载均衡算法从注册中心反馈的服务提供者中选择一个服务提供者来调用该目标服务,如果调用失败,则选择另外一个服务提供者来调用该目标服务。
9.6.服务消费者和服务提供者在内存中累计对各个服务的调用次数和调用时间,并按照预设时间周期将统计的数据发送到监控中心,以便掌控各个服务的调用情况。
10.目前服务消费者从服务提供者调用服务时需要基于通信协议进行通信,目前的做法是预先在服务消费者上针对每个服务各配置至少一个通信协议,当某个服务提供者所支持的通信协议有更新(例如,升级)时服务消费者是无法感知到的,这可能导致服务消费者后续无法采用更新后的通信协议正常调用该某个服务提供上的服务。也即是说,现有技术中的通信协议的配置方式可能导致服务消费者无法正常从服务提供者上调用服务。


技术实现要素:

11.本技术实施例公开了一种远程过程调用协议自适应方法、相关装置及服务器,能够自适应地选择合适的通信协议来用于服务之间的调用。
12.第一方面,本技术实施例提供一种远程过程调用协议自适应方法,该方法包括:
13.客户端向注册中心发送第一请求消息,所述注册中心存储了多个服务中每个服务
所在的服务端的通信地址和支持的通信协议;所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址和所述第一服务端支持的通信协议;
14.所述客户端接收所述注册中心发送的所述第一服务端的通信地址和支持的通信协议;
15.所述客户端根据预设的选择策略从所述客户端支持的通信协议和所述第一服务端支持的通信协议中,选择所述客户端和所述第一服务端均支持的第一通信协议;
16.所述客户端根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务。
17.通过执行上述方法,客户端向注册中心发送第一请求消息,注册中心根据第一请求消息向客户端发送第一服务端的通信地址和支持的通信协议,然后客户端根据预设的选择策略筛选出该客户端和该第一服务端均支持的第一通信协议,之后客户端根据该第一通信协议和该第一服务端的通信地址调用所述第一服务。在这个过程中,该客户端可以根据选择策略自适应地选择合适的通信协议来与第一服务端进行通信,优化了通信协议的选择方案。
18.在又一种可选的方案中,所述方法包括:所述客户端更新所述选择策略,不同的所述选择策略规定的筛选规则不同。这样一来,当需要那种类型的协议的时候就可以先选择相应地选择策略,然后通过该选择策略选择出所需的通信协议。
19.在又一种可选的方案中,所述客户端根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务之后,还包括:所述客户端接收所述注册中心发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议。这样一来,即便是第一服务的相关信息发生了变更,该客户端依旧可以顺利地对第一服务进行调用。
20.第二方面,本技术实施例提供一种远程过程调用协议自适应方法,该方法包括:
21.客户端向注册中心发送第一请求消息,所述注册中心存储了多个服务中每个服务所在的服务端的通信地址和支持的通信协议;所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址,所述第一请求消息携带所述客户端支持的通信协议;
22.所述客户端接收所述注册中心发送的第一通信协议和所述第一服务端的通信地址,所述第一通信协议为所述客户端和所述第一服务端均支持的通信协议;
23.所述客户端根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务。
24.通过执行上述方法,客户端向注册中心发送第一请求消息,注册中心根据第一请求消息以及各个服务端注册到注册中心的信息确定该客户端和该第一服务端均支持的第一通信协议,然后将第一通信协议和第一服务端的通信地址发送给客户端,之后客户端根据第一通信协议和该第一服务端的通信地址调用所述第一服务。在这个过程中,注册中心可以根据选择策略自适应地选择合适的通信协议供客户端与第一服务端进行通信,优化了通信协议的选择方案。
25.在又一种可选的方案中,所述客户端根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务之后,还包括:所述客户端接收所述注册中心发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议。这样一来,即便是
第一服务的相关信息发生了变更,该客户端依旧可以顺利地对第一服务进行调用。
26.第三方面,本技术实施例提供一种远程过程调用协议自适应方法,该方法包括:
27.注册中心接收客户端发送的第一请求消息,所述注册中心存储了多个服务中每个服务所在的服务端的通信地址和支持的通信协议;所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址和所述第一服务端支持的通信协议;
28.所述注册中心向所述客户端发送所述第一服务端的通信地址和支持的通信协议;所述第一服务端支持的通信协议用于确定第一通信协议,所述第一通信协议为所述客户端和所述第一服务端均支持的通信协议;所述第一通信协议和所述第一服务端的通信地址用于所述客户端从所述第一服务端上调用所述第一服务。
29.通过执行上述方法,客户端向注册中心发送第一请求消息,注册中心根据第一请求消息向客户端发送第一服务端的通信地址和支持的通信协议,然后客户端根据预设的选择策略筛选出该客户端和该第一服务端均支持的第一通信协议,之后客户端根据该第一通信协议和该第一服务端的通信地址调用所述第一服务。在这个过程中,该客户端可以根据选择策略自适应地选择合适的通信协议来与第一服务端进行通信,优化了通信协议的选择方案。
30.在又一种可选的方案中,所述注册中心接收客户端发送的第一请求消息之前,还包括:所述注册中心接收所述第一服务端发送的所述第一服务端的通信地址和支持的通信协议;所述注册中心存储所述第一服务端的通信地址和支持的通信协议。可以理解的是,第一服务端将第一服务的相关信息注册到注册中心,这样注册中心就可以向其他服务提供该第一服务的信息,以便其他服务可以顺利对该第一服务进行调用。
31.在又一种可选的方案中,所述注册中心向所述客户端发送所述第一服务端的通信地址和支持的通信协议之后,还包括:所述注册中心接收所述第一服务端发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议;所述注册中心向所述客户端发送所述第一服务端的变更信息。这样一来,即便是第一服务的相关信息发生了变更,该客户端依旧可以顺利地对第一服务进行调用。
32.第四方面,本技术实施例提供一种远程过程调用协议自适应方法,该方法包括:
33.注册中心接收客户端发送的第一请求消息,所述注册中心存储了多个服务中每个服务所在的服务端的通信地址和支持的通信协议;所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址,所述第一请求消息携带所述客户端支持的通信协议;
34.所述注册中心确定所述第一服务端的通信地址支持的通信协议,并根据预设的选择策略从所述第一服务端支持的通信协议和所述客户端支持的通信协议中,选择所述第一服务端和所述客户端均支持的第一通信协议;
35.所述注册中心向所述客户端发送所述第一通信协议和所述第一服务端的通信地址,所述第一通信协议和所述第一服务端的通信地址用于所述客户端从所述第一服务端上调用所述第一服务。
36.通过执行上述方法,客户端向注册中心发送第一请求消息,注册中心根据第一请求消息以及各个服务端注册到注册中心的信息确定该客户端和该第一服务端均支持的第一通信协议,然后将第一通信协议和第一服务端的通信地址发送给客户端,之后客户端根
据第一通信协议和该第一服务端的通信地址调用所述第一服务。在这个过程中,注册中心可以根据选择策略自适应地选择合适的通信协议供客户端与第一服务端进行通信,优化了通信协议的选择方案。
37.在又一种可选的方案中,所述方法包括:所述注册中心更新所述选择策略,不同的所述选择策略规定的筛选规则不同。也即是说,由该注册中心对选择策略进行集中维护,这样当选择协议的标准需要进行变换时直接在注册中心修改选择策略就可以实现,之后无论哪个服务请求第一服务的支持的通信协议,都可以从注册中心获得满足最新标准的通信协议。即选择策略在注册中心进行了集中维护,大大降低了维护成本。
38.在又一种可选的方案中,所述注册中心接收客户端发送的第一请求消息之前,还包括:所述注册中心接收所述第一服务端发送的所述第一服务端的通信地址和支持的通信协议;所述注册中心存储所述第一服务端的通信地址和支持的通信协议。可以理解的是,第一服务端将第一服务的相关信息注册到注册中心,这样注册中心就可以向其他服务提供该第一服务的信息,以便其他服务可以顺利对该第一服务进行调用。
39.在又一种可选的方案中,所述注册中心向所述客户端发送所述第一服务端的通信地址和支持的通信协议之后,还包括:所述注册中心接收所述第一服务端发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议;所述注册中心向所述客户端发送所述第一服务端的变更信息。这样一来,即便是第一服务的相关信息发生了变更,该客户端依旧可以顺利地对第一服务进行调用。
40.第五方面,本技术实施例提供一种客户端,该客户端包括:
41.通信单元,用于向注册中心发送第一请求消息,所述注册中心存储了多个服务中每个服务所在的服务端的通信地址和支持的通信协议;所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址和所述第一服务端支持的通信协议;
42.所述通信单元,还用于接收所述注册中心发送的所述第一服务端的通信地址和支持的通信协议;
43.处理单元,用于根据预设的选择策略从所述客户端支持的通信协议和所述第一服务端支持的通信协议中,选择所述客户端和所述第一服务端均支持的第一通信协议;
44.所述处理单元,还用于根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务。
45.可以看出,客户端向注册中心发送第一请求消息,注册中心根据第一请求消息向客户端发送第一服务端的通信地址和支持的通信协议,然后客户端根据预设的选择策略筛选出该客户端和该第一服务端均支持的第一通信协议,之后客户端根据该第一通信协议和该第一服务端的通信地址调用所述第一服务。在这个过程中,该客户端可以根据选择策略自适应地选择合适的通信协议来与第一服务端进行通信,优化了通信协议的选择方案。
46.在又一种可选的方案中,所述处理单元,还用于更新所述选择策略,不同的所述选择策略规定的筛选规则不同。这样一来,当需要那种类型的协议的时候就可以先选择相应地选择策略,然后通过该选择策略选择出所需的通信协议。
47.在又一种可选的方案中,所述通信单元还用于,在所述处理单元根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务之后,接收所述注册中心发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议。这样一来,
即便是第一服务的相关信息发生了变更,该客户端依旧可以顺利地对第一服务进行调用。
48.第六方面,本技术实施例提供一种客户端,该客户端包括:
49.通信单元,用于向注册中心发送第一请求消息,所述注册中心存储了多个服务中每个服务所在的服务端的通信地址和支持的通信协议;所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址,所述第一请求消息携带所述客户端支持的通信协议;
50.所述通信单元,还用于接收所述注册中心发送的第一通信协议和所述第一服务端的通信地址,所述第一通信协议为所述客户端和所述第一服务端均支持的通信协议;
51.处理单元,用于根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务。
52.可以看出,客户端向注册中心发送第一请求消息,注册中心根据第一请求消息以及各个服务端注册到注册中心的信息确定该客户端和该第一服务端均支持的第一通信协议,然后将第一通信协议和第一服务端的通信地址发送给客户端,之后客户端根据第一通信协议和该第一服务端的通信地址调用所述第一服务。在这个过程中,注册中心可以根据选择策略自适应地选择合适的通信协议供客户端与第一服务端进行通信,优化了通信协议的选择方案。
53.在又一种可选的方案中,所述通信单元还用于,在所述处理单元根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务之后,接收所述注册中心发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议。这样一来,即便是第一服务的相关信息发生了变更,该客户端依旧可以顺利地对第一服务进行调用。
54.第七方面,本技术实施例提供一种注册中心,该注册中心包括:
55.通信单元,用于接收客户端发送的第一请求消息,所述注册中心存储了多个服务中每个服务所在的服务端的通信地址和支持的通信协议;所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址和所述第一服务端支持的通信协议;
56.所述通信单元,还用于向所述客户端发送所述第一服务端的通信地址和支持的通信协议;所述第一服务端支持的通信协议用于确定第一通信协议,所述第一通信协议为所述客户端和所述第一服务端均支持的通信协议;所述第一通信协议和所述第一服务端的通信地址用于所述客户端从所述第一服务端上调用所述第一服务。
57.可以看出,客户端向注册中心发送第一请求消息,注册中心根据第一请求消息向客户端发送第一服务端的通信地址和支持的通信协议,然后客户端根据预设的选择策略筛选出该客户端和该第一服务端均支持的第一通信协议,之后客户端根据该第一通信协议和该第一服务端的通信地址调用所述第一服务。在这个过程中,该客户端可以根据选择策略自适应地选择合适的通信协议来与第一服务端进行通信,优化了通信协议的选择方案。
58.在又一种可选的方案中,所述通信单元接收客户端发送的第一请求消息之前:所述通信单元,还用于接收所述第一服务端发送的所述第一服务端的通信地址和支持的通信协议;所述处理单元,用于存储所述第一服务端的通信地址和支持的通信协议。可以理解的是,第一服务端将第一服务的相关信息注册到注册中心,这样注册中心就可以向其他服务提供该第一服务的信息,以便其他服务可以顺利对该第一服务进行调用。
59.在又一种可选的方案中,所述通信单元向所述客户端发送所述第一服务端的通信
地址和支持的通信协议之后,还用于:接收所述第一服务端发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议;向所述客户端发送所述第一服务端的变更信息。这样一来,即便是第一服务的相关信息发生了变更,该客户端依旧可以顺利地对第一服务进行调用。
60.第八方面,本技术实施例提供了一种注册中心,该注册中心包括:
61.通信单元,用于接收客户端发送的第一请求消息,所述注册中心存储了多个服务中每个服务所在的服务端的通信地址和支持的通信协议;所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址,所述第一请求消息携带所述客户端支持的通信协议;
62.处理单元,用于确定所述第一服务端的通信地址支持的通信协议,并根据预设的选择策略从所述第一服务端支持的通信协议和所述客户端支持的通信协议中,选择所述第一服务端和所述客户端均支持的第一通信协议;
63.所述通信单元,还用于向所述客户端发送所述第一通信协议和所述第一服务端的通信地址,所述第一通信协议和所述第一服务端的通信地址用于所述客户端从所述第一服务端上调用所述第一服务。
64.可以看出,客户端向注册中心发送第一请求消息,注册中心根据第一请求消息以及各个服务端注册到注册中心的信息确定该客户端和该第一服务端均支持的第一通信协议,然后将第一通信协议和第一服务端的通信地址发送给客户端,之后客户端根据第一通信协议和该第一服务端的通信地址调用所述第一服务。在这个过程中,注册中心可以根据选择策略自适应地选择合适的通信协议供客户端与第一服务端进行通信,优化了通信协议的选择方案。
65.在又一种可选的方案中,所述处理单元,还用于更新所述选择策略,不同的所述选择策略规定的筛选规则不同。也即是说,由该注册中心对选择策略进行集中维护,这样当选择协议的标准需要进行变换时直接在注册中心修改选择策略就可以实现,之后无论哪个服务请求第一服务的支持的通信协议,都可以从注册中心获得满足最新标准的通信协议。即选择策略在注册中心进行了集中维护,大大降低了维护成本。
66.在又一种可选的方案中,所述通信单元接收客户端发送的第一请求消息之前:所述通信单元,还用于接收所述第一服务端发送的所述第一服务端的通信地址和支持的通信协议;所述处理单元,还用于存储所述第一服务端的通信地址和支持的通信协议。可以理解的是,第一服务端将第一服务的相关信息注册到注册中心,这样注册中心就可以向其他服务提供该第一服务的信息,以便其他服务可以顺利对该第一服务进行调用。
67.在又一种可选的方案中,所述通信单元向所述客户端发送所述第一服务端的通信地址和支持的通信协议之后,还用于:接收所述第一服务端发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议;向所述客户端发送所述第一服务端的变更信息。这样一来,即便是第一服务的相关信息发生了变更,该客户端依旧可以顺利地对第一服务进行调用。
68.第九方面,本技术实施例提供一种服务器,所述服务器用于运行第五方面,或者第五方面的任一可能的实现方式,或者第六方面,或者第六方面任一种可能的实现方式所描述的客户端。
69.第十方面,本技术实施例提供一种服务器,所述服务器用于运行第七方面,或者第七方面的任一可能的实现方式,或者第八方面,或者第八方面任一种可能的实现方式所描述的注册中心。
70.通过实施本技术实施例,客户端向注册中心发送第一请求消息,注册中心根据第一请求消息向客户端发送第一服务端的通信地址和支持的通信协议,然后客户端根据预设的选择策略筛选出该客户端和该第一服务端均支持的第一通信协议,之后客户端根据该第一通信协议和该第一服务端的通信地址调用所述第一服务。在这个过程中,该客户端可以根据选择策略自适应地选择合适的通信协议来与第一服务端进行通信,优化了通信协议的选择方案。
附图说明
71.以下对本技术实施例用到的附图进行介绍。
72.图1是现有技术中的一种rpc的场景示意图;
73.图2是本技术实施例提供的一种rpc的分布式软件架构示意图;
74.图3是本技术实施例提供的一种远程过程调用协议自适应方法的流程示意图;
75.图4是本技术实施例提供的一种云原生场景中的微服务的场景示意图;
76.图5是本技术实施例提供的一种服务之间支持的通信协议的场景示意图;
77.图6是本技术实施例提供的一种远程过程调用协议自适应方法的流程示意图;
78.图7是本技术实施例提供的一种客户端的结构示意图;
79.图8是本技术实施例提供的一种客户端的结构示意图;
80.图9是本技术实施例提供的一种服务器的结构示意图;
81.图10是本技术实施例提供的一种注册中心的结构示意图;
82.图11是本技术实施例提供的一种注册中心的结构示意图;
83.图12是本技术实施例提供的一种服务器的结构示意图。
具体实施方式
84.下面结合本技术实施例中的附图对本技术实施例进行描述。
85.请参见图2,图2是本技术实施例提供的一种prc的分布式软件架构示意图,该软件架构包括服务治理框架201和多个应用端,图2中仅以3个应用端为例进行示意,这3个应用端依次表示为应用端202、应用端203和应用端204。其中,该服务治理框架201包括注册中心,用于接收并维护各个应用端所注册的注册信息,例如,注册信息可以包括应用端的ip、端口、支持的通信协议、可提供的服务的名称和/或标识等信息。该注册中心还用于向有需求的应用端发送相应服务所在的应用端的ip、端口、支持的通信协议等信息。可选的,该注册中心可以包括协议适配模块,用于为两个需要进行通信的应用端确定通信协议。
86.另外,每个应用端可以包括服务2001、编程框架2002和分布式通信层2003,一个应用端获得了另外一个应用端的注册信息之后,该一个应用端中的编程框架2002可以控制该一个应用端中的服务2001调用该另一个服务端中的服务2001。调用过程由该一个应用端中的分布式通信层2003和该另一个应用端中的分布式通信层2003作为通信支撑。在图2中,各个应用端的分布式通信层之间建立连接,且均与该注册中心建立了连接。每个编程框架
2002可以包括序列化/反序列化模块和协议适配模块(可选),该一个应用端与该另一个应用端之间通信时使用的通信协议可以由该一个应用端中的或者该注册中心中的协议适配模块来确定。
87.以上分布式软件框架可以部署在一个服务器上或者一个分布式的服务器集群上。另外,在以上分布式软件框架中,调用服务的应用端可以称为客户端,提供服务的应用端可以称为服务端,一个应用端可能作为一个服务的客户端也可能作为另一个服务的服务端。例如,应用端202上可以提供服务1,应用端203上可以提供服务2,应用端204上可以提供服务3,假若应用端202可以从应用端203上调用服务2,应用端203可以从应用端204上调用服务3,那么,针对服务2而言,应用端203为服务端,针对服务3而言,应用端203为客户端。
88.请参见图3,图3是本技术实施例提供的一种远程过程调用协议自适应方法,该方法可以基于图2所示的分布式软件架构来实现,该方法包括但不限于如下步骤:
89.步骤s300:各个服务端向注册中心注册自身所提供的服务的信息。
90.具体地,假设该各个服务端中包括服务端a,下面以服务端a为例进行说明,该服务端a将自己可提供的服务的名称和/或标识、该服务端a的ip、端口、支持的通信协议等信息注册到该注册中心。各个服务端将可提供的服务在注册中心注册后,注册中心就知道了各个服务端能够提供哪些服务,以及各个客户端的通信地址以及可支持的通信协议,即该注册中心存储了多个服务中每个服务所在的服务端的通信地址和支持的通信协议。在本技术实施例中,两个不同的服务端可能会提供相同的服务;另外,一个服务端可能支持一种或多种通信协议。
91.下面结合云原生(cloud native)场景对服务的特点进行举例说明。如图4所示,该场景示意了基于java服务开发运行框架的微服务、基于c服务开发运行框架的微服务、基于go服务开发运行框架的微服务,这些微服务均属于以上描述的服务。在本技术实施例中,可以以接口描述语言(interface description language,idl)为契约定义各个微服务,并提供编译工具根据idl文件生成对应c或java或go语言的接口代码。举例来说,定义服务名称为helloservice的服务的实例可以如下:
92.package com.huawei.demo;
93.message hellorequest{
94.ꢀꢀ
required int32 sno=1;
95.}
96.message helloreply{
97.ꢀꢀ
required int32 sno=1;
98.}
99.service helloservice{
100.ꢀꢀ
rpc sayhello(hellorequest)returns(helloreply);
101.}
102.进一步地使用编译工具生成对应java接口代码的实例可以如下:
103.package com.huawei.demo;
104.public interface helloservice{
105.ꢀꢀꢀꢀꢀꢀꢀꢀ
int sayhello(int name);
106.}
107.执行上述实例之后,该helloservice服务就成了一个基于c服务开发运行框架的微服务。基于相同原理就可以得到基于java服务开发运行框架的微服务、基于c服务开发运行框架的微服务、基于go服务开发运行框架的微服务,等等。其中,假若基于c服务开发运行框架的各个微服务间支持基于传输控制协议(transmission control protocol,tcp)传输protobuf序列化的高性能私有协议a;基于java服务开发运行框架的各个微服务间支持基于netty传输基于protobuf序列化的高性能私有协议b;基于go服务开发运行框架的各个微服务间支持基于tcp传输私有协议c;以上列出的所有服务间为了互通都支持目标互通协议(例如,http协议),该目标互通协议可以表示为interway,那么各种类型的服务的特点归纳如表以所示,各种类型的服务之间通信时可采用的通信协议方案如图5所示,从图5可看出:
108.1.基于c语言的服务于基于c语言的服务之间可以使用私有协议a互通。
109.2.基于java语言的服务于基于java语言的服务之间可以使用私有协议b互通。
110.3.基于go语言的服务于基于go语言的服务之间可以使用私有协议c互通。
111.4.基于c语言的服务于、基于java语言的服务、基于go语言的服务中任两相之间可以使用目标互通协议互通。
112.表1
[0113][0114]
以上对各个服务的特点进行了介绍,下面例举服务端a向注册中心注册的实例:
[0115]
{
[0116] "instanceid":"65537",
[0117] "servicename":"helloservice",
[0118] "endpoints":
[0119] ["a://156.103.2.144:22225","interway://156.103.2.144:22226",],
[0120]
ꢀ…
[0121]
}
[0122]
根据以上实例可知,该注册的服务的标识为65537,注册的服务的名称为helloservice。该服务端a可支持私有协议a,当采用私有协议a通信时,该服务端a的通信地址包括ip地址156.103.2.144和端口22225;服务端a还支持目标互通协议,当采用目标互通协议通信时,服务端a的通信地址包括ip地址156.103.2.144和端口22226。
[0123]
步骤s301:客户端向注册中心发送第一请求消息。
[0124]
具体地,所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址和所述第一服务端支持的通信协议。该第一服务为该客户端需要调用的一个服务。
[0125]
步骤s302:该注册中心接收客户端发送的第一请求消息。
[0126]
具体地,该第一请求消息可以包括该第一服务的服务名称和/或标识(id),这样该注册中心对第一请求消息解析后就可以首先根据该服务名称和/或标识确定该第一服务。然后注册中心根据已经注册到自身的信息中确定能够提供该第一服务的服务端,本技术实施例可以称能够提供该第一服务的服务端为第一服务端。确定出第一服务端之后可以进一步确定该第一服务端的通信地址,例如,ip、端口等信息,还有该第一服务端支持的通信协议。
[0127]
例如,第一请求消息中携带的服务名称为helloservice,则helloservice为第一服务,因此该注册中心可以从存储的信息中确定第一请求消息请求的第一服务的标识为"65537",并且可以确定提供第一服务的第一服务端(endpoints)信息为["a://156.103.2.144:22225","inter://156.103.2.144:22226"],即确定出第一服务支持私有协议a和目标互通协议inter,当采用私有协议a与第一服务端通信时,第一服务端的ip地址为156.103.2.144,端口为22225;当采用目标互通协议与第一服务端通信时,第一服务端的ip地址为156.103.2.144,端口为22226。
[0128]
步骤s303:该注册中心向所述客户端发送所述第一服务端的通信地址和支持的通信协议。
[0129]
步骤s304:该客户端接收该注册中心发送的该第一服务端的通信地址和支持的通信协议。
[0130]
具体地,该客户端可能接收到了一个或者多个第一服务端的通信地址和支持的通信协议,当接收到的是一个第一服务端的通信地址和支持的通信协议时,该客户端针对该一个第一服务端执行步骤s305;当接收到的是多个第一服务端的通信地址和支持的通信协议时,该客户端仅针对其中一个第一服务端(该一个第一服务端的选择规则此处不作限定)执行步骤s305。
[0131]
步骤s305:所述客户端根据预设的选择策略从所述客户端支持的通信协议和所述第一服务端支持的通信协议中,选择所述客户端和所述第一服务端均支持的第一通信协议。
[0132]
具体地,该客户端知道自身支持的通信协议有哪些,根据该注册中心的反馈也知道第一服务端支持的通信协议,因此该客户端可以首先确定客户端和第一服务端均支持的通信协议,然后根据预设的选择策略从确定出的通信协议中筛选出第一通信协议。可以理解的是,该客户端和第一服务端均支持的通信协议可能不止一个,因此该客户端需要根据选择策略选择一个通信协议来进行通信。其中,该选择策略规定了按照什么规则来选择通信协议,例如,规定选择安全性更高的通信协议;再如,规定选择传输效率最高的通信协议;等等。
[0133]
举例来说,假若客户端支持私有协议a和目标互通协议,第一服务端也支持私有协议a和目标互通协议,那么该客户端和该第一服务端均支持的通信协议包括私有协议a和目标互通协议,此时需要按照选择策略从私有协议a和目标互通协议中选择一个通信协议作
为第一通信协议,最终选择出的通信协议为其中哪个具体由该选择策略来决定,例如,若该通信协议规定选择安全级别更高的通信协议,则选择出的通信协议为私有协议a;若该通信协议规定选择兼容性更好(例如,能够支持更多类型的对象通信)的通信协议,则选择出的通信协议为目标互通协议。另外,确定出采用的通信协议后,又可以根据确定的通信协议匹配更详细的地址,例如,若采用的是通信协议a,则可以匹配到第一服务端的通信地址包括:ip地址156.103.2.144和端口22225。若采用的是目标互通协议,则可以匹配到第一服务端的通信地址包括:ip地址156.103.2.144和端口22226。
[0134]
可选的,该客户端可以根据需要更新该选择策略,不同的所述选择策略规定的筛选规则不同。可以理解的是,随着时间的改变运行时实际需要的选择可能不同,例如,有时候需要安全性更高的通信协议,有时候需要传输效率更高的通信协议,有时候需要互通性能更强的通信协议。开发者通过改变选择策略即可保证筛选出满足相应特点通信协议。
[0135]
步骤s306:该客户端根据该第一通信协议和该第一服务端的通信地址调用所述第一服务。
[0136]
具体地,该客户端根据该第一服务端的通信地址可以与该第一服务端建立通信连接,建立通信连接之后该客户端即从该第一服务端调用该第一服务。可选的,当客户端与第一服务端基于该第一通信协议建立通信,之后该客户端向该第一服务端发送hellorequest消息,相应地,该第一服务端接收到该hellorequest消息之后向该客户端发送helloreply消息,从而实现该客户端对该第一服务端的调用。下面对hellorequest消息做简单介绍:假若第一服务为helloservice服务,那么客户端会预先执行如下程序代码:
[0137]
helloservice_ref_s*svcref=dpsf_svc_ref_get("helloservice");//line 1
[0138]
hellorequest*msg_hello=h_sf_msg_new(hellorequest);
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
//line 2
[0139]
msg_hello-》sno=1;
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
//line 3
[0140]
svcref-》sayhello(msg_hello);
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
//line 4
[0141]
以上代码中,第一行(line 1)用于定义需要调用的服务为helloservice服务,第二行(line 2)用于指定hellorequest消息来发送用于调用helloservice的请求,第三行(line 3)用于对hellorequest消息填充所需的相关参数,第四行(line 4)用于采用sayhello方法发送hellorequest消息。
[0142]
下面对第一通信协议做举例说明,例如,当确定第一通信协议为私有协议a,且第一服务端的通信地址为“156.103.2.144:22225”时,客户端尝试与通信地址“156.103.2.144:22225”建立套接子(socket)连接,并根据私有协议a格式对hellorequest消息中的msg_hello消息进行序列化,进行消息发送。相应地,第一服务端监听地址“156.103.2.144:22225”获取客户端发送的消息,并根据该地址判断使用通信协议“a”,并根据通信协议“a”对消息进行反序列化,然后对第一服务进行调用。
[0143]
在本技术实施例中,第一服务端的信息发生变更时(例如,支持的通信协议的类型或者版本,通信地址等发生变更),该第一服务端会将变更信息发送给注册中心。该客户端可以向注册中心订阅第一服务端的变更信息,相应地,注册中心在确定第一服务的相关信息发生变更之后,将变更信息发送给客户端,这样客户端就可以及时获知第一服务的最新
信息,有利于客户端对第一服务进行调用。其中,第一服务的相关信息包括第一服务所在的第一服务端支持的通信协议的类型或者版本,通信地址,等等。
[0144]
在图3所描述的方法中,客户端向注册中心发送第一请求消息,注册中心根据第一请求消息向客户端发送第一服务端的通信地址和支持的通信协议,然后客户端根据预设的选择策略筛选出该客户端和该第一服务端均支持的第一通信协议,之后客户端根据该第一通信协议和该第一服务端的通信地址调用所述第一服务。在这个过程中,该客户端可以根据选择策略自适应地选择合适的通信协议来与第一服务端进行通信,优化了通信协议的选择方案。
[0145]
请参见图6,图6是本技术实施例提供的一种远程过程调用协议自适应方法,该方法可以基于图2所示的分布式软件架构来实现,该方法包括但不限于如下步骤:
[0146]
步骤s600:各个服务端向注册中心注册自身所提供的服务的信息。
[0147]
具体地,步骤s600可以参照步骤s300,此处不再赘述。
[0148]
步骤s601:客户端向注册中心发送第一请求消息。
[0149]
具体地,步骤s601可以参照步骤s301,此处不再赘述。
[0150]
步骤s602:该注册中心接收客户端发送的第一请求消息。
[0151]
具体地,步骤s602可以参照步骤s302,另外,第一请求消息中还携带了该客户端支持的通信协议的信息,例如,携带的形式可以为http://xxx?protocol="a,interway",根据携带的信息就可以知道该客户端支持私有协议a和目标互通协议interway。
[0152]
步骤s603:所述注册中心确定所述第一服务端的通信地址支持的通信协议,并根据预设的选择策略从所述第一服务端支持的通信协议和所述客户端支持的通信协议中,选择所述第一服务端和所述客户端均支持的第一通信协议。
[0153]
具体地,注册中心根据各个服务端在注册中心注册的信息和第一请求消息中携带的信息,就可以确定客户端支持的通信协议,以及第一服务端支持的通信协议,因此该注册中心可以首先确定客户端和第一服务端均支持的通信协议,然后根据预设的选择策略从确定出的通信协议中筛选出第一通信协议。可以理解的是,该客户端和第一服务端均支持的通信协议可能不止一个,因此该注册中心需要根据选择策略选择一个通信协议来进行通信。其中,该选择策略规定了按照什么规则来选择通信协议,例如,规定选择安全性更高的通信协议;再如,规定选择传输效率最高的通信协议;等等。
[0154]
举例来说,假若客户端支持私有协议a和目标互通协议,第一服务端也支持私有协议a和目标互通协议,那么该客户端和该第一服务端均支持的通信协议包括私有协议a和目标互通协议,此时需要按照选择策略从私有协议a和目标互通协议中选择一个通信协议作为第一通信协议,最终选择出的通信协议为其中哪个具体由该选择策略来决定,例如,若该通信协议规定选择安全级别更高的通信协议,则选择出的通信协议为私有协议a;若该通信协议规定选择兼容性更好(例如,可以支持更多类型的对象通信)的通信协议,则选择出的通信协议为目标互通协议。另外,确定出采用的通信协议后,又可以根据确定的通信协议匹配更详细的地址,例如,若采用的是通信协议a,则可以匹配到第一服务端的通信地址包括:ip地址156.103.2.144和端口22225。若采用的是目标互通协议,则可以匹配到第一服务端的通信地址包括:ip地址156.103.2.144和端口22226。
[0155]
可选的,该注册中心可以根据需要更新该选择策略,不同的所述选择策略规定的
筛选规则不同。可以理解的是,随着时间的改变开发人员对通信协议的选择可能有不同想法,例如,有时候需要安全性更高的通信协议,有时候需要传输效率更高的通信协议,有时候需要互通性能更强的通信协议。开发者通过改变选择策略即可保证筛选出满足相应特点通信协议。另外,由于选择策略部署在注册中心上,因此当开发人员想要对选择策略进行变更时,直接在注册中心上进行变更即可保证后续所有服务的调用过程均使用到新的选择策略,维护成本低。
[0156]
步骤s604:注册中心向所述客户端发送所述第一通信协议和所述第一服务端的通信地址。
[0157]
步骤s605:客户端接收注册中心发送的第一通信协议和所述第一服务端的通信地址。
[0158]
步骤s606:该客户端根据该第一通信协议和第一服务端的通信地址调用所述第一服务。
[0159]
具体地,步骤s606的可以参照步骤s306,此处不再赘述。
[0160]
在图6所描述的方法中,客户端向注册中心发送第一请求消息,注册中心根据第一请求消息以及各个服务端注册到注册中心的信息确定该客户端和该第一服务端均支持的第一通信协议,然后将第一通信协议和第一服务端的通信地址发送给客户端,之后客户端根据第一通信协议和该第一服务端的通信地址调用所述第一服务。在这个过程中,注册中心可以根据选择策略自适应地选择合适的通信协议供客户端与第一服务端进行通信,优化了通信协议的选择方案。另外,选择策略部署在注册中心上,维护成本低。
[0161]
上述详细阐述了本技术实施例的方法,下面提供了本技术实施例的装置。
[0162]
请参见图7,图7是本技术实施例提供的一种客户端70的结构示意图,该客户端可以包括通信单元701和处理单元702。若对应到图2中,该通信单元701用于执行图2中的分布式通信层2003所需执行的操作,该处理单元702用于执行图2中的服务2001和编程框架2002所需执行的操作。该通信单元701和处理单元702的详细描述如下。
[0163]
通信单元701用于向注册中心发送第一请求消息,所述注册中心存储了多个服务中每个服务所在的服务端的通信地址和支持的通信协议;所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址和所述第一服务端支持的通信协议;
[0164]
所述通信单元701还用于接收所述注册中心发送的所述第一服务端的通信地址和支持的通信协议;
[0165]
处理单元702用于根据预设的选择策略从所述客户端支持的通信协议和所述第一服务端支持的通信协议中,选择所述客户端和所述第一服务端均支持的第一通信协议;
[0166]
所述处理单元701还用于根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务。
[0167]
在又一种可选的方案中,所述处理单元702还用于更新所述选择策略,不同的所述选择策略规定的筛选规则不同。
[0168]
在又一种可选的方案中,所述通信单元701还用于,在所述处理单元702根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务之后,接收所述注册中心发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议。
[0169]
需要说明的是,各个单元的实现还可以对应参照图3所示的方法实施例的相应描
述。
[0170]
请参见图8,图8是本技术实施例提供的一种客户端80的结构示意图,该客户端可以包括通信单元801和处理单元802。若对应到图2中,该通信单元801用于执行图2中的分布式通信层2003所需执行的操作,该处理单元802用于执行图2中的服务2001和编程框架2002所需执行的操作。该通信单元801和处理单元802的详细描述如下。
[0171]
通信单元801用于向注册中心发送第一请求消息,所述注册中心存储了多个服务中每个服务所在的服务端的通信地址和支持的通信协议;所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址,所述第一请求消息携带所述客户端支持的通信协议;
[0172]
所述通信单元801还用于接收所述注册中心发送的第一通信协议和所述第一服务端的通信地址,所述第一通信协议为所述客户端和所述第一服务端均支持的通信协议;
[0173]
所述处理单元802用于根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务。
[0174]
在又一种可选的方案中,所述通信单元还用于,在所述处理单元根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务之后,接收所述注册中心发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议。
[0175]
在又一种可选的方案中,所述处理单元802还用于更新所述选择策略,不同的所述选择策略规定的筛选规则不同。
[0176]
在又一种可选的方案中,所述通信单元801还用于,在所述处理单元根据所述第一通信协议和所述第一服务端的通信地址调用所述第一服务之后,接收所述注册中心发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议。
[0177]
需要说明的是,各个单元的实现还可以对应参照图6所示的方法实施例的相应描述。
[0178]
请参见图9,图9是本技术实施例提供的一种服务器90,该服务器90包括处理器901、存储器902和通信接口903,所述处理器901、存储器902和通信接口903通过总线相互连接。
[0179]
存储器902包括但不限于是随机存储记忆体(random access memory,ram)、只读存储器(read-only memory,rom)、可擦除可编程只读存储器(erasable programmable read only memory,eprom)、或便携式只读存储器(compact disc read-only memory,cd-rom),该存储器902用于相关指令及数据。
[0180]
处理器901可以是一个或多个中央处理器(central processing unit,cpu),在处理器901是一个cpu的情况下,该cpu可以是单核cpu,也可以是多核cpu。
[0181]
处理器901用于读取所述存储器902中存储的指令,来执行图7或图8所示实例中处理单元所执行的操作,通信接口903用于执行图7或图8所示实施例中的通信单元所执行的操作。也即是说,该服务器用于图7或者图8中的客户端。
[0182]
请参见图10,图10是本技术实施例提供的一种注册中心100的结构示意图,注册中心可包括通信单元1001和处理单元1002。该通信单元1001和处理单元1002的详细描述如下。
[0183]
通信单元1001用于接收客户端发送的第一请求消息,所述注册中心存储了多个服
务中每个服务所在的服务端的通信地址和支持的通信协议;所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址和所述第一服务端支持的通信协议;
[0184]
所述通信单元1001还用于向所述客户端发送所述第一服务端的通信地址和支持的通信协议;所述第一服务端支持的通信协议用于确定第一通信协议,所述第一通信协议为所述客户端和所述第一服务端均支持的通信协议;所述第一通信协议和所述第一服务端的通信地址用于所述客户端从所述第一服务端上调用所述第一服务。
[0185]
在又一种可选的方案中,所述通信单元1001接收客户端发送的第一请求消息之前:
[0186]
所述通信单元1001还用于接收所述第一服务端发送的所述第一服务端的通信地址和支持的通信协议;
[0187]
所述处理单元1002用于存储所述第一服务端的通信地址和支持的通信协议。
[0188]
在又一种可选的方案中,所述通信单元1001向所述客户端发送所述第一服务端的通信地址和支持的通信协议之后,还用于:
[0189]
接收所述第一服务端发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议;
[0190]
向所述客户端发送所述第一服务端的变更信息。
[0191]
需要说明的是,各个单元的实现还可以对应参照图3所示的方法实施例的相应描述。
[0192]
请参见图11,图11是本技术实施例提供的一种注册中心110的结构示意图,注册中心可包括通信单元1101和处理单元1102。该通信单元1101和处理单元1102的详细描述如下。
[0193]
通信单元1101用于接收客户端发送的第一请求消息,所述注册中心存储了多个服务中每个服务所在的服务端的通信地址和支持的通信协议;所述第一请求消息用于请求所述多个服务中的第一服务所在的第一服务端的通信地址,所述第一请求消息携带所述客户端支持的通信协议;
[0194]
处理单元1102用于确定所述第一服务端的通信地址支持的通信协议,并根据预设的选择策略从所述第一服务端支持的通信协议和所述客户端支持的通信协议中,选择所述第一服务端和所述客户端均支持的第一通信协议;
[0195]
所述通信单元1101还用于向所述客户端发送所述第一通信协议和所述第一服务端的通信地址,所述第一通信协议和所述第一服务端的通信地址用于所述客户端从所述第一服务端上调用所述第一服务。
[0196]
在又一种可选的方案中,所述处理单元1102还用于更新所述选择策略,不同的所述选择策略规定的筛选规则不同。
[0197]
在又一种可选的方案中,所述通信单元1101接收客户端发送的第一请求消息之前:
[0198]
所述通信单元1101还用于接收所述第一服务端发送的所述第一服务端的通信地址和支持的通信协议;
[0199]
所述处理单元1102还用于存储所述第一服务端的通信地址和支持的通信协议。
[0200]
在又一种可选的方案中,所述通信单元1101向所述客户端发送所述第一服务端的通信地址和支持的通信协议之后,还用于:
[0201]
接收所述第一服务端发送的所述第一服务端的变更信息,所述变更信息包括通信地址和/或支持的通信协议;
[0202]
向所述客户端发送所述第一服务端的变更信息。
[0203]
需要说明的是,各个单元的实现还可以对应参照图6所示的方法实施例的相应描述。
[0204]
请参见图12,图12是本技术实施例提供的一种服务器120,该服务器120包括处理器1201、存储器1202和通信接口1203,所述处理器1201、存储器1202和通信接口1203通过总线相互连接。
[0205]
存储器1202包括但不限于是随机存储记忆体(random access memory,ram)、只读存储器(read-only memory,rom)、可擦除可编程只读存储器(erasable programmable read only memory,eprom)、或便携式只读存储器(compact disc read-only memory,cd-rom),该存储器1202用于相关指令及数据。
[0206]
处理器1201可以是一个或多个中央处理器(central processing unit,cpu),在处理器1201是一个cpu的情况下,该cpu可以是单核cpu,也可以是多核cpu。
[0207]
处理器1201用于读取所述存储器1202中存储的指令,来执行图10或图11所示实例中处理单元所执行的操作,通信接口1203用于执行图10或图11所示实施例中的通信单元所执行的操作。也即是说,该服务器用于图10或者图11中的注册中心。
[0208]
需要说明的是,以上服务器90可以是单个服务器也可以是一个服务器集群,服务器120可以是单个服务器也可以是一个服务器集群还可以是一个服务器集群。另外,服务器90和服务器120可以为两个不同的服务器(或服务器集群),也可以为同一个服务器(或服务器集群)。
[0209]
综上所述,客户端向注册中心发送第一请求消息,注册中心根据第一请求消息以及各个服务端注册到注册中心的信息确定该客户端和该第一服务端均支持的第一通信协议,然后将第一通信协议和第一服务端的通信地址发送给客户端,之后客户端根据第一通信协议和该第一服务端的通信地址调用所述第一服务。在这个过程中,注册中心可以根据选择策略自适应地选择合适的通信协议供客户端与第一服务端进行通信,优化了通信协议的选择方案。另外,选择策略部署在注册中心上,维护成本低。
[0210]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:rom或随机存储记忆体ram、磁碟或者光盘等各种可存储程序代码的介质。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1