本文主要是介绍TARS RPC 通信框架|提供多种远程调用方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
作者 | Eaton
导语 | TARS 中提供了一套高性能 RPC 通信框架,实现了服务间的高效通信。RPC 作为微服务的核心技术,支撑着移动互联网时代下不断增长的用户和海量的请求。为了满足更多的需求,TARS 支持了同步、异步等多种调用方式。本文将会详细阐述 TARS 中的几种远程调用方式。
目录
- RPC 简介
- TARS 服务寻址方式
- 远程调用方式
- 同步调用
- 异步调用
- 单向调用
- Hash 调用
- 总结
RPC 简介
RPC,即远程过程调用,是一种通过网络向远程计算机请求服务,而不需要了解底层网络技术的思想。通过屏蔽消息打包、服务寻址等远程网络通信细节,使远程调用就像调用本地函数或者本地对象的方法一样调用远程计算机的函数。
服务寻址是远程调用的基础。实现服务的远程调用,先要知道服务的地址,找到可调用的服务后,才能对服务发起有效的远程调用。下面我们先来了解一下 TARS 中的寻址方式。
TARS 服务寻址方式
TARS 服务的寻址方式,按照服务是否在主控节点 Registry
注册,通常可以分为两种方式:直接寻址和名字服务(主控路由服务)。
直接寻址,顾名思义,就是直接指定要调用的服务的地址,例如下面代码中,我们直接指定了要调用服务的具体地址,后续的调用都会访问这个服务。
auto prx = comm->stringToProxy<Demo::HelloPrx>("Test.HelloServer.HelloObj@tcp -h 127.0.0.1 -p 8088");
prx->testHello("abc");
名字服务,即我们只需通过服务的名字就能调用某个服务,而不需要提供服务的具体地址,如下
auto prx = comm->stringToProxy<Demo::HelloPrx>("Test.HelloServer.HelloObj");
prx->testHello("abc");
由于代码中无需写具体IP配置,名字服务很大程度上提高了代码的可维护性。使用名字服务要求服务在主控节点 Registry
注册,即服务需要通过 TARS 框架部署,原理如下
客户端通过调用 stringToProxy
向主控请求要调用服务的地址列表。主控将返回服务地址列表给客户端,以供客户端发起服务调用。
远程调用方式
获取到服务地址列表后,客户端将发起服务调用。TARS 中提供了多种调用方式,使开发者能够根据具体的使用场景,选择合适的调用方式。
- 同步调用:发起调用后,等待调用返回结果,再继续执行后续逻辑;
- 异步调用:发起调用后,立刻执行后续逻辑,通过回调函数处理返回结果;
- 单向调用:只发起调用,不关心返回结果或被调服务是否接收;
- Hash 调用:同一用户的多次调用都请求同一服务器的服务。
让我们用TarsCpp的例子来看看这几种调用方式是如何使用的。本部分使用的例子中,调用的服务名字为 Demo.HelloServer.HelloObj
,其接口文件 Hello.tars
中接口定义如下
module Demo
{interface Hello
{int testHello(string req, out string rsp)
这篇关于TARS RPC 通信框架|提供多种远程调用方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!