REST与RPC比较与应用场景

1.1 REST与RPC概念

什么是REST

REST是一种架构风格,指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。REST规范把所有内容都视为资源,网络上一切皆资源。
REST并没有创造新的技术,组件或服务,只是使用Web的现有特征和能力。 可以完全通过HTTP协议实现,使用 HTTP 协议处理数据通信。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。

什么是RPC

Remote Procdeure Call,即远程过程调用,它是一种通过网络计算机程序请求,服务,而不需要了解底层网络实现的技术。

RPC框架结构图

落实到开发:调用的接口虽然不在本地,但是调用起来就和在本地一样。常见的HttpClient 就是它的一个具体实现。RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用。客户端通过网络通信将需要调用的接口信息(接口名,方法名,参数类型,参数)发送给服务端,服务端通过网络通信接受到信息之后,通过反射进行方法调用,将结果通过网络通信返回给客户端。常见的典型 rpc 框架有:阿里的 dubbo,还有Thrift、Hessian等等都是采用的rpc架构。

RPC框架要做到的最基本的三件事:

  • 1、服务端如何确定客户端要调用的函数

在远程调用中,客户端和服务端分别维护一个【ID=>函数】的对应表, ID在所有进程中都是唯一确定的。客户端在做远程过程调用时,附上这个ID,服务端通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。

  • 2、如何进行序列化和反序列化

客户端和服务端交互时将参数或结果转化为字节流在网络中传输,那么数据转化为字节流的或者将字节流转换成能读取的固定格式时就需要进行序列化和反序列化,序列化和反序列化的速度也会影响远程调用的效率。

  • 3、如何进行网络传输(选择何种网络协议)

多数RPC框架选择TCP作为传输协议,也有部分选择HTTP。如gRPC使用HTTP2。不同的协议各有利弊。TCP更加高效,而HTTP在实际应用中更加的灵活。

1.2 REST与RPC比较

都是网络交互的协议规范。通常用于多个微服务之间的通信协议。高与低是对实现两种规范框架的相对比较,但也不是绝对的,需要根据实际情况而定。

比较图

1.3 REST与RPC应用场景

REST和RPC都常用于微服务架构中。
1、HTTP相对更规范,更标准,更通用,无论哪种语言都支持http协议。如果你是对外开放API,例如开放平台,外部的编程语言多种多样,你无法拒绝对每种语言的支持,现在开源中间件,基本最先支持的几个协议都包含RESTful。
2、 RPC 框架作为架构微服务化的基础组件,它能大大降低架构微服务化的成本,提高调用方与服务提供方的研发效率,屏蔽跨进程调用函数(服务)的各类复杂细节。让调用方感觉就像调用本地函数一样调用远端函数、让服务提供方感觉就像实现一个本地函数一样来实现服务。

1.34最后建议

REST调用及测试都很方便,RPC就显得有点繁琐,但是RPC的效率是毋庸置疑的,所以建议在多系统之间的内部调用采用RPC。对外提供的服务,Rest更加合适。