远程过程调用(RPC)与REST:技术对比与应用分析
1. 远程过程调用(RPC)概述
远程过程调用(Remote Procedure Call,RPC)是一种让本地调用在远程服务上执行的技术。市面上存在多种不同类型的RPC技术,部分技术依赖接口定义,如SOAP、Thrift和协议缓冲区(protocol buffers)。使用独立的接口定义便于为不同技术栈生成客户端和服务器存根。例如,可以有一个Java服务器公开SOAP接口,而.NET客户端根据Web服务定义语言(WSDL)生成。另一些技术,如Java RMI,则要求客户端和服务器之间有更紧密的耦合,需要双方使用相同的底层技术,但无需共享接口定义。所有这些RPC技术的核心特点是让本地调用看起来像远程调用。
许多RPC技术本质上是二进制的,如Java RMI、Thrift或协议缓冲区,而SOAP使用XML作为消息格式。有些实现与特定的网络协议绑定(如SOAP名义上使用HTTP),而其他实现则允许使用不同类型的网络协议,这些协议本身可以提供额外的功能。例如,TCP能保证数据传输,而UDP虽无此保证但开销更低。这使得可以根据不同用例选择不同的网络技术。
允许生成客户端和服务器存根的RPC实现能帮助快速上手,能迅速在网络边界传输内容,这也是RPC的主要卖点之一——易用性。只需进行正常的方法调用,理论上可以忽略其他细节,这是很大的优势。
然而,一些RPC实现也存在缺点:
- 技术耦合 :部分RPC机制(如Java RMI)与特定平台紧密绑定,限制了客户端和服务器可使用的技术。Thrift和协议缓冲区对多种语言有较好的支持,能在一定程度上减少这一缺点,但要注意RPC技术有