RPC服务治理

什么是RPC?

RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用。远程调用的应用场景极其广泛,实现的方式也各式各样。

过程是什么?

过程是业务处理、计算任务;更直接的理解:一段程序代码。

有什么重要特征?

像调用本地方法一样调用远程的过程。

远程调用原理

比如 A (client) 调用 B (server) 提供的 remoteAdd方法:

首先A与B之间建立一个TCP连接;

  1. A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去;
  2. B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用(可能是localAdd)并把结果30返回;
  3. A接受远程调用结果,输出30。

RPC框架是什么?

封装好了参数组、消息编解码、底层网络通信的远程过程调用的程序框架,可以直接在其基础上只需专注于我们的过程代码编写。

  • 传统的webService框架:Apache CXF、Apache Axis2、java自带的JAX-WS等等。webService框架大多基于标准的SOAP协议。
  • 新兴的微服务框架:Dubbo、Spring Cloud、Apache Thrift等等

通信协议

基于HTTP协议的,如:基于文本SOAP(XML), JSON, 二进制Hessian。

基于TCP协议,通常会借用Netty等高性能网络框架。

序列化/反序列化

只有二进制数据才能在网络中传输,将对象转换成二进制流的过程叫做序列化,将二进制流转换成对象的过程叫做反序列化。

RPC与REST有什么区别?

通过了解RPC后,我们知道是RPC是client/server模式的,调用远程的方法,REST也是我们熟悉的一套API调用协议方法,它也是基于client/server模式的,调用远程的方法的,那他俩又有啥区别呢?

REST 和 RPC 都是在 Server端, 把一个个函数封装成接口暴露出去,以供 Client端 调用,不过 REST 是基于HTTP协议的,REST致力于通过HTTP协议中的POST/GET等方法和一个可读性强的URL来提供一个HTTP请求。而 RPC 可以不基于 HTTP协议 ,因此用 RPC 可以获得更好的性能(省去了 HTTP header等一系列东西),应该也更容易配置。