HTTP 与 RPC 之间的区别?

Sherwin.Wei Lv7

HTTP 与 RPC 之间的区别?

回答重点

严格上讲,HTTP 和 RPC 不是一个层面的东西:

  • HTTP 是一种应用层的协议,主要强调的是网络通信;
  • RPC,其是一种分布式系统之间通信的方式,强调的是服务之间的远程调用。

有一些 RPC 框架底层使用的是 HTTP 协议实现通信,比如 gRPC,其底层使用的就是 HTTP/2, 然后还有 Dubbo,其现在也兼容 gRPC 了,并且使用了 HTTP/2 作为传输协议,如下图所示:

Snipaste_2024-06-09_22-17-56.jpg

这里为了方便大家理解,制作了一个表格,大家可以看一下表格:

Snipaste_2024-06-09_22-37-42.jpg

说明:IDL 是指接口定义语言,如二进制、JSON、Protocol Buffers 等。

扩展知识

定义与基本概念

HTTP(HyperText Transfer Protocol)

  • 定义:HTTP 是一种基于请求-响应模型的应用层协议,主要用于 Web 应用之间的数据传输。它使用 URL 来标识资源,并通过标准化的 HTTP 方法(如 GET、POST、PUT、DELETE)来对资源进行操作。
  • 传输格式:通常使用文本格式(如 JSON、XML)传输数据,容易被人类阅读和理解。由于 HTTP 是基于 TCP 的应用层协议,因此它的消息体较大,适用于 Web 页面、API 等场景。

RPC(Remote Procedure Call)

  • 定义:RPC 是一种远程过程调用协议,它允许客户端像调用本地方法一样调用远程服务器上的方法。RPC 关注的是调用方法或函数而不是资源。
  • 传输格式:RPC 传输的数据通常是二进制格式(如 Protocol Buffers、Thrift),数据量较小,效率较高。RPC 通常基于 TCP 进行通信,也可以直接使用 HTTP。

RPC 常见的实现框架

gRPC

  • 简介:gRPC 是 Google 开发的高性能 RPC 框架,基于 HTTP/2 协议,可以进行双向流通信,支持负载均衡、认证、追踪等特性。
  • 优点:使用 Protocol Buffers(Protobuf) 进行序列化和反序列化,传输效率高,适合微服务间的高性能通信。
  • 应用场景:适合需要高效传输和复杂数据结构的微服务架构,如实时通信服务、物联网数据传输。

Thrift

  • 简介:Thrift 是由 Apache 维护的跨语言 RPC 框架,支持多种语言(如 Java、C++、Python、PHP),通过定义接口描述文件(IDL)来生成客户端和服务端代码。
  • 优点:支持多语言环境,适合异构系统之间的高效通信。
  • 应用场景:适用于需要跨语言、高性能的 RPC 调用场景,如大数据平台中的服务调用。

Dubbo

  • 简介:Dubbo 是阿里巴巴开源的 Java RPC 框架,提供了高性能的远程服务调用能力,支持负载均衡、服务注册与发现等特性。
  • 优点:与 Spring 生态深度集成,支持多种通信协议和序列化方式,适合 Java 生态下的分布式系统。
  • 应用场景:适合中国市场中基于 Java 的微服务系统,特别是在 Spring Boot 环境下的微服务调用。
Comments