Java进阶之RPC和REST的区别
目录
- 简单介绍
- 什么是REST?
- Java中常用的REST注解
- 什么是RPC?
- RPC框架包含4个核心的组件
- RPC框架要做到最基本的3件事情:
- RPC和REST比较
- 接口图标
- 性能比较如图
- REST和RPC应用场景
简单介绍
- 开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。定义于ISO/IEC 7498-1。
- OSI将计算机网络体系结构(architecture)划分为以下七层.
- OSI网络七层模型(开放式系统互联通信参考模型)
- 第7层:应用层。提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
- 第6层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等。
- 第5层:会话层。负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。
- 第4层:传输层。管理着网络中的端到端的数据传输,例如:传输控制协议(TCP)等。
- 第3层:网络层。定义网络设备间如何传输数据,网络表头包含了网络数据。例如:互联网协议(IP)等。
- 第2层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输;
- 第1层:物理层。这一层主要就是传输这些二进制数据,它负责管理计算机通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器等。
什么是REST?
- REST是一种架构风格,指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。REST规范把所有内容都视为资源,网络上一切皆资源。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
Java中常用的REST注解
-
@GetMapping
对应read操作 -
@PostMapping
对应update,delete操作 -
@DeleteMapping
对应delete操作 -
@PutMapping
对应update操作
什么是RPC?
- Remote Procedure Call,远程过程调用,就是像调用本地方法一样调用远程方法。
RPC框架包含4个核心的组件,分别是Client ,Server,Client Stub以及Server Stub,这个Stub大家可以理解为存根
- 客户端(Client),服务的调用方。
- 服务端(Server),真正的服务提供者。
- 客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
- 服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法
RPC框架要做到最基本的3件事情:
- 服务端如何确定客户端要调用的函数;
在远程调用中,客户端和服务端分别维护一个【ID->函数】的对应表, ID在所有进程中都是唯一确定的。客户端在做远程过程调用时,附上这个ID,服务端通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。 - 如何进行序列化和反序列化;
客户端和服务端交互时将参数或结果转化为字节流在网络中传输,那么数据转化为字节流的或者将字节流转换成能读取的固定格式时就需要进行序列化和反序列化,序列化和反序列化的速度也会影响远程调用的效率。 - 如何进行网络传输
多数RPC框架选择TCP作为传输协议,也有部分选择HTTP。如gRPC使用HTTP2。不同的协议各有利弊。TCP更加高效,而HTTP在实际应用中更加的灵活
RPC和REST比较
接口对比
- RPC主要的缺陷是服务提供方和调用方式之间的依赖太强,需要对每一个微服务进行接口的定义,并通过持续继承发布,严格版本控制才不会出现冲突。
- REST是轻量级的接口,服务的提供和调用不存在代码之间的耦合,只需要一个约定进行规范。
性能对比如图
RPC和REST比较图示.jpgREST和RPC应用场景
- 两者都同用于微服务架构中
- HTTP相对更规范,更标准,更通用,无论哪种语言都支持http协议。如果你是对外开放API,例如开放平台,外部的编程语言多种多样,你无法拒绝对每种语言的支持,现在开源中间件,基本最先支持的几个协议都包含RESTful。
- RPC 框架作为架构微服务化的基础组件,它能大大降低架构微服务化的成本,提高调用方与服务提供方的研发效率,屏蔽跨进程调用函数(服务)的各类复杂细节。让调用方感觉就像调用本地函数一样调用远端函数、让服务提供方感觉就像实现一个本地函数一样来实现服务
常见的RPC框架
- gRPC是Google最近公布的开源软件,基于最新的HTTP2.0协议,并支持常见的众多编程语言。 我们知道HTTP2.0是基于二进制的HTTP协议升级版本,目前各大浏览器都在快马加鞭的加以支持。 这个RPC框架是基于HTTP协议实现的,底层使用到了Netty框架的支持。
- Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架。它有一个代码生成器来对它所定义的IDL定义文件自动生成服务代码框架。用户只要在其之前进行二次开发就行,对于底层的RPC通讯等都是透明的。不过这个对于用户来说的话需要学习特定领域语言这个特性,还是有一定成本的。
- Dubbo是阿里集团开源的一个极为出名的RPC框架,在很多互联网公司和企业应用中广泛使用。协议和序列化框架都可以插拔是及其鲜明的特色。同样 的远程接口是基于Java Interface,并且依托于spring框架方便开发。可以方便的打包成单一文件,独立进程运行,和现在的微服务概念一致
网友评论