RPC

rpc是啥?

  作为好像是程序员的我,并不知道啥是rpc啊,看到一篇文章说程序员给他媳妇说什么是rpc,说是Remote Procedure Call,远程过程调用,然后我的反应是跟他媳妇一样,远程过程调用是啥?继续“相对于本地过程调用”,那本地过程调用是啥?悲剧的我。

  单体应用时,要调用Calculator的add方法来执行一个加运算,直接new一个CalculatorImpl,然后调用add方法就行了,这其实就是非常普通的本地函数调用,因为在同一个地址空间,或者说在同一块内存,所以通过方法栈和参数栈就可以实现。
  慢慢为了高可用高性能,将重复的业务抽离出去,单独放到一个服务里头,让别的服务去调用它,暴露restful接口供调用,需要http请求去调是http协议。而rpc是tcp协议。

RPC要解决的两个问题:

  1. 解决分布式系统中,服务之间的调用问题。
  2. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。
  看了一圈还是蒙的,没看明白啥是RPC。难道是通过socket方式进行调用,不用http么?以下是网上找到的说明,见https://www.cnblogs.com/swordfall/p/8683905.html

  (1) 客户端(client)以本地调用方式(即以接口的方式)调用服务;

  (2) 客户端存根(client stub)接收到调用后,负责将方法、参数等组装成能够进行网络传输的消息体(将消息体对象序列化为二进制);

  (3) 客户端通过sockets将消息发送到服务端;

  (4) 服务端存根( server stub)收到消息后进行解码(将消息对象反序列化);

  (5) 服务端存根( server stub)根据解码结果调用本地的服务;

  (6) 本地服务执行并将结果返回给服务端存根( server stub);

  (7) 服务端存根( server stub)将返回结果打包成消息(将结果消息对象序列化);

  (8) 服务端(server)通过sockets将消息发送到客户端;

  (9) 客户端存根(client stub)接收到结果消息,并进行解码(将结果消息发序列化);

  (10) 客户端(client)得到最终结果。

RPC的目标是要把2、3、4、7、8、9这些步骤都封装起来。

  那rpc和restful有啥区别呢?rpc是在传输层的TCP协议上,效率更快,不需要网络传输和3次握手等,适合大型企业;restful是在http协议上,应用层,适合小型企业,迭代快开发方便。

  简单的实现如:https://www.cnblogs.com/nele/p/7577178.html

posted @ 2020-01-16 17:11  lovebear  阅读(121)  评论(0编辑  收藏  举报