首页 > 编程知识 正文

rpc和restful的区别面试(mvvm面试)

时间:2023-05-04 04:50:23 阅读:85851 作者:758

专注于Java领域的优秀技术,关注

关于RPC

首先要明白什么是RPC,为什么需要RPC。 RPC是指远程过程调用。 也就是说,两台服务器a、b、一个APP部署在a服务器上,如果想要调用b服务器上的APP提供的函数/方法,则由于不在一个存储器区域中,所以无法直接调用的意思和调用的数据

例如,一种方法可能定义如下。

员工名称(字符串全名) )。

那么,如下所示。

首先,要解决通信问题,主要通过在客户端和服务器之间建立TCP连接,由远程过程调用交换的所有数据都将在此连接中传输。 如果需要,可以连接连接,在调用结束后断开连接,也可以通过长连接使多个远程过程调用共享同一连接。 第二,解决寻址问题。 也就是说,可以告诉a服务器上的APP如何传递到底层RPC框架,如何连接到b服务器(如主机和IP地址)和特定端口,以及方法的名称是什么,然后完成调用。 例如,基于Web服务协议栈的RPC需要提供端点uri或从UDDI服务进行搜索。 对于RMI调用,还需要RMI Registry来注册服务的地址。 第三,当a服务器上的APP启动远程过程调用时,该方法的参数必须通过基本网络协议(如TCP )传递到b服务器。 因为网络协议是基于二进制的,所以存储器中的参数值是二进制格式,即串行化(Serialize )或分组(marshal ),通过寻址和传输串行化的二进制数据是b服务器第四,b服务器收到请求后,需要对参数进行反序列化(序列化的反操作),恢复为内存中的表示形式,是对应的方法)寻址的一部分),进行本地调用,得到返回值。 第五,返回值还发送到服务器a上的APP,然后串行化发送。 服务器a收到后,反转串行化,恢复为内存中的表示形式,传递给a服务器上的APP

(图片来源: https://www.cs.Rutgers.edu/~ pxk/417/notes/03-RPC.html )

为什么是RPC? 是指不同系统之间的通信或不同组织之间的通信等,不仅在一个进程内,而且在一台计算机内也不能在本地调用中进行的需求。 由于需要横向扩展计算能力,因此需要在由多台计算机组成的集群中部署APP。

RPC的协议有很多,包括最早期的CORBA、Java RMI、web服务的RPC样式、Hessian、Thrift、以及Rest API等。

关于Netty

中,Netty框架不限于RPC,大多作为HTTP等网络协议的安装框架使用。 由于RPC需要有效的网络通信,因此可以选择基于Netty。 除了网络通信外,RPC还需要相对高效的串行化框架和寻址方式。 对于具有会话(状态)的RPC呼叫,还需要会话和状态保持功能。

基本上,Netty提供了可以称为事件驱动型、责任链型、流水线的网络协议的实现方式。 网络协议包括许多层,由许多部分组成。 例如传输层协议、编码解密、压缩解压缩、认证、加密解密、请求的处理逻辑,如何能更好地复用、扩展,业界通用的方法就是责任链。

请求响应网络的交互通常包括两条从传输层通过认证、解密、日志、流控制等一系列步骤到达业务层的链,一条链在业务层返回后经过加密等一系列步骤

(图片来源:通道管线(以太网项目基准)3.2.6.最终) )

这样,每一层都有一个处理接口,可以执行不同的操作,如验证、解密、日志记录和流控制。 可以通过将不同的处理像积木一样对接来实现网络协议。 每个层都有自己的实现,上层不需要关注面向网络的操作(可维护)。 Netty已经提供了很多实现。

(图片来源: http://docs.JBoss.org/netty/3.1 /指南/html /体系结构. html )

当然,Netty有很多好处,包括在链上传输时最大限度地减少buffer的复制(高性能)等,以及对非阻塞io的支持。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。