例如 Motan , Dubbo , rpcx,gRPC,thrift 等等 RPC 框架。
最近对 RPC 有诸多疑问,想问问大家有关于 RPC 实现的几个疑问?
1 大多数 RPC 框架在传输层是基于什么协议实现的?(TCP 协议或者是框架自己的协议?)
2 上面的 RPC 框架应该性能是明显优于普通 HTTP 协议的,为什么有的公司会选择将 HTTP 作为 RPC 的调用协议?这是出于什么考虑,纯粹为了简单吗?
这里有个实测比较: https://cnodejs.org/topic/553a1cad63b7692e48bbb715
1
misaka19000 2017-03-10 18:56:58 +08:00 via Android
应该基本上都是是 TCP/IP ,谁闲着没事干自己搞一套通信协议啊
RPC 显然是效率高啊,但是麻烦嘛, HTTP 的优点就是简单,并且不管什么语言都很容易使用。 |
2
domty 2017-03-10 19:03:32 +08:00
gRpc 我记得是基于 Http2 的, rpc 的协议理论上不可能不考虑传输性能的。
在 Http 协议如果能满足传输性能的要求的话其实无所谓。 而且 http 协议还有一个有点,更便于直接向 App 等客户端提供服务。 |
3
wc951 2017-03-10 20:02:51 +08:00
用 http 是因为比较通用,方便跨语言吧,不需要额外的实现
|
4
checgg OP |
5
juxingzhutou 2017-03-10 20:27:48 +08:00
gRPC 的话底层是基于 HTTP 的,在 HTTP 这层上效率是一样的,但是它使用了 protobuf 作为序列化反序列化的工具,所以可以比一般的 json 报文更小,提升了传输效率。
RPC 框架首先一点就是性能上会做一些优化,更重要的一点是 RPC 框架一般使用中间语言定义接口,这样有利于前后端协作、并行开发,并且也省去了前后各端的接口封装,直接可以通过接口定义文件生成各个语言的接口实现文件。而且在文档格式要求不高的情况下,接口定义文件加上一些注释就可以是一份很好的接口文档,节省了很多额外的工作。 |
6
helloworldwt 2017-03-11 14:05:08 +08:00
Dubbo 和 Thrift 底层都是 socket 通信
|