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