这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天,本次对于REST和RPC的差别和应用有了简单学习和了解,并对于RPC的实现也有了初步认识。
主要是根据作者的这篇博客对RPC和REST的区别进行了一些大概的了解。
在单体应用中,各模块间的调用是通过编程语言级别的方法函数来实现,但分布式系统运行在多台机器上,一般来说,每个服务实例都是一个进程,服务间必须使用进程间通信机制来交互,常见的通信协议主要有RPC和REST协议。
REST协议:
基于http实现,使用http协议处理数据通信,无论那种语言偶读支持http协议。(常见的http api都可以称为rest接口),rest是一种架构风格,(是一组架构约束和原则),满足rest原则的应用程序或设计就是restful。
rest强调组件交互的扩展性、接口的通用性、组件的独立部署、以及减少交互延迟的中间件,强化了安全,也能封装遗留系统。
RPC协议:
是一种进程间通信方式,允许像调用本地服务一样调用远程服务,通信协议大多采用二进制方式。
RPC与REST对比:
传输协议与性能:RPC的传输协议灵活,可基于TCP实现。TCP协议处于协议栈的下层,能够更灵活地对协议字段进行定制,让请求报文体积更小,减少网络开销,提高传输性能并缩短传输耗时,实现更大的吞吐量和并发数。REST的http协议是上层协议,发送包含同等内容的信息,请求中会包含很多无用的内容,所占用的字节数比使用TCP协议传输更高。因此在同等网络下,http会比基于tcp协议的数据传输效率要低,传输耗时更长,另外,rest的http大部分是通过json实现,序列化更消耗性能。
灵活性、开放性与通用性:rest通过http实现,相对更加规范与通用,rest的调用和测试都很方便,rpc则由很多约束。
使用场景:rest主要用于对外开放的异构环境,也主要用于公司内部的服务调用,性能消耗低,传输效率高。
RPC框架:
由RPC框架负责屏蔽底层的序列化、传输方式和通信的细节,开发者在使用时只需了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。