购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2 RPC框架

3.2.1 RMI远程方法调用

RMI(Remote Method Invocation)基于Java远程方法协议(Java Remote Method Protocol)和Java的原生序列化,利用java.rmi包实现。它能够使部署在不同主机上的Java对象之间进行透明的通信与方法调用。RMI实现原理如图3-6所示。

图3-6 RMI实现原理

客户端方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,然后再次经传输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。

RMI的特性如下:

RMI的缺点如下:

由于RMI使用Java原生的序列号机制与BIO通信机制,导致RMI的性能较差,不建议在性能要求高的场景使用。

3.2.2 Thrift

Thrift是一个跨语言的服务部署框架,采用二进制编码协议,传输协议使用TCP/IP。相对于HTTP协议,TCP/IP协议的性能更高,因为HTTP协议的内容除了应用数据本身外,还带有描述本次请求上下文的数据(比如Header信息、响应码等)。HTTP协议使用文本协议对传输内容进行编码,相对于采用二进制编码协议的TPC/IP协议码流更大。Thrift通过一个中间语言(IDL,接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。Thrift内部运行原理如图3-7所示。

图3-7 Thrift内部运行原理

Thrift根据接口定义文件,通过代码生成器生成服务器端和客户端代码(支持不同语言),从而实现服务端和客户端跨语言的支持。用户在Thrift描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户实现服务便可以了。Protocol是协议层,定义数据传输格式,可以为二进制或者XML等。Transport是传输层,定义数据传输方式,传输方式可以为TCP/IP传输、内存共享或者文件共享等。

Thrift的特性如下:

Thrift的缺点如下:

3.2.3 Hessian

Hessian是由Caucho提供的基于Binary-RPC协议的轻量级RPC框架。相比WebService,Hessian更简单、快捷。因为采用二进制RPC协议,所以很适合发送二进制数据。Hessian的特性如下:

3.2.4 Avro-RPC

Apache Avro是一个数据序列化系统。它本身是一个序列化框架,同时实现了RPC的功能。

Avro的特性如下:

3.2.5 gRPC

gRPC是由Google开发的一款语言中立、平台中立、开源的远程过程调用(RPC)系统。在gRPC中,客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得创建分布式应用和服务更为容易。与许多RPC系统类似,gRPC也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个gRPC服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。

gRPC的特性如下:

3.2.6 其他RPC框架

国内RPC框架如下:

国外RPC框架如下: xHbsmXqxL2R4ysBrKhbd2nbRIA17grOloNYG4d8ZelAlSSQiKq/ZpQHoYk9ExOiA

点击中间区域
呼出菜单
上一章
目录
下一章
×