0%

面试题之rpc和http

面试题之rpc和http

rpc和http做比较

rpc的理解

  • RPC, 英文全名remote procedure call 即远程过程掉调用
  • 就是说一个应用部署在A服务器上,想要调用B服务器上应用提供的方法
  • 由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据
  • RPC就是要像调用本地的函数一样去调用远程函数

eq:1.那为啥不能用HTTP请求,要用RPC调用呢?

  • 首先,rpc是一个完整的远程调用方案,他通常包括通讯协议和序列化协议

  • 其中,通信协议包含http协议,(如gRPC使用HTTP2)、自定义报文的tcp协议(如dubbo)

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

  • 而HTTP只是一个通信协议,不是一个完整的远程控制协议

  • 也就是说,HTTP和RPC不是对等的概念,用来比较不合适

eq:2.为什么有些后端子系统之间是使用自定义tcp协议的rpc来做进程通信?而不是使用http协议呢?

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

  • 然后,http也可以使用protobuf这种二进制编码协议对内容进行编码

  • 也就是说连接建立与断开的开销和序列化协议并不是主要影响因素

  • 二者最大的区别还是在传输协议

  • http的传输协议中header部分有很多冗余的部分,像Content-Type、Last-Modified、Expires等

  • 即使http body是使用二进制编码协议,header头的键值对却用了文本编码,非常占用字节数

  • 而自定义的tcp协议,可以精简传输内容,传输效率更高。比如下面的自定义tcp协议的报文:

  • 1-4 byte,length
    5-8 byte,type
    9-16 byte,package_id
    17-length+16 byte,package_data
  • 报头占用的字节数也就只有16个byte,大大地减少了传输内容。高并发情况下,少几个字节,乘以巨大的请求数量,能带来庞大的收益

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

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

------ 本文结束------

欢迎关注我的其它发布渠道