简述HTTP | 青训营笔记

101 阅读6分钟

RPC概念模型

RPC(Remote Procedure Call)是一种远程过程调用协议,它允许程序在网络上的不同计算机之间进行通信,类似于本地过程调用的方式。

  1. 客户端(Client):客户端是发起远程调用请求的程序,它向远程服务器发送请求,并等待服务器响应。
  2. 服务端(Server):服务端是接收远程调用请求的程序,它处理客户端发送的请求,并将处理结果返回给客户端。
  3. 接口定义语言(IDL):IDL 是一种定义 RPC 接口的语言,它定义了客户端和服务端之间的数据格式和方法调用协议。通常使用 IDL 工具自动生成客户端和服务端的代码。
  4. 传输协议(Transport Protocol):传输协议是指客户端和服务端之间传输数据的协议,例如 TCP、UDP 等协议。
  5. 序列化协议(Serialization Protocol):序列化协议是指将数据从一种格式转换为另一种格式的协议,例如将对象转换为二进制格式或 JSON 格式。
  6. 远程过程调用(RPC):远程过程调用是指客户端调用服务端的方法,服务端执行该方法并返回结果给客户端的过程。

RPC运行过程

  1. 客户端调用远程方法:客户端调用本地代理对象的方法,本地代理对象将方法调用转换为网络请求,并将请求发送到远程服务器。
  2. 网络传输数据:客户端请求通过网络传输到远程服务器,通常使用 TCP、UDP 等协议进行数据传输。
  3. 服务器接收请求:远程服务器接收客户端请求,并根据请求的方法名称、参数等信息,调用相应的服务方法。
  4. 服务方法执行:服务方法根据请求的参数进行业务处理,生成响应数据,并将响应数据返回给远程客户端。
  5. 网络传输数据:服务器响应数据通过网络传输到客户端。
  6. 客户端接收响应:客户端接收服务器的响应,并将响应数据转换为本地对象。
  7. 方法返回调用结果:本地代理对象将响应数据返回给客户端调用方,并完成一次 RPC 调用过程。

RPC和HTTP的区别

他们都是应用层协议

都是基于TCP协议建立三次握手

HTTP 协议(Hyper Text Transfer Protocol),又叫做超文本传输协议。我们用的比较多,平时上网在浏览器上敲个网址就能访问网页,这里用到的就是 HTTP 协议。

而 RPC(Remote Procedure Call),又叫做远程过程调用。它本身并不是一个具体的协议,而是一种调用方式。

现在电脑上装的各种联网软件,比如 xx管家,xx卫士,它们都作为客户端(Client)需要跟服务端(Server)建立连接收发消息,此时都会用到应用层协议,在这种 Client/Server (C/S) 架构下,它们可以使用自家造的 RPC 协议,因为它只管连自己公司的服务器就 ok 了。

但有个软件不同,浏览器(Browser),不管是 Chrome 还是 IE,它们不仅要能访问自家公司的服务器(Server),还需要访问其他公司的网站服务器,因此它们需要有个统一的标准,不然大家没法交流。于是,HTTP 就是那个时代用于统一 Browser/Server (B/S) 的协议。

也就是说在多年以前,HTTP 主要用于 B/S 架构,而 RPC 更多用于 C/S 架构。但现在其实已经没分那么清了,B/S 和 C/S 在慢慢融合。很多软件同时支持多端,比如某度云盘,既要支持网页版,还要支持手机端和 PC 端,如果通信协议都用 HTTP 的话,那服务器只用同一套就够了。而 RPC 就开始退居幕后,一般用于公司内部集群里,各个微服务之间的通讯。

底层连接模式

  1. HTTP/1.1 协议为例,其默认在建立底层 TCP 连接之后会一直保持这个连接(Keep Alive),之后的请求和响应都会复用这条连接。
  2. 而 RPC 协议,也跟 HTTP 类似,也是通过建立 TCP 长链接进行数据交互,但不同的地方在于,RPC 协议一般还会再建个连接池,在请求量大的时候,建立多条连接放在池内,要发数据的时候就从池里取一条连接出来,用完放回去,下次再复用,可以说非常环保。

传输的内容

HTTP 使用文本格式的消息体(例如 JSON、XML、HTML 等),而 RPC 通常使用二进制格式的消息体(例如 Protobuf、Thrift、MessagePack 等)。二进制格式相对于文本格式具有更小的数据大小和更高的解析速度,适合在网络传输中传输大量的结构化数据。

协议特性

HTTP 是基于请求-响应模式的协议,客户端发送请求,服务器响应请求。而 RPC 可以支持更多的协议特性,例如服务发现、负载均衡、超时控制、重试机制等。这些特性使得 RPC 在分布式系统和微服务架构中更加适用。

小结

RPC的优点

  1. 简化编程:RPC 模型将网络通信、数据传输、序列化和反序列化等复杂的底层实现封装在框架中,使得开发者可以专注于业务逻辑的实现,提高了编程效率。
  2. 透明性:RPC 模型使得远程方法调用看起来像本地方法调用一样简单,隐藏了底层网络通信的细节,提高了代码的可读性和可维护性。
  3. 跨语言支持:RPC 模型通常使用 IDL(接口定义语言)来定义接口,IDL 可以跨语言使用,因此 RPC 模型可以支持多种编程语言之间的数据传输和方法调用。
  4. 高性能:RPC 模型通常使用二进制格式的消息体和专门的序列化方式,使得网络传输更加高效,同时 RPC 模型可以支持多种传输协议,例如 TCP、UDP、HTTP/2 等,可以根据需要进行选择。
  5. 可扩展性:RPC 模型通常支持服务发现、负载均衡、超时控制、重试机制等特性,可以支持大规模的分布式系统和微服务架构。

RPC的缺点

  1. 复杂性:RPC 模型需要使用专门的框架和工具来实现,需要进行复杂的配置和管理,同时需要考虑网络通信、序列化和反序列化等方面的错误和异常处理。
  2. 依赖性:RPC 模型需要客户端和服务端都使用相同的框架和工具,且需要严格遵守接口定义语言的规范,否则可能会导致调用失败或不兼容。
  3. 安全性:RPC 模型需要进行认证和授权等安全措施,否则可能会暴露敏感数据和方法。