根据维基百科的定义:远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议。该协议允许运
行于一台计算机的程序调用另一台计算机的子程序,而程序员无须额外地为这个交互作用编程。
通俗来讲,就是服务端实现了一个函数,客户端使用 RPC 框架提供的接口,调用这个函数的实现,并获取返回
值。RPC 屏蔽了底层的网络通信细节,使得开发人员无须关注网络编程的细节,而将更多的时间和精力放在业
务逻辑本身的实现上,从而提高开发效率。
RPC 的调用过程如下(图片来自 How RPC Works):
1. Client 通过本地调用,调用 Client Stub
2. Client Stub 将参数打包(也叫 Marshalling)成一个消息,然后发送这个消息
3. Client 所在的 OS 将消息发送给 Server
4. Server 端接收到消息后,将消息传递给 Server Stub
5. Server Stub 将消息解包(也叫 Unmarshalling)得到参数
6. Server Stub 调用服务端的子程序(函数),处理完后,将最终结果按照相反的步骤返回给 Client
Stub 负责调用参数和返回值的流化(serialization)、参数的打包解包,以及负责网络层的通信。Client 端
一般叫 Stub,Server 端一般叫 Skeleton。
REST vs RPC
在做 API 服务器开发时,很多人都会遇到这个问题 —— 选择 REST 还是 RPC。RPC 相比 REST 的优点主要有
3 点:
1. RPC+Protobuf 采用的是 TCP 做传输协议,REST 直接使用 HTTP 做应用层协议,这种区别导致 REST 在调
用性能上会比 RPC+Protobuf 低
2. RPC 不像 REST 那样,每一个操作都要抽象成对资源的增删改查,在实际开发中,有很多操作很难抽象成资
源,比如登录操作。所以在实际开发中并不能严格按照 REST 规范来写 API,RPC 就不存在这个问题
3. RPC 屏蔽网络细节、易用,和本地调用类似
这里的易用指的是调用方式上的易用性。在做 RPC 开发时,开发过程很烦琐,需要先写一个 DSL 描述文
件,然后用代码生成器生成各种语言代码,当描述文件有更改时,必须重新定义和编译,维护性差。
但是 REST 相较 RPC 也有很多优势:
1. 轻量级,简单易用,维护性和扩展性都比较好
评论0
最新资源