tomoya06 / web-developer-guidance

Actually it's just a notebook for keeping down some working experience.
4 stars 0 forks source link

Network - RPC #24

Open tomoya06 opened 3 years ago

tomoya06 commented 3 years ago

RPC

Remote Procedure Call Protocol aka. RPC aka. 远程过程调用协议

定义:一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员就像调用本地程序一样,无需关注细节。

WHY RPC?

根据RPC概念提出者的说法,RPC有以下特点:

  1. 简单:RPC 概念的语义十分清晰和简单,这样建立分布式计算就更容易。
  2. 高效:过程调用看起来十分简单而且高效。
  3. 通用:在单机计算中过程往往是不同算法部分间最重要的通信机制。

通俗一点说,就是一般程序员对于本地的过程调用很熟悉,那么我们把 RPC 作成和本地调用完全类似,那么就更容易被接受,使用起来毫无障碍。

RPC结构

本节参考博客

RPC的程序包括以下5个部分:

  1. User
  2. User-stub
  3. RPCRuntime
  4. Server-stub
  5. Server

关系如图:

image

流程如下:

  1. 这里 user 就是 client 端,当 user 想发起一个远程调用时,它实际是通过本地调用 user-stub。
  2. user-stub 负责将调用的接口、方法和参数通过约定的协议规范进行编码,并通过本地的 RPCRuntime 实例传输到远端的实例。
  3. 远端 RPCRuntime 实例收到请求后交给 server-stub 进行解码后发起本地端调用,调用结果再返回给 user 端。

RESTful / HTTP vs RPC

本节参考掘金博客

严格意义上两者并不在同一层级上,更有甚者,gRPC已经是建立在HTTP协议上实现的RPC框架。但两者都作为远程数据交互的实现协议,故经常一起对比。

接口调用通常包含两个部分:序列化协议和通信协议

通信协议

RESTful,全称 Representational State Transfer aka. 表述性状态传递,是一种软件架构风格,典型应用是HTTP,所以一般都认为RESTful就是HTTP协议。

RPC也是基于TCP/IP协议簇实现的通信协议。gRPC是基于HTTP2.0协议实现

序列化协议

序列化和反序列化更多介绍,参考美团技术博客

常用的序列化协议包括:json / xml / protobuf / thrift / bytes等

使用方法

面向对象

RESTful面向资源;RPC面向方法。