RPC框架
RPC:远程过程调用协议。客户端在不知道调用细节的情况下,调用远程计算机上的某个对象。就像调用本地应用程序中的对象一样。 官方定义:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有:
- 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud、Facebook 的 Thrift、Twitter 的 Finagle 等。
- 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
- 通信框架:MINA 和 Netty。
- ps: Google gRPC 框架是基于 HTTP2 协议实现的,底层使用到了 Netty 框架的支持。
既然是协议,就要遵守规范,遵循这套规范实现的有Dubbo、Thrift、GRPC、Hetty。
RPC认为自己在调用本地对象,不需要关心TCP/UDP还是HTTP协议。
在本地应用程序中,对某个对象的调用需要传递参数、返回调用结果。至于被调用的对象内部如何使用这些参数,并计算出处理结果,调用方不需要关心。
对于远程调用,这些参数以一种信息格式传递给网络上的另一台计算机,这些信息格式怎样构成,调用方不需要关心。
第一次知道RPC框架,刚接触的时候不知道如何理解,以为只是某个大体结构框架而已,慢慢的其实发现RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。
在认识到RPC的作用后我们就会对RPC解决的问题感到疑惑:
1、如何确定客户端和服务端之间的通信协议?
2、如何更高效地进行网络通信?
3、服务端提供的服务如何暴露给客户端?
4、客户端如何发现这些暴露的服务?
5、如何更高效地对请求对象和响应结果进行序列化和反序列化操作?
常见的RPC框架
Dubbo 。来自阿里巴巴 http://dubbo.I/O/
Motan 。新浪微博自用 github.com/weibocom/mo…
Dubbox 。当当基于 dubbo 的 github.com/dangdangdot…
rpcx 。基于 Golang 的 github.com/smallnest/r…
Thrift from facebook thrift.apache.org
Avro from hadoop avro.apache.org
Finagle by twitter twitter.github.I/O/finagle
gRPC by Google www.grpc.I/O (Google inside use Stuppy)
Hessian from cuacho hessian.caucho.com
Coral Service inside amazon (not open sourced)