• 注册
当前位置:1313e > 默认分类 >正文

RPC服务与HTTP服务的区别是什么

RPC服务与HTTP服务的区别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1、什么是RPC

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

RPC采用客户机/服务器(c/s)模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

2、OSI网络七层模型

在说RPC和HTTP的区别之前,我觉的有必要了解一下OSI的七层网络结构模型,它可以分为以下几层(自下而上):

RPC服务与HTTP服务的区别是什么

第一层:物理层。这一层主要就是传输这些二进制数据。

第二层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输;

第三层:网络层。定义网络设备间如何传输数据;

第四层:传输层。管理着网络中的端到端的数据传输;

第五层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断;

第六层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等;

第七层:应用层。定义了用于在网络中进行通信和传输数据的接口;

3、RPC调用流程

简单地说一下,一个完整的RPC架构里面包含了四个核心的组件,分别是Client ,Server,Client Stub以及Server Stub

1、 客户端(RPC Client):服务调用方

2、 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网络发送给服务方

3、 服务端存根(Server Stub):接受客户端发送过来的消息并解包,再调用本地服务

4、 服务端(RPC Server):真正的服务提供者。

RPC采用C/S模式,请求程序就是一个客户端应用,而服务提供者就是一个服务器。首先,服务消费者(RPC客户端应用)调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务提供方(RPC服务器端),进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,调用服务端方法对调用请求进行计算而得到计算结果,并发送答复信息,然后等待下一个调用信息;最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

4、RPC架构的作用

RPC 的主要目标是让构建分布式计算(应用)更容易、透明,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用。RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/JSON/二进制)和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。

5、常见RPC技术和框架

(1)、应用级的服务框架:阿里的Dubbo/Dubbox、Google GRPC、Spring Boot/Spring Cloud。

(2)、远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。

(3)、通信框架:MINA和Netty

6、HTTP服务 VS RPC服务

传输协议

RPC,可以基于TCP协议,也可以基于HTTP协议

HTTP,基于HTTP协议

传输效率

RPC,使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率

HTTP,如果是基于HTTP1.1的协议,请求中会包含很多无用的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为一个RPC来使用的,这时标准RPC框架更多的是服务治理

性能消耗,主要在于序列化和反序列化的耗时

RPC,可以基于thrift实现高效的二进制传输

HTTP,大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能

负载均衡

RPC,基本都自带了负载均衡策略

HTTP,需要配置Nginx,HAProxy来实现

服务治理(下游服务新增,重启,下线时如何不影响上游调用者)

RPC,能做到自动通知,不影响上游

HTTP,需要事先通知,修改Nginx/HAProxy配置

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或相关文章,请关注华纳云资讯频道,感谢您对华纳云的支持。

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录