什么是 RPC

字面理解: 

远程过程调用协议RPC(Remote Procedure Call Protocol)
远程过程调用直观说法就是A通过网络调用B的过程方法。

通俗理解:

比方说古代驿站和军令机制吧。

皇帝要想进攻敌国,军队又长期在外没法直接指挥。
于是皇帝可以发送军令,然后通过驿站传达给前方军队。
军队再把战斗结果写成战报,通过驿站在送回到皇帝手里。
那么这就相当于完成了一次rpc。

都城里的皇帝相当于A机器的rpc发起方,
前线军队相当于提供打仗这一功能的B机器。
驿站机制相当于rpc框架。

通过这种制度安排,皇帝可以像指挥身边太监一样,方便的指挥前线。
理论上是这样的,实际可能比较慢,
可能前线不听指挥,可能失联,
可能有奸贼偷了皇帝的虎符,假传军令。

这也都是计算机里的rpc同样存在的问题。


作者:抽大麻的兔子

链接:https://www.zhihu.com/question/25536695/answer/185396712

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原理:

根据字面意思来推断,RPC 的确是为了进程间通信而准备的,
但构造成函数调用这一形式,是因为这是在抽象上最合理的。

我们可以推断演进一下

----

1、 A B 两个进程之间需要进行数据交换。

2、 于是我们想出来在某个内存区域划出一个空间,然后向该空间中写入和读取数据。
(共享文件也可以)(常见的socket就是这一共享内存的抽象,只是现在大多指网络通路)

3、 A B 通信完成。

----

4、 A B需要完成更复杂的交互

5、 于是我们指定一个协议,A B 根据该协议对数据的进行编码解码,
根据协议内容做出决策。

----

6、 发现协议过于复杂(比如 编号1代表调用 a函数,编号2代表b函数) 

7、 试图优化协议,将函数参数和调用的函数名称作为协议的一部分,函数返回值类似

8、 RPC达成

----

9、 表现出来的特性就是,object invok(parameter),
就代表了,序列化 parameter 对象到中间格式,
利用远程服务器的 invok 函数进行处理 ,
同时将返回的数据解码生成 object对象。

----

##### 总结

RPC 在整个过程中,体现了逐层抽象,将复杂的协议编解码和数据传输封装到了一个函数中。

##### 缺点

单一 RPC 无法实现 push,即推送服务。

理由是,RPC 是client 调用 server获取数据,
是一个完整的过程,实现不了server调用client。

解决方案:让client 既可以调用server上的RPC服务,
反之client本身也成为一个RPC服务让Server来调用。

1、 Netty只是网络通信框架,
目的是让你用最少的代码构建出足够支撑网络通信的功能。

2、完成RPC 需要两个协议: 对象序列化协议 和 调用控制协议
常见例子举例:

	1、zeroC ICE,
	拥有自己的网络通信框架 + ICE 调用控制协议和对象序列化协议,
	同时也涵盖了服务组件的抽象部署等功能。
	
	2、thrift,
	有自己的网络通信框架+thrift 对象序列化协议+thrift 调用控制协议
	
	3、probuff,只是 对象序列化协议
	
	4、XMLRPC ,jsonRPC,
	常见的语境是利用HTTP协议作为调用控制协议,
	XML 和 JSON 作为对象序列化之后的格式。
	
	5、其他的大概也差不多了。

作者:IT-风水师

链接:https://www.zhihu.com/question/25536695/answer/36197588

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


以上内容摘自: 知乎 远程过程调用协议RPC 主题


新工作一周,还是有工作干踏实。