有了HTTP为什么还要RPC?

RPC:Remote Procedure Call,远程过程调用
一直以来都没有深究过RPC和HTTP的区别,不都是写一个服务然后在客户端调用么?
HTTP和RPC最本质的区别,就是 RPC 主要是基于 TCP/IP 协议的,而 HTTP 服务主要是基于 HTTP 协议的。
我们都知道 HTTP 协议是在传输层协议 TCP 之上的,所以效率来看的话,RPC 当然是要更胜一筹啦!
HTTP和RPC的相同点是,底层通讯都是基于socket,都可以实现远程调用,都可以实现服务调用服务
HTTP 的本质
首先你要明确 HTTP 是一个协议,是一个超文本传输协议。
HTTP 它是协议,不是运输通道。
它基于 TCP/IP 来传输文本、图片、视频、音频等。
重点来了。
HTTP 不提供数据包的传输功能,也就是数据包从浏览器到服务端再来回的传输和它没关系。
这是 TCP/IP 干的。
那 HTTP 有啥用?我们来分析一波。
我们上网要么就是获取一些信息来看,要么就是修改一些信息。
比如你用浏览器刷微博就是获取信息,发微博就是修改信息。
所以说浏览器需要告知服务器它需要什么,这次的请求是要获取哪些信息?发怎么样的微博。
这就涉及到浏览器和服务器之间的通信交互。
而交互就需要一种格式。
像你我之间的谈话就用中文,你要突然换成俄语我听不懂那不就 GG 了。
所以说 HTTP 它规定了一种格式,一种通信格式,大家都用这个格式来交谈。
这样不论你是什么服务器、什么浏览器都能顺利的交流,减少交互的成本。
就像全世界如果都讲中文,那我们不就不需要学英文了,那不就较少交互的成本了。
不像现在我们还得学英文,不然就看不懂文档等等。
万一之后俄语又起来了,咱还得对接俄文,这交互成本是不是就上来了。
而网络世界还好,咱们现在的 Web 交互基本上就是 HTTP 了。
其实 HTTP 协议的格式很像我们信封,有个固定的格式。
左上角写邮编,右上角贴邮票,然后地址姓名啥的依次来。
因为计算机是很死板的,不像我们人一样有一种立体扫描感,所以要规定先写头、再写尾。
你要是先写尾,再写头计算机就认不出来了。
所以 HTTP 就规定了请求先搞请求行、再搞请求报头、再搞请求体。
响应就状态行、响应报头、响应体。
所以 HTTP 的本质是什么?
就是客户端和服务端约定好的一种通信格式。
HTTP 和 RPC 的关系
HTTP 和 RPC 其实是两个维度的东西, HTTP 指的是通信协议。
而 RPC 则是远程调用,其对应的是本地调用。
RPC 的通信可以用 HTTP 协议,也可以自定义协议,是不做约束的。
像之前的单体时代,我们的 service 调用就是自己实现的方法,是本地进程内的调用。

public User getUserById(Long id) {
	return userDao.getUserById(id); // 这叫本地调用
}...

现在都是微服务了,根据业务模块做了不同的拆分,像用户的服务不用我这个小组负责,我这小组只要写订单服务就行了。
但是我们服务需要用到用户的信息,于是我们需要调用用户小组的服务,于是代码变成了以下这种

public User getUserById(Long id) {
	return userConsumer.getUserById(id); // 这是远程调用,逻辑是用户小组的服务实现的。
}...

把之前的用户实现拆分出来弄了一个用户服务,订单相关的也拆成了订单服务,都单独部署。
这样订单相关的服务要获取用户的信息就需要远程调用了。
可以看到 RPC 就是通过网络进行远程调用,订单服务其实就是客户端,而用户服务是服务端。
这又涉及到交互了,所以也需要约定一个格式,至于要不要用 HTTP 这个格式,就是大家自己看着办。
至此相信你对 HTTP 是啥也清楚了。
RPC 和 HTTP 的之间的关系也清楚了。

© 版权声明
THE END
喜欢就支持一下吧!
点赞351 分享