00:00
好,前面呢,我们说到一个概念叫RPC,它的全称呢叫remote procedure call,指的是我们远程过程调用,也就是说A服务器上的一个代码,想要调用B服务器上的一个功能,那怎么做呢?我们这个RPC它是一种技术思想,它指导我们可以这样来做,比如这有一个最基本的原理图,好,我们A服务器上客户端呢,有一个有一块小功能想要调用B服务器,咱们。的一处小功能,然后呢,他可以先找一个小助手,诶这个呢,大家理解为小助手,这个助手呢,一看我们这个代码呢,想要调B服务器上的一个功能,那怎么办呢?它先跟B服务器建在网络之间建立起一个socket连接,然后呢,将我们要调用B的一些信息,比如我们要调B的哪个方法,方法名啦,包括我们调B方法的时候用的参数是什么,将这些信息传递给B服务器,然后呢,B服务器上的这个小助手收到了这些信息,你看AA想要调我里边的哪个方法,他呢,就将这个方法一调用,包括呢。
01:18
调这个方法要的参数A也通过这个网络传递了过来,那我们调方法的时候呢,也将参数传过去,我们B服务器里边的这个小助手帮我们呢,将这个方法调用完,调用完以后呢,方法会有一个返回值,把这个返回值呢也通过网络传输给AA,收到返回值以后,小助手收到返回值,把这个返回值呢交给我们客户端的这段代码,所以说呢,整个RPC核心其实就是AB2个服务器架起一个网络连接,它们之间进行通信,这样的话呢,诶你想要用它的功能,你相当于你给他去发一个请求一样,他调用完他自己的方法以后呢,将相应的结果再交给A,那么呢,来举上一个例子,A服务器上呢有一个代码hello,它呢,想要调用B服务器上的hi方法同时传入。
02:18
出一个user对象,B服务器上的氦方法执行完了以后呢,会返回一个值,A服务器调完B服务器的方法,收到这个值以后呢,在控制台打印一下,如果说这个B就在A服务器里边,那好,那我们调方法就是这么来调,很直接,我们以前这么来写没啥问题,但是他们分割两地,整个调用过程应该是怎样的呢?我们A服务器客户端想要调用B服务器的代码,诶我们A服务器上呢有一个小助手,这个小助手呢,一看我们要调一别的服务器,那我们先跟别的服务器建立起一个连接,建立起连接以后呢,要调人家方法,还要传一个参数,这个参数也得发给我们这个B服务器,那么参数这个对象呢,我们要在网络间传递,我们得序列化,哎,把这个对象序列化,序列化以后呢,我们将我们要调用的这些信息传递给我们B服务器的。
03:18
这个小助手,B服务器的小助手呢,就收到了这个信息,一看,诶有来自外界的一个A服务器想调我的嗨方法,同时呢,还给我传了一个这个参数值,这个值呢,我们要在方法里边能用,由于序它是序列化传过来的,那我们把它呢反序列化成对象,哎反序列化成对象,然后呢,我们接下来再来B服务器上的这个小助手,哎,把我们B服务器上的这个方法调用一下,把刚才反序列化回来的对象,哎拿到它里边的一些属性值,好,方法调完了就会有一个返回值,那返回值我们还要交给A服务器啊,怎么办呢?同样返回值过来了以后呢,我们要在网络间传递数据,哎,我们嗯将所有的对象都得序列化往出传,所以说呢,我们将这个返回的这个词段,我也序列化成字符串,哎,字符串呢。
04:18
好,我们交给A服务器,将这个返回消息交给A服务器,A服务器收到这个序列化的字符串呢,它要能用成这个字符串对象,它呢又得反序列化回来,哎,反序列化回来,然后呢,反序列化回来就得到了一个字符串对象,它呢就在这能system out输出了。然整个过程呢,我们牵扯到两个最核心的关系,第一个就是AB2个呢要建立起连接,第二个AB2个之间我们要传递数据,哎,我们需要序列化和反序列化机制,所以说影响一个RPC框架性能的着重有两点,第一点看一个RPC框架能否快速的在各个服务器之间建立起连接,第二点就看我们这个RPC框架,它的这个序列化与反序列化机制啊,速度快不快。
05:18
来假设呢,我们序列化之间传的数据是插麦,那我反序列化这个插麦解析时间比较长,那就慢了,假设呢,我们传的是杰森,杰森的字符串稍微短一点,我们传输快一点,那序列反序列化呢也快一点,那我们就快了。再假设我们传的是更快的一些二进制流,那么我们整个RPC框架的性能都能达到一个极大的提升,也就是说决定RPC框架的两个,一个是它的通信效率,第二个呢,是它的序列化与反序列化效率。当然这些原理、机制以及思想随着大家深入学习RPC框架就会慢慢理解。那我们这个RPC框架呢,市面上也有很多,比如double,还有谷歌的JRPC以及Facebook的thrift,以及我们阿里后来又在用的这个HSF,他们呢,虽然用法有所不同,但是思想呢,都是一样的。
06:18
都是通过网络通信传递数据来实现我们远程过程调用。
我来说两句