1. RPC 框架的原理
RPC(Remote Procedure Call,远程服务调用),用来实现部署在不同机器之间系统的方法调用,使程序像当问本地系统资源一样,通过网络传出资源。
1)Client Code:客户端代码调用实现,负责发起RPC调用
2)Serialization/Descrialization:负责对RPC调用通过网络传输的内容进行序列化和反序列化,不同的RPC框架有不同的实现机制。
3)Stub Proxy:可以看作是一种代理对象,屏蔽RPC调用过程中负责的网络处理逻辑,使RPC调用透明化,保持和本地调用的风格一致。
4)Transport:作为RPC框架底层的通信传输模块,一般通过socket在客户端与服务端之间传递请求和应答信息
5)Server Code:服务端服务业务逻辑的实现。
2. 常用的几种RPC框架
1) RMI
Java RMI 是一种基于Java的远程调用技术,是Java特有的一种RPC实现。
特性总结:
- 支持真正的面向对象的多态性。完全支持面向对象也是RMPI相对于其他的RPC框架的优势之一。
- Java语言独有,不支持其他语言
- 使用Java原生的序列化机制,所有的对象都必须实现 java.io.Serializable
- 底层使用基于BIO实现的Socket完成
2) CXF/Axis2
WebService是一种跨平台的RPC技术协议。WebService技术栈有SOAP、UDDI、WSDL组成。
- SOAP是一种使用XML进行数据编码的通信协议,独立于平台,独立于语言,简单可扩展,因为SOAP基于HTTP协议,所以可以绕过防火墙
- UDDI是一个独立于平台的框架,是一种通用的描述、发现与集成服务
- WSDL是使用XML编写的网络服务描述语言,用来描述WebService,以及如何访问WebService。
3)Thrift
Apache Thrift是跨不同的平台的语言,协助构建可伸缩的分布式系统的一种RPC实现。支持多种主流的编程语言,Java,C++,Python等。
Thrift对比XML-RPC/JSON-RPC/SOAP和WSDL的RPC方案,有明显的性能优势。原因是Thrift采用二进制编码协议,使用TCP/IP传输协议的一种RPC实现。
4)gRPC
gRPC是Google的一个高性能、开源通用的RPC框架,面向移动和HTTP2设计,支持Java、C、Go等语言。序列化默认使用Protocol Buffers
5)Http Client
- JDK自带的java.ne包里面提供了基于HTTP协议最基础的实现。
- okhttp
- httpClient/httpComponent
3. RPC框架和分布式框架的关系
RPC框架实现了服务消费者调用Client和服务提供者Server之间点对点调用流程,一般包括stub,通信,数据的序列化和反序列化。调用方和服务提供方采用直连的方式进行调用。
而分布式服务框架,除了包含RPC的特性,还包括多台Server提供服务的负载均衡策略以及实现,服务注册、发布与引入,以及服务的高可用策略、服务治理等。
例如 Spring Cloud提供了一整套的技术方案。