rpc核心原理

什么是rpc?

rpc的全称是Remote Procedure Call,即远程过程调用,是分布式系统的常用通信方法。 Remote,简单来说的话就是两个不同的服务之间,两个服务肯定是两个不同的进程。因此,我们就从跨进程进行访问的角度去理解就行了。 Procedure,意思是一串可执行的代码,我们写Java的方法,就是一段课程行的代码。 Call,即调用,调用的就是跨了进程的方法。

综上,rpc就是跨进程去调用一个方法代码。举一个例子,你从QQ打开QQ空间,会弹出浏览器,自动访问你的QQ空间。这就是跨进程访问打开浏览器的方法,也属于rpc。

跨进程访问技术可不仅仅是我们现在知道的那些rpc框架,就连微软的COM组件本身也是一个RPC技术,在早期的文档中,COM组件的调用就被称为RPC。

因此,RPC只是属于进程交互形式的一种。

跨进程交互形式

没了解rpc之前,我们还有很多跨进程交互形式。

1.写一个controller,方法返回Resultful风格的json数据。这是利用http协议实施的跨进程交互。

2.创建一个WebService接口,用soap协议进行xml传输。

3.基于DB做数据交换,这个就不用多说了吧。(异步交互)

4.基于MQ做消息队列,MQ就是一个消息中间件,也可以实现跨进程交互。

看吧,这些交互形式你肯定不陌生。而rpc的底层也是用tcp或者http协议进行数据传输,我们用socket就能实现。

rpc调用图解

一文就读懂RPC远程调用核心原理_java

服务集成 RPC 后,服务(这里的服务就是图中的 Provider,服务提供者)启动后会通过 Register(注册)模块,把服务的唯一 ID 和 IP 地址,端口信息等注册到 RPC 框架注册中心(图中的 Registry 部分)。

当调用者(Consumer)想要调用服务的时候,通过 Provider 注册时的的服务唯一 ID 去注册中心查找在线可供调用的服务,返回一个 IP 列表(3.notify 部分)。

第三步 Consumer 根据一定的策略,比如随机 or 轮训从 Registry 返回的可用 IP 列表真正调用服务(4.invoke)。

最后是统计功能,RPC 框架都提供监控功能,监控服务健康状况,控制服务线上扩展和上下线(5.count)

rpc与其他几种多跨进程交互形式不一样的点在于,rpc可以像调用本地方法那样调用其他进程的方法,这一点是其他调用形式不具备的。