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:服务端服务业务逻辑的实现。
Java RMI 是一种基于Java的远程调用技术,是Java特有的一种RPC实现。
特性总结:
WebService是一种跨平台的RPC技术协议。WebService技术栈有SOAP、UDDI、WSDL组成。
Apache Thrift是跨不同的平台的语言,协助构建可伸缩的分布式系统的一种RPC实现。支持多种主流的编程语言,Java,C++,Python等。
Thrift对比XML-RPC/JSON-RPC/SOAP和WSDL的RPC方案,有明显的性能优势。原因是Thrift采用二进制编码协议,使用TCP/IP传输协议的一种RPC实现。
gRPC是Google的一个高性能、开源通用的RPC框架,面向移动和HTTP2设计,支持Java、C、Go等语言。序列化默认使用Protocol Buffers
RPC框架实现了服务消费者调用Client和服务提供者Server之间点对点调用流程,一般包括stub,通信,数据的序列化和反序列化。调用方和服务提供方采用直连的方式进行调用。
而分布式服务框架,除了包含RPC的特性,还包括多台Server提供服务的负载均衡策略以及实现,服务注册、发布与引入,以及服务的高可用策略、服务治理等。
例如 Spring Cloud提供了一整套的技术方案。