RPC与HTTP的关系

  1. RPC是什么?
  2. RPC与HTTP的关系?
  3. 一些常见的 RPC 框架
    1. 语言平台绑定的开源 RPC 框架:
    2. 跨语言平台的开源 RPC 框架:

RPC是什么?

RPC,英文全名remote procedure call,即远程过程调用。

一个应用部署在A服务器上,想要调用B服务器上应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

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

RPC与HTTP的关系?

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

  • 通信协议:包含http协议(如grpc使用http2)、自定义报文的tcp协议(如Dubbo)
  • 序列化协议:包含文本编码的xml、json,基于二进制编码的protobuff、hessian等。

基于自定义tcp协议的RPC通信相对于HTTP效率比较:

HTTP协议通信 自定义tcp协议的RPC通信
建立连接和断开连接 效率高。
(支持连接池复用,因此不会频繁创建和销毁连接。)
效率高。
序列化协议 效率高。
(也支持protobuf这种二进制编码协议进行编码。)
效率高。
传输协议 效率低
(Header部分存在冗余部分,如Content-Type、Last-Modified、Expires等。即使body使用了二进制编码,但header的键值对依然使用文本编码,非常占用字节数。)
效率高
(自定义传输协议,支持纯二进制编码传输。)

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

一些常见的 RPC 框架

语言平台绑定的开源 RPC 框架:

  • Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java 语言。
  • Motan:微博内部使用的 RPC 框架,于 2016 年对外开源,仅支持 Java 语言。
  • Tars:腾讯内部使用的 RPC 框架,于 2017 年对外开源,仅支持 C++ 语言。(当前已支持多语言,优先支持C++)
  • Spring Cloud:国外 Pivotal 公司 2014 年对外开源的 RPC 框架,仅支持 Java 语言

跨语言平台的开源 RPC 框架:

  • gRPC:Google 于 2015 年对外开源的跨语言 RPC 框架,支持多种语言。
  • Thrift:最初是由 Facebook 开发的内部系统跨语言的 RPC 框架,2007 年贡献给了 Apache 基金,成为 Apache 开源项目之一,支持多种语言。

(参考:https://juejin.cn/post/6844903920402333709)


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 nz_nuaa@163.com
github