对于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这种浏览器安全相关的方面做了很多功夫。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下