RPC
远程过程调用协议。通过网络从远程计算机程序请求服务,不关心底层网络技术的协议。简而言之,RPC从一台机器(客户端)通过参数传递的方式调用另一台机器(服务器)的方法(服务)并得到返回结果。
RPC干了什么?
- 确定客户端与服务端间的通信协议
- 高效网络通信(一般选择Netty作为网络通信框架)
- 服务器提供的服务如何暴露给客户端(zookeeper注册服务)
- 客户端如何发现暴露的服务(寻址找到服务)
- 请求和响应高效序列化和反序列化(json,protobuf)
RPC实现原理架构图
组成说明
1、客户端:服务调用端
2、client stub:存放服务器地址信息,打包客户端数据成网络消息,再通过网络传输发送给服务器
3、server stub:解压客户端发送的请求消息,调用服务器
4、服务端:服务真正提供者
工作流程
- 建立连接。建议长连接,心跳定期检查连接是否还在
- 服务寻址。提供者向注册中心(zookeeper)注册服务,调用者向注册中心查询订阅服务,调用者找到IP和Port调用提供者的接口。提供者定期向注册中心发送心跳检测
- 网络传输数据。序列化和反序列化
- 服务调用。调用者调用提供者接口得到返回结果,进行业务处理
RPC主流框架有哪些?
- RMI
- java实现
- Hession
- 基于http协议,采用二进制编码
- protobuf-rpc-pro
- java类库,基于Protocol Buffers 协议,Netty底层的NIO
- Thrift
- 支持多种语言
- Avro
- 云计算的数据交换和存储的Protocol,支持HTTP,TCP协议
- Dubbo
- 高性能服务框架