rpc远程协议之原理分析

云水之路 云水之路     2022-12-07     543

关键词:

RPC远程协议之原理分析

 

在近几年工作中发现,功能服务化或微服务化越来越流行,逐渐成为实现中大型分布式系统架构的主要方式,而在分布式系统中的不同节点应用间的通信中,RPC远程协议扮演关键作用。实际上,在日常工作中,我们也多多少少使用过RPC协议方案,对于初级的程序员来说,RPC显得很神秘,而经验丰富些的程序员虽可使用,但对其工作原理理解的并不是很深刻,往往会误用,这里就我理解来详细介绍下。

 

 

l  RPC是什么

l  RPC工作流程

l  RPC实现内容

l  RPC结构分析

 

 

一、RPC是什么

RPC(Remote Procedure Call),是一种远程过程调用的协议方案,其本身是一种借助于网络来实现不同机子或应用之间跨进程通信的,不是一个实现框架,即并非是一个拿来即用的框架。目前,比较主流使用的RPC开源框架有谷歌的gRPC,Facebook的Thrift,阿里的Dubbo,开源SpringCloud,以及Spring的RMI等均基于RPC协议方案实现了远程过程功能的使用,虽实现方式不同,但原理却大同小异。接下来,介绍下RPC的工作流,RPC实现需要做的事情,以及几种常见RPC框架的主要异同点对比。

 

二、RPC工作流程

RPC是基于典型的C/S模式的远程调用方案,分为客户端(Caller)和服务端(Callee)。Caller负责调用远程的服务,而Callee则负责提供服务功能,并暴露给使用者Caller,这在现今的微服务架构中很常见,而RPC基本概念化工作流如下:

1、Client发起远程调用时,是通过Client-stub实现的;

2、Client-stub接受Client调用通知后,负责将调用的接口、方法及参数,按照约定的协议规范进行编码存根;

3、本地RPCRuntime负责远程传输在Client-stub中编码的数据包;

4、远程RPCRuntime接收到消息请求后,将其传递给Server-stub,由其负责解码处理,然后发起本地调用,完成具体服务功能并返回结果给Client。

 

从上面流程看,认为RPC的实现比较简单,其实不然。在整个RPC概念过程中,有很多事情要做,比如:是否跨语言支持,网络传输的性能与协议,数据包编解码以及异常恢复处理等,不简单了吧!具体请往下俯瞰。

 

三、RPC实现内容

通过上面的介绍,我们应该知道RPC是什么,以及它的工作流程是怎样的,那么有人问RPC是一个协议方案,该如何设计昵?答案在下面揭晓,我们需要实现下面几点内容:

1、两端的Stub生成策略,是手动还是自动生成,前者较麻烦,后者可借助使用生成工具生成,如:Thrift本身提供的工具;

2、是否支持跨语言平台,也就是不同语言的无缝兼容,一般都是通过IDL来声明接口文件实现跨语言;

3、网络传输协议格式约定,可采用消息头和消息体的方式,一般采用消息头存放元数据,消息体存放消息内容;

4、网络传输采用的协议类型,主流的RPC框架采用了Socket较多,而也有基于HTTP协议的RPC框架,如:谷歌的gRPC采用HTTP2.0;

5、在高并发时,两端交互时是否支持异步/同步多线程的通信机制;

6、异常处理要注意:本地执行一定会执行,但远程调用则不一定执行,可能因为网络问题未能送达到服务方。另外,本地调用只会抛出接口声明异常,而远程调用还会抛出RPC框架异常,同时本地和与远程调用的性能消耗可能差距较大,这取决于RPC固有消耗所占比重。

 

正如上面,既然有这么多工作要做,那么全部交给开发人员来完成,则需要若干天时间成本,即使跑通流程,也未必稳定,所以实际使用时,我们会借助于强大的开源框架来实现,正如在本章开头部分所描述的内容。

 

四、RPC结构分析

上面比较粗略地介绍了RPC的工作流程,接下来对RPC协议方案的结构进行拆分,更加清楚了解RPC的工作原理细节,这样在接触主流的RPC开源框架时,更加游刃有余,具体如下所示:

 

RPC服务方通过RpcServer导出(export)远程接口方法,供客户端通过RpcClient引入(import)该远程接口方法。这样客户端就可以调用引入的远程API了,然后调用该接口方法,跟调用远程接口方法一样,RPC框架提供接口的代理实现,实际的调用委托给了RpcProxy,而该代理封装调用信息并将调用转交给RpcInvoker实际执行调用。在客户端的RpcInvoker通过RpcConnector维持与服务端RpcChannel,并使用RpcChannel进行协议编码(encode),并将编码后的请求消息借助通道发送给服务方。

