远程调用方式RPC和HTTP

远程调用方式

无论是微服务还是面向服务的架构(SOA),都面临着远程调用的问题。

常见的远程调用方式:

RPC:自定义数据格式基于原生TCP通信,速度快,效率高。早期的webservice,现在的dubbo都是RPC的典型。

HTTP:HTTP其实是一种网络传输协议,基于TCP,规定了数据传输格式。现在浏览器与服务端的通信基本都是采用HTTP,也可以远程调用,缺点就是消息封装臃肿。

什么是RPC?
是一个计算机通信协议。该协议允许一个计算机调用另一台计算机的服务。
两个程序之间通信,必须约定好数据传输格式。不然无法沟通,也就是需要约定好请求和响应的格式。数据再网络传输的过程中需要进行序列化,所以还需要约定统一的序列化方式。
PRC强调的是过程调用,用户不关心调用细节,就像调用本地服务一样调用远程服务。所以RPC要对过程调用进行封装。
远程调用方式RPC和HTTP
什么是HTTP?
HTTP协议:超文本传输协议,是一种应用层协议。规定了网络传输的请求格式、响应格式、资源定位和操作的方式等。但是底层采用什么网络传输协议,并没有规定,不过现在都是采用TCP协议作为底层传输协议。

RPC和HTTP的区别
首先,两者十分相似,有请求有响应。
不同:
RPC需要满足像调用本地服务一样调用远程服务,也就是对调用过程在API层面进行封装。
Http协议没有这样的要求,因此请求、响应等细节需要我们自己去实现。

优点
RPC更加透明,对用户方便。
HTTP方式更加灵活,没有规定API和语言,跨语言,跨平台。

缺点
RPC需要在API层面进行封装,限制了开发的语言环境。

选择
速度方面:RPC速度比HTTP快,底层都是TCP,HTTP消息往往比较臃肿,但是可以采用gzip压缩。
难度方面:RPC实现有点儿复杂,HTTP相对比较简单。
灵活性方面:HTTP更灵活,不需要关系实现的细节,可以跨平台,跨语言。

未来发展方向
微服务,强调独立,自治,灵活。RPC限制较多,因此微服务框架中,一般都会采用基于HTTP的rest风格服务。