avatar

朝花惜拾

Be a Real Engineer

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于
Home 初识 RPC 与 REST
文章

初识 RPC 与 REST

Posted 2024-12-8 Updated 2025-04- 25
By Ray Lyu
6~8 min read

RPC 和 REST 是两种主流的远程调用方式,也是分布式系统中常用的组件间通信手段。其实严格来说,RPC 是一种通信技术,而 REST 是一种软件架构风格,二者并不是同一类型的事物,只是有一些相似。不过,在远程服务调用这个场景,二者经常被拿来互相比较。

RPC

RPC 发展历程

RPC(Remote Procedure Call)的字面意思就是“远程服务调用”,它最初的目的就是让计算机可以像调用本地方法一样调用远程方法。在 RPC 发展的过程中,始终没有一款框架可以同时满足简单、普适、高性能这三点,因而这一小小的领域逐渐进入了百家争鸣的局面。如今,任何一款具有生命力的 RPC 框架都不再追求完美,而是以某个具有针对性的特点为主要的发展方向。

  • 朝着面向对象发展,不满足于仅将面向过程的编码方式带入分布式场景

  • 朝着性能发展,代表为 gRPC(Google) 和 Thrift(Facebook)

  • 朝着简化发展,代表为 JSON-RPC,它简单轻便,但功能弱、速度慢

也正是每一种 RPC 框架都有不完美的地方,才导致不断有新的轮子出现。近几年,RPC 框架有向更高层次与插件化方向发展的趋势,不再追求大而全,而是设计扩展点,让用户自己选择相应的解决方案。框架自身则更聚焦于更高层次的能力,比如负载均衡、服务发现、可观测性等。这类框架以 Dubbo(阿里)和 Thrift 为代表。

所有 RPC 框架本质上都是在变着花样地解决以下三个问题,

  • 如何表示数据,即如何让方法的参数和返回值在通信两端都能被正确的解析,而不受编程语言、OS、硬件等差异的影响,有效的做法就是统一转换为中立的数据流(序列化),然后两端各自解析回自己的数据类型(反序列化)。

  • 如何传递数据,即选择何种传输协议。实际的服务交互不是只序列化一把就完事了,异常、认证授权、事务等都可能产生需要交换的信息。不过,如果要求足够简单,可以直接使用 HTTP 协议。

  • 如何表示方法,即如何表达同一个方法,以及如何找到对应的方法。

Golang net/rpc 库

【待补充】

REST

REST 设计风格

REST 并不是一套规范或协议,而是一种设计风格,其中包含一些指导原则。Fielding 在一篇被认为是 REST 起源的论文中提出了六条指导原则。但事实上,完全符合 REST 所有指导原则的系统并不多见。Leonard Richardson 曾提出下面模型,来衡量一个系统 REST 的程度,其中第 2 级是目前大多数系统达到的 REST 级别。

  • 第 0 级,完全不 REST。

  • 第 1 级,开始引入资源的概念。

  • 第 2 级,引入同一接口,映射到 HTTP 协议的方法上。

  • 第 3 级,超媒体控制,用人话说就是:除了第一个请求外,其它后续可能的请求方式应该在返回信息中自描述。

REST 和 RPC 在核心思想上的差异就是面向资源与面向过程的区别。

RESTful API 实例

【待补充】

参考资料

  1. 《凤凰架构》

  2. rpc package - net/rpc - Go Packages

  3. Go 每日一库之 RPC

架构
架构
License:  CC BY 4.0
Share

Further Reading

May 18, 2025

6.824 Lab1: MapReduce

1. 分布式计算 处理大规模数据的分布式系统主要分为批处理和流处理系统。 批处理系统:数据被分成不同的批次,一次处理一批,单批的数据规模一般也非常大,适用于对处理时间不敏感的任务。 流处理系统:系统连续不断地接收和处理数据,这类系统对处理速度要求比较高,适用于延迟敏感型任务。 根据处理时间要求的不同

Apr 25, 2025

服务架构演进小结

系统架构的演进大致可分为“单体”和“微服务”两个阶段,其中,根据基础设施能力下沉程度的不同,微服务架构又可以细分为“微服务”和“云原生两个阶段,后者以 Kubernetes 为基础。另外,“无服务”架构正在受到越来越多的关注。无服务与微服务并没有继承或替代的关系,目前,无服务的云函数可以作为部分微服

Dec 8, 2024

初识 RPC 与 REST

RPC 和 REST 是两种主流的远程调用方式,也是分布式系统中常用的组件间通信手段。其实严格来说,RPC 是一种通信技术,而 REST 是一种软件架构风格,二者并不是同一类型的事物,只是有一些相似。不过,在远程服务调用这个场景,二者经常被拿来互相比较。 RPC RPC 发展历程 RPC(Remot

OLDER

TLPI:文件系统

NEWER

2024年终总结

Recently Updated

  • 6.824 Lab1: MapReduce
  • 服务架构演进小结
  • ChineseChess 程序:Minimax 算法与 Alpha-Beta 剪枝
  • 2024年终总结
  • 初识 RPC 与 REST

Trending Tags

算法 架构 分布式系统 Golang Linux 系统编程 Kubernetes 搜索

Contents

©2025 朝花惜拾. Some rights reserved.

Using the Halo theme Chirpy