RPC(Remote Procedure Call)是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器)的过程或函数,而不是程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同
RPC基本原理图
举个例子
A服务器上有段代码
hello(){
String msg = b.hi(new User("Tom"));
System.out.println(msg);
}
另一台B服务器上有段代码
String hi(User user){
return "hi : " + user.getName();
}
A服务器方法调用B服务器方法的过程
A服务器方法调用B服务器方法,然后由A打印出B方法的返回值,A方法相当于Client,客户端发起调用请求,Client Sub在A服务器发现A要调用的方法在另一台服务器B,将A服务器和B服务器建立连接,并将传递的参数对象进行序列化,将内容发送给B服务器的 Server Sub,将序列化的内容反序列化,并调用对应的方法,拿到调用方法产生的返回值,将返回结果序列化传递A服务器,A收到后反序列化并展示调用结果
决定RPC性能是:序列化与反序列化效率、通讯效率(各个服务器之间建立连接)
序列化之间传递的数据不同类型之间的速度二进制流优于JSON优于XML;
dubbo、gRPC、Thrift、HSF