认识RPC

23 阅读2分钟

RPC 是什么

RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有:

  • 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。
  • 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
  • 通信框架:MINA 和 Netty。

典型的RPC框架

image.png

RPC的通信流程

image.png

RPC的组成部分

组件说明
序列化/反序列化如 JSON、Protobuf、Thrift,用于将数据转为字节流传输
传输协议如 TCP、HTTP/2、WebSocket
服务发现客户端如何找到服务提供者(如 Consul、ZooKeeper、Nacos)
负载均衡当有多个服务实例时,选择其中一个(如轮询、一致性哈希)
超时与重试处理网络异常、服务不可用等情况

序列化与反序列化

一般方便人观察和解析的都是比较重的序列化方式,比如JSON。像Protobuf这种通过二进制,以及字段方面的优化,会让整个序列化体积减小,并且使用二进制也加快了传输速度。 以下是对比

特性JSONProtobuf (Google)Thrift (Apache)
类型纯文本(人类可读)二进制二进制(也支持文本)
是否需要 Schema否(动态结构)是(.proto 文件)是(.thrift 文件)
跨语言支持天然支持(几乎所有语言)官方支持主流语言官方支持非常广泛(>20 种语言)
主要用途Web API、配置、日志高性能 RPC、内部通信RPC + 序列化,全栈服务框架
是否包含 RPC 框架❌(仅数据格式)✅(gRPC 基于 Protobuf)✅(Thrift 自带 RPC)

传输协议

从应用层的话是HTTP or 自定义协议 网络层的话是 TCP

服务发现、负载均衡、超时与重试

这三个实现是“自研”的重点