【分布式服务架构】常用的RPC框架

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提供了一整套的技术方案。

猜你喜欢

转载自blog.csdn.net/wjavadog/article/details/126556137