对于RPC和HTTP的理解

RPC,英文全名remote procedure call,远程过程调用。一个应用部署在A服务器上,想要调用B服务器上应用提供的方法。

由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

RPC就是要像调用本地的函数一样去调用远程的函数。

RPC和HTTP不是完全分开的两个概念,它们之间是有关联的。

首先,RPC是一个完整的远程调用方案,它通常是包括通信协议和序列化协议。

其中,通信协议包含HTTP协议(gRPC使用http2.0)、自定义报文的TCP协议(如dubbo)。

序列化协议包含基于文本编码的xml、json,基于二进制编码的protobuf和hessian等。

而HTTP只是一个通信协议,不是完整的远程调用方案。也就是说,HTTP和RPC不是对等的概念,用来比较不太合适。

 

Q:为什么有些后端子系统之间是使用自定义的TCP协议的RPC来做进程通信,而不是HTTP?

HTTP协议是支持连接池复用的,也就是建立一定数量的连接不断开,并不会频繁创建和销毁连接。

HTTP也可以使用protobuf这种二进制编码协议对内容进行编码。也就是说连接建立和断开的开销和序列化协议并不是主要影响因素。

二者最大的区别还是在传输协议上面。

HTTP的传输协议中header部分有很多冗余的部分,像Content-type、Last-Modified、Expires等等。即使HTTP body是使用二进制编码协议,header头的键值对却用了文本编码,非常占用字节数。而自定义的TCP协议,可以精简传输内容,传输效率更高,比如下面的自定义TCP协议的报文:

1-4byte, length

5-8byte,tyoe

9-16byte,package_id

17-length+16byte, package_data

报头占用的字节数也就只有16个byte,大大减少了传输内容,高并发的情况下,少几个字节,乘以巨大的请求数量,能带来庞大的收益。

因此,对于性能要求比较高的系统来说,通常使用自定义的TCP协议的RPC来做后端进程通信。

其实使用HTTP协议比较多的还是前后端的通信,原因在于主流网页浏览器都支持HTTP协议,而且HTTP在缓存、幂等、cookie这种浏览器安全相关的方面做了很多功夫。

 

posted @   花与不易  阅读(265)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示