HTTP与RPC是什么关系| 青训营笔记

86 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第3天,今天我学习了http与rpc的关系。

  • RPC(Remote Procedure Call)远程过程调用
  • HTTP(Hyper Text Transfer Protocol) 超文本传输协议

先来说说通常我们说的RPC指的是什么,我们通常把一个服务对另一个服务的调用称为RPC,比如服务A提供了权限鉴定的接口,然后服务B按照规范去调用这个接口就可以获得合理的反馈。这里哪一个词最重要呢?其实是规范

我觉得RPC就是协议,就是规范!下面我们考虑,如果需要实现一个远程调用,需要做哪些事情。最简单的情况下,只需要下面这样

  1. 客户端序列化数据
  2. 客户端向服务端发送数据
  3. 服务端收到数据并反序列化得到数据内容
  4. 服务端处理数据,并将结果序列化,发送给客户端

再抽象一点,其实就是两件事情,序列化和收发数据。大部分的RPC协议都采用了TCP作为数据传输的网络层协议,因为TCP保证了数据的可靠性。而各个RPC协议的序列化都各不相同。我们看一个例子,GRPC框架采用的protocol buffer协议。

message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}

这与JSON看起来非常的类似,在通常我们习惯于用JSON因为JSON具有很好的可读性,然后JSON中的大量换行,括号,引号等字符会占用空间,所以通常同样的信息,JSON的大小会比protocol buffer大。所以我们在追求低延迟,高带宽的时候,会想到用其他序列化方式来取代JSON。

说了这么多的RPC,那么HTTP与RPC是什么关系,我的回答是,HTTP是一种RPC,也是一种远程调用协议。是由浏览器等客户端调用、获取服务端的协议。相对于其他的RPC,HTTP性能较差,但是HTTP拥有最好的通用性,几乎任何一个语言都会天生支持用HTTP来通讯。