RPC是什么
RPC(Remote Procedure Call Protocol),中文译名为远程过程调用协议。简单来说RPC就是客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。而更严谨的说法则是RPC是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC应用的价值
当下,随着科技水平的发展,开发单一的、逻辑简单的、用户规模小的应用已经逐渐被潮流所淘汰。当下软件开发的总趋势是日趋增大的系统访问量和业务量,因而服务化、微服务和分布式系统架构的应用变得十分迫切,而作为一种高效的应用程序之间的通讯手段,RPC应运而生。
常见RPC框架
- Dubbo:Dubbo是一个分布式服务框架,以及SOA治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。
- gRPC:一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
- Thrift:thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在诸如C++, Java等编程语言间无缝结合的、高效的服务。
RPC调用流程
要让网络通信细节对使用者透明,我们需要对通信细节进行封装,我们先用一张图看看一个RPC调用的流程涉及到哪些通信细节:
接下来对上图进行简单的分析:
- 服务消费方(client)调用以本地调用方式调用服务;
- client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
- client stub找到服务地址,并将消息发送到服务端;
- server stub收到消息后进行解码;
- server stub根据解码结果调用本地的服务;
- 本地服务执行并将结果返回给server stub;
- server stub将返回结果打包成消息并发送至消费方;
- client stub接收到消息,并进行解码;
因此,RPC需要做的就是对上述步骤进行封装,使得用户对此类细节透明