RPC通信详解

Posted 编程学习班

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RPC通信详解相关的知识,希望对你有一定的参考价值。

由于本司技术栈是php,所以以下演示采用的是php代码,但是原理都是一样的,不管是java,还是go还是其他的。

关于rpc的介绍网上帖子太多了,但是大家看完可能还是一头雾水,这里用比较通熟的方式给大家解释一下


RPC在日常工作中的应用,无非就是微服务之间的通信,微服务之间的通信我们常用的就两种方式,一种是api调用,一种是RPC


 API调用 

(Restful api与我们常用的http api的区别,就一句话,Restfulapi更加标准化,是一种标准的api设计风格)


 RPC调用 

RPC通信详解

 RPC实现 

RPC通信详解


 RPC与Restful api对比 

很多刚接触微服务的小伙伴在这里都会有纠结,到底选他俩哪个好,什么性能啊,扩展啊,等等。本人最初也是采这个坑踩了很久,直到自写RPC框架后才知道,其实都一样,根据实际的场景和业务逻辑来,具体他俩之间的对比优劣势网络上有很多帖子,大家可以看一下,最后总结就一句话,不管哪种方式,万变不离其中,没有那么大的差别,适合的就好了,不用纠结,如果现在让我选的话,我感觉RPC和Restful api都一样,只是要根据实际业务的复杂程度做一下取舍,其他什么性能啊,扩展啊,不需要任何纠结。



 原理 

了解过计算机网络协议的都知道,计算机有个OSI七层模型,

RPC通信详解

在这里我们仅对第4层做一个简单的介绍,第4层就是与我们开发的程序息息相关的网络协议层,也就是我们常说的TCP/IP协议,计算机间的任何通信协议,例如http,http2,socket等等,都是建立在TCP/IP协议基础之上的,都是对TCP/IP协议的封装,让我们能更方便的实现通信,好比你的应用程序给服务器发了一个请求,用的是http协议,最终转化的底层还是TCP协议。这里我们可以通过linux上的一个抓包工具tcpdump验证一下

RPC通信详解

RPC通信详解

通过上面的抓包能看出来,http协议最终转化的就是tcp协议,其他协议也是同理,这里只是对网络通信协议做了一个简单的介绍,具体的网络通信原理大家可自行学习(只能说这块很重要,不会的话日后你没有办法深入到底层开发),说了这么多,大家只需要记住一个概念就可以,任何的通信协议,最终转化为底层都是tcp。


上面简单引入通信协议,只是为了让大家了解,RPC只是一个概念或者说方案,并不是一种编程语言或者编程方法,最终RPC转化为现实落地的话,就是通过一些方法的封装,然后基于http,tcp,或者是udp的通信协议,进行服务间的通信


那么RPC框架到底是怎么实现的呢,上面说了RPC只是概念,这个概念的作用就是降低程序的耦合性,让使用者不用在关心底层是如何编码数据,不用关心底层是http、tcp还是udp。甭管底层这些如何变,上层使用接口保持一致。通俗讲就是你不用管底层是怎么实现的,你调用方法,拿到你想要的结果就行了。这也是很多复杂系统采用PPC的原因,你不需要熟悉系统的业务逻辑和代码,你只需要调用方法,拿到你想要的数据就行了



 最后说一下详细实现 

以上面的服务器A,服务器B为例,假设想在服务器B上通过

$user = new user();$userList = $user->list();

其实你表面看到的是这种方法式的调用,但是最终通过RPC框架还是转成了参数,然后通过http,tcp,或者udp的方式,携带这些参数到服务器A,服务器拿到参数在解码,看看请求的是哪个类的哪个方法,然后在给你返回相应的数据,只是表面看上去比较抽象,在服务器B居然能new服务器A上面的对象,还能调里面的方法,其实请求的方式和参数都是RPC帮你处理了,RPC里常用的协议http基于curl,tcp基于socket


这里只是说了rpc框架的简单实现原理,当然实现一个RPC框架相对来说也是非常复杂和有难度的,里面会涉及到很多优化的地方,例如注册中心,服务治理,服务发现,中台等等,这些都要靠大家私下去了解一下相关知识,当然如果你仅仅只是作为使用者,不想深究其原理,仅仅是curd的话,那么上面的这些概念足够。

以上是关于RPC通信详解的主要内容,如果未能解决你的问题,请参考以下文章

RPC通讯框架详解

OpenHarmony IPC通讯详解

区块链 | 智能合约Ethereum源代码- 以太坊RPC通信实例和原理代码分析(上)

Spark 1.6 RPC内幕解密:运行机制源码详解Netty与Akka等(DT大数据梦工厂)

微服务主流通信协议详解

阿里面试必问的Dubbo相关问题