美文网首页http
rpc和http的区别

rpc和http的区别

作者: 阿长_一个程序员 | 来源:发表于2018-12-11 17:04 被阅读0次

    作者:知乎用户

    链接:https://www.zhihu.com/question/41609070/answer/191965937

    来源:知乎

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    这个问题其实是有理解误区的,首先 http 和 rpc 并不是一个并行概念。

    rpc是远端过程调用,其调用协议通常包含传输协议和编码协议。

    传输协议包含: 如著名的 [gRPC](grpc / grpc.io) 使用的 http2 协议,也有如dubbo一类的自定义报文的tcp协议。

    编码协议包含: 如基于文本编码的 xml json,也有二进制编码的 protobuf binpack 等。

    因此我理解的你想问的问题应该是:为什么要使用自定义 tcp 协议的 rpc 做后端进程通信?

    要解决这个问题就应该搞清楚 http 使用的 tcp 协议,和我们自定义的 tcp 协议在报文上的区别。

    首先要否认一点 http 协议相较于自定义tcp报文协议,增加的开销在于连接的建立与断开。http协议是支持连接池复用的,也就是建立一定数量的连接不断开,并不会频繁的创建和销毁连接。二一要说的是http也可以使用protobuf这种二进制编码协议对内容进行编码,因此二者最大的区别还是在传输协议上。

    通用定义的http1.1协议的tcp报文包含太多废信息,一个POST协议的格式大致如下

    HTTP/1.0 200 OK Content-Type: text/plainContent-Length: 137582Expires: Thu, 05 Dec 1997 16:00:00 GMTLast-Modified: Wed, 5 August 1996 15:55:28 GMTServer: Apache 0.84  Hello World

    即使编码协议也就是body是使用二进制编码协议,报文元数据也就是header头的键值对却用了文本编码,非常占字节数。如上图所使用的报文中有效字节数仅仅占约 30%,也就是70%的时间用于传输元数据废编码。当然实际情况下报文内容可能会比这个长,但是报头所占的比例也是非常可观的。

    那么假如我们使用自定义tcp协议的报文如下

    HTTP/1.0 200 OK

    Content-Type: text/plain

    Content-Length: 137582

    Expires: Thu, 05 Dec 1997 16:00:00 GMT

    Last-Modified: Wed, 5 August 1996 15:55:28 GMT

    Server: Apache 0.84

    即使编码协议也就是body是使用二进制编码协议,报文元数据也就是header头的键值对却用了文本编码,非常占字节数。如上图所使用的报文中有效字节数仅仅占约 30%,也就是70%的时间用于传输元数据废编码。当然实际情况下报文内容可能会比这个长,但是报头所占的比例也是非常可观的。

    报头占用的字节数也就只有16个byte,极大地精简了传输内容。

    这也就是为什么后端进程间通常会采用自定义tcp协议的rpc来进行通信的原因。

    http好比普通话,rpc好比团伙内部黑话。

    讲普通话,好处就是谁都听得懂,谁都会讲。

    讲黑话,好处是可以更精简、更加保密、更加可定制,坏处就是要求“说”黑话的那一方(client端)也要懂,而且一旦大家都说一种黑话了,换黑话就困难了

    相关文章

      网友评论

        本文标题:rpc和http的区别

        本文链接:https://www.haomeiwen.com/subject/peeehqtx.html