RPC服务端接收器RpcAcceptor接收客户端的调用请求,同时使用RpcProtocol进行协议解码(decode)。解码后的调用信息交给RpcProcessor来控制调用逻辑,最后将调用信息传递给RpcInvoker实际执行调用并返回结果给客户端。

 

 

好了,到这里我已经介绍了RPC的基本概念,工作流程,在设计RPC时需要做的几件事,以及RPC的结构实现分析。那么,在后续的文章中,会继续介绍RPC的常用开源框架的使用及分析,请读者留意。

netty(rpc高性能之道)原理剖析

...步、非阻塞、基于事件驱动的NIO框架支持多种传输层通信协议,包括TCP、UDP等开发异步HTTP服务端和客户端应用程序提供对多种应用层协议的支持,包括TCP私有协议、HTTP协议、We 查看详情

分布式服务框架之远程通讯技术及原理分析

在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什... 查看详情

javanio原理图文分析及代码实现

前言: 最近在分析hadoop的RPC(RemoteProcedureCallProtocol,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。可以参考:http://baike.baidu.com/view/32726.htm )机制时&... 查看详情

rpc原理解析

1.RPC原理解析1.1什么是RPCRPC(RemoteProcedureCallProtocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP/IP或UDP,为通信程序之间携... 查看详情

通俗易懂的rpc原理

...589一、什么是RPC  RPC(RemoteProcedureCallProtocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携... 查看详情

xxl-rpc原理分析

背景RPC(RemoteProcedureCallProtocol,远程过程调用),调用远程服务就像调用本地服务,在提供远程调用能力时不损失本地调用的语义简洁性;一般公司,尤其是大型互联网公司内部系统由上千上万个服务组成,不同的服务部署在不... 查看详情

一文搞懂rpc原理(代码片段)

RPC原理解析什么是RPCRPC(RemoteProcedureCallProtocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP/IP或UDP,为通信程序之间携带信... 查看详情

rpc通信原理

什么是RPCRPC(RemoteProcedureCallProtocol)远程过程调用协议。通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算上的某个过程或函数,就像调用本地应用程序中的一样。正式的描述是:一种通过网络从远程计算... 查看详情

面向服务架构之rpc原理与实例

1、RPC概述  RPC(RemoteProcedureCall)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一样。主要是为了应对当前互联网项目量级越来越大而出现的。2、Broker模... 查看详情

rpc原理及rpc实例分析

...信相关的代码,不仅负责而且容易出错RPC(RemoteProcedureCall)远程过程调用能让我们像调用本地服务一样调用远程服务,而让调用方对网络通信这些细节透明常见的RPC框架:阿里巴巴的hsf、dubboFacebook的thriftGoogle的grpcTwitter的fi 查看详情

rpc核心原理

了解RPCRPC全称RemoteProcedureCall,即远程过程调用.其中远程需要跨机器,跨机器需要可靠的网络编程技术实现,无论是Java原生的网络编程模型还是Netty都会让代码中出现大量与业务无关的网络编程代码,RPC技术则是为了解决这个问题的.... 查看详情

rpc机制之amqp协议

...组件内部则采用了RPC通信。什么是RPCRPC即RemoteProcedureCall(远程方法调用),是Openstack中一种用来实现跨进程(或者跨机器)的通信机制。Opens 查看详情

基于http协议实现rpc远程调用

今天简单说一下基本Http协议来实现RPC框架~基于Http协议实现RPC框架:优点:1、简单、实用、开发方便 缺点:1、性能不是很稳定,在海量数据时,完全顶不住,容易宕机2、因为不是走的注册中心,不便于维护、监控以及统计... 查看详情

组件篇值rpc(上)(代码片段)

...息Spring组件篇之RPC(上)01.RPC原理分析理解RPCRemoteProcedureCall远程过程调用基于网络表达语义和传达数据通信协议像调用本地方法调用远程服务扩展了算力服务治理的基础RPC作用屏蔽组包/解包屏蔽数据发送/接收提高开发效率业务发... 查看详情

读书笔记丨远程服务调用和restful,如何分析和抉择?

...更加流行和普及。本文分享自华为云社区《云原生时代,远程服务调用和RESTful,如何分析和抉择?》,作者:breakDawn。随着云原生的概念越来越火,服务的架构应该如何发展和演进,成为很多程序员关心的话题。大名鼎鼎的《... 查看详情

rpc簡介

...理      RPC(RemoteProcedureCallProtocol,远程过程调用协议):客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。1.RPC要点RPC是协议:既然是协议就只... 查看详情

rpc远程协议之thrift非阻塞多线程处理

RPC远程协议之Thrift非阻塞多线程处理 在上一篇文章《RPC远程协议之Thrift入门》中,我已经介绍了Thrift的基本使用,并举例验证了如何使用,当然这个例子是阻塞单线程的模式,实际客户端请求增多,单线程处... 查看详情

分布式服务框架之远程通讯技术及原理分析

在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什... 查看详情