简介
RPC 的全称是 Remote Procedure Call ,指的是指远程过程调用,是分布式系统常见的一种通信协议,通常是指两个服务或者进程相互访问但是需要通过网络传输数据才能达到, 也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数或方法,由于不在一个内存空间,不能直接通过本地IPC调用,需要通过网络来表达调用的语义和传达调用的数据。RPC从早期的跨进程到现在的跨系统,跨物理机器已经发展了几十年。
在RPC中用户可以像调用本地方法/函数那样调用远程方法而无需了解底层实现细节。
RPC应用场景
1.大数据等分布式系统。
2.微服务
跨进程的方式种类
1.Restful。
2.WebService协议。
3.基于HTTP协议。
4.基于数据库做数据交换,例如Mysql。
5.基于MQ队列做数据交换,例如RabbitMq,Kafka,Redis。
6.RPC。
依赖中间件交互的方式需要一个中间层做数据的临时存储,交互间的两个系统是异步交换数据。
其他的是直接交换数据,没有中间存储层,交互间的两个系统是同步交换数据。
RPC相关概念
1.Server:服务端一般称作Provider,是服务提供者。
2.Client:客户端一般称作Consumer,是服务消费者。
3.Stub:存根,用于服务描述。
RPC框架
现在有很多开源的对RPC技术进行了封装的RPC框架。
1.Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java 语言。
2.Motan:微博内部使用的 RPC 框架,于 2016 年对外开源,仅支持 Java 语言。
3.Tars:腾讯内部使用的 RPC 框架,于 2017 年对外开源,仅支持 C++ 语言。
4.Spring Cloud:国外 Pivotal 公司 2014 年对外开源的 RPC 框架,仅支持 Java 语言而跨语言平台的开源 RPC 框架主要有以下几种。
5.gRPC:Google 于 2015 年对外开源的跨语言 RPC 框架,支持多种语言。
6.Thrift:最初是由 Facebook 开发的内部系统跨语言的 RPC 框架,2007 年贡献给了 Apache 基金,成为 Apache 开源项目之一,支持多种语言。二进制通讯协议。
现有RPC框架对比
gRPC | Thrift | RMI | Dubbo | HadoopRpc | |
开发语言 | 多语言 | 多语言 | java | java | java |
序列化 | protobuf | thrift格式 | java序列化 | hesson2 | R/Writeable |
注册中心 | 否 | 否 | JDK自带 | Zk等 | 否 |
跨语言 | 是 | 是 | 否 | 否 | 否 |
服务定义 | Protobuf文件 | Thrift文件 | java接口 | java接口 | java接口 |
服务治理 | 否 | 否 | 否 | 是 | 否 |