Skip to content

P73 HTTP 与 RPC 的区别 ​

面试题:HTTP 和 RPC 有什么区别?微服务里什么时候用 HTTP,什么时候用 RPC?

1. 概念 ​

  • HTTP:应用层协议,基于请求/响应模型,标准通用(文本/JSON),跨语言、跨平台;
  • RPC(Remote Procedure Call):远程过程调用框架(Dubbo、gRPC、Thrift),核心是"像调本地方法一样调远程服务",底层可用 TCP/HTTP/自定义协议。

2. 对比 ​

对比项HTTP(RESTful)RPC
协议HTTP 标准协议自定义协议(可基于 TCP/HTTP2)
数据格式JSON/XML(可读性好)二进制(Protobuf/Thrift,紧凑高效)
性能文本解析开销大二进制序列化 + 长连接,性能更高
接口定义URL + 方法约定,无强契约IDL 强契约(接口/参数/返回固定)
服务治理一般靠网关/注册中心自己搞框架内置:注册发现、负载均衡、重试、限流
跨语言天然跨语言需要 IDL 生成各语言代码
适用对外接口、前后端、异构系统内部微服务间高频调用

3. 微服务里怎么选 ​

用 HTTP/REST ​

  • 对外提供 API(第三方、前端);
  • 跨语言/跨团队边界明确;
  • 系统简单,不想引入 RPC 框架。

用 RPC(Dubbo/gRPC) ​

  • 内部服务间高频、低延迟调用;
  • 需要服务治理(注册发现、负载均衡、熔断);
  • 大流量的核心链路(性能敏感)。

4. 加分点 ​

  • 说清"HTTP 和 RPC 不是对立的":gRPC 底层就基于 HTTP/2,很多 RPC 框架也走 HTTP;
  • 提到 REST 的语义(资源、动词)和 RPC 的调用语义(方法)是设计哲学差异;
  • 追问"Dubbo 和 SpringCloud 怎么选":SpringCloud 默认 HTTP(OpenFeign),Dubbo 是二进制 RPC,性能和服务治理侧重点不同;
  • 补充:现在也有"HTTP/2 + Protobuf"融合方案(gRPC),兼顾可读性与性能。

一句话总结 ​

HTTP 是通用应用层协议(文本、跨语言、适合对外),RPC 是"远程像本地"的调用框架(二进制高效、强契约、内置服务治理,适合内部高频调用);微服务内部重性能用 RPC,对外边界用 HTTP。

基于 VitePress 重建