RPC基础知识
1.1 RPC是什么?
Remote Procedure Call(RPC):远程过程调用。
过程是什么? 过程就是业务处理、计算任务,更直白理解,就是程序。(像调用本地方法一样调用远程的过程。)
RPC采用Client-Server结构,通过Request-Response消息模式实现。
RPC(Remote Procedure Call Protocol)远程过程调用协议。一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。
1.2 RPC的流程
- 客户端处理过程中调用Client stub(就像调用本地方法一样),传递参数;
- Client stub将参数编组为消息,然后通过系统调用向服务端发送消息;
- 客户端本地操作系统将消息从客户端机器发送到服务端机器;
- 服务端操作系统将接收到的数据包传递给Server stub;
- Server stub解组消息为参数;
- Server stub在调用服务端的过程,过程执行结果以反方向的相同步骤响应给客户端。
1.3 RPC流程中需要处理的问题
- Client stub、Server stub的开发;
- 参数如何编组为消息,以及解组消息;
- 消息如何发送;
- 过程结果如何表示、异常情况如何处理;
- 如何实现安全的访问控制。
1.4 RPC协议是什么?
RPC调用过程中需要将参数编组为消息进行发送,接受方需要解组消息为参数,过程处理结果同样需要经编组、解组。消息由哪些部分构成及消息的表示形式就构成了消息协议。
RPC调用过程中采用的消息协议称为RPC协议
RPC协议规定请求、响应消息的格式 在TCP(网络传输控制协议)上可选用或自定义消息协议来完成RPC消息交互 我们可以选用通用的标准协议(如:http、https),也也可根据自身的需要定义自己的消息协议。
1.5 RPC框架是什么?
封装好参数编组、消息解组、底层网络通信的RPC程序开发框架,带来的便捷是可以直接在其基础上只需要专注于过程代码编写。
Java领域:
-
传统的webservice框架:Apache CXF、Apache Axis2、Java自带的JAX-WS等。webservice框架大多基于标准的SOAP协议。
-
新兴的微服务框架:Dubbo、spring cloud、Apache Thrift等。
1.6为什么要用RPC
其实这是应用开发到一定的阶段的强烈需求驱动的。如果我们开发简单的单一应用,逻辑简单、用户不多、流量不大,那我们用不着。当我们的系统访问量增大、业务增多时,我们会发现一台单机运行此系统已经无法承受。此时,我们可以将业务拆分成几个互不关联的应用,分别部署在各自机器上,以划清逻辑并减小压力。此时,我们也可以不需要RPC,因为应用之间是互不关联的。
当我们的业务越来越多、应用也越来越多时,自然的,我们会发现有些功能已经不能简单划分开来或者划分不出来。此时,可以将公共业务逻辑抽离出来,将之组成独立的服务Service应用 。而原有的、新增的应用都可以与那些独立的Service应用 交互,以此来完成完整的业务功能。
所以此时,我们急需一种高效的应用程序之间的通讯手段来完成这种需求。
其实描述的场景也是服务化 、微服务和分布式系统架构的基础场景。即RPC框架就是实现以上结构的有力方式。