RPC基本概念
RPC概念模型
一次RPC的完整过程
IDL(Interface description language)文件 IDL 通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信
生成代码 通过编译工具把IDL文件转换成语言对应的静态库
编解码 从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化
通信协议 规范数据在网络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的元数据 (元数据(Metadata)是指描述其他数据的数据,即“关于数据的数据”。在通信协议中,元数据主要用于提供关于传输数据的额外信息)
RPC对好处 1.单一职责,有利于分工协作和运维开发 2.可扩展性强,资源使用率更优 3.故障隔离,服务的整体可靠性更高
RPC分层设计
RPC(Remote Procedure Call,远程过程调用)框架是一种允许客户端调用远程服务器上的方法的技术。为了实现高效、可靠的远程调用,RPC框架通常分为三个主要层次:编码/解码层、协议层和网络通信层。下面详细介绍这三个层次的功能和作用:
1. 编码/解码层(Serialization/Deserialization Layer)
功能:
序列化(Serialization):将对象转换为字节流,以便在网络上传输。 反序列化(Deserialization):将接收到的字节流转换回对象。 常见的序列化协议 JSON:轻量级,易于阅读,但性能较差。 protobuf(Protocol Buffers):Google 开发的高效二进制格式,性能好,但可读性差。 Thrift:Facebook 开发的跨语言服务开发框架,支持多种序列化格式。 Hessian:一种二进制的远程调用协议,主要用于Java应用。 Avro:Apache 开发的数据序列化系统,支持模式演化。
2. 协议层(Protocol Layer)
功能:
定义通信协议:规定客户端和服务器之间的交互方式,包括请求和响应的格式、错误处理等。 消息格式:定义消息的结构,包括头部和负载部分。 错误处理:定义错误码和错误信息,确保客户端能够正确处理错误。 超时和重试:定义请求的超时时间和重试策略。 常见的协议 HTTP/HTTPS:广泛使用的传输协议,适用于Web服务。 gRPC:Google 开发的高性能RPC框架,使用HTTP/2作为传输协议,支持protobuf序列化。 Dubbo:阿里巴巴开发的RPC框架,支持多种协议,如Dubbo、HTTP、Hessian等。 RESTful:基于HTTP的无状态协议,适用于简单的Web服务。
3. 网络通信层(Network Communication Layer)
功能:
建立连接:负责客户端和服务器之间的网络连接建立。 数据传输:通过网络传输编码后的数据。 连接管理:管理连接的生命周期,包括连接的创建、维护和关闭。 并发处理:处理并发请求,确保高吞吐量和低延迟。 常见的网络通信技术 TCP/IP:传输控制协议/互联网协议,提供可靠的字节流服务。 UDP:用户数据报协议,提供不可靠的数据报服务,适用于对实时性要求高的场景。 HTTP/2:改进的HTTP协议,支持多路复用,提高了性能。 WebSocket:全双工通信协议,适用于需要双向通信的场景。