有了HTTP,为什么还要RPC

有了HTTP,为什么还要RPC?

区别:RPC主要是基于TCP/IP协议,而Http服务主要是基于Http协议.

Http协议是在传输层协议Tcp之上的,RPC协议相对来说比较高点.

osi 网络的七层模型
在说RPC和HTTP的区别,我觉得要了解下OSI的七层网络协议

  • 第一层:应用层,定义了用于网络中进行通信和传输数据的接口.
  • 第二层:表示层,定义不同的系统中数据的传输格式,编码和解码等
  • 第三层:会话层:管理用户的会话,控制用户间逻辑链接的建立和中断
  • 第四层:传输层,管理着网络中的端到端的数据传输
  • 第五层:网络层,定义网洛设备间如何传输数据
  • 第六层:链路层,将上面的网络层的数据包封装成数据帧,便于物理层传输
  • 第七层:这层主要是传输这些二进制数据
    在这里插入图片描述在这里插入图片描述
    实际应用过程中,5层 协议结构里面没有表示层和会话层的,应该说他们和应用层合并了.
    我们应该将重点放在应用层和传输层两个层面,因为hTTP的应用层协议,而tcp是传输层协议.
    好,知道了网络的分层模型以后我们更好的理解为什么RPC服务相比HTTP服务 要Nice
    RPC 服务
    从三个角度来介绍RPC服务,分别是
    分别是:
  • Client
  • Servert
  • Client Stub
  • Server Stub (这个Stub大家可以理解为存根)
    在这里插入图片描述

分别说下这几个组件
客户端(Client),服务的调用方。
服务端(Server),真正的服务提供者。
客户端存根,存放服务端的地址消息,在将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
服务端存根,接受客户端发送过来的消息,将消息解包,并调用本地的方法。

      RPC主要是用 在大型的企业里面,因为大型的企业里面的系统繁多,业务线复杂,而且效率又是非常重要的一块,这个时候RPC的优势就很明显了,实际开发中是这么做的,项目一般使用Maven来管理。
       比如我们有个处理订单的系统服务,先声明它的所有接口(这里就是具体指java中的interface),然后将整个项目打包成一个jar包,服务 端这块引入整个第三方库,然后实现相应的功能,客户端这边也只需要引入整个第二方库即可调正。
       为什么这么做,主要是为了减少客户端这边的jar包大小,因为每一次打包发布的时候,jar包太多总是会影响效率,另外也是客户端和服务端解耦,提高代码的可移植性

同步调用与异步调用

 什么是同步调用?什么是异步调用?同步调用就是客户端等待调用执行完成并返回结果。

 1. 异步调用就是客户端不等待执行结果的完成,不过依然可以通过调用函数等接受返回结果的通知,如果客户端并不关心结果,则可以变成一个单向的调用。
 2.  这个过程有 点类似于java中的Callable和Runnable接口,我们进行异步执行的时候,如果需要指定结果,就可以使用callbale接口,并且可以通过Future类获得异步执行的结果信
 3.如果不关心执行的结果,执行使用Runnable接口就可以了,因为它返回结果,当然了,Callable也可以的,我们不去获取Future就可以了

流行的Rpc框架

  目前流行的开源框架RPC很多,下面主要介绍3种

  01:gRPC是最近开源软件,基于最新的Http2.0协议,并执行常见的众多编程语言。
  我们知道。
  我们知道 HTTP2.0是基于二进制的HTTP协议升级版,目前各大浏览器在快马加鞭的 支持,
  这个rpc框架是基于HTTP协议实现的,底层使用到了Netty框架的支持
 
  02:Thrift是FaceBook的 一个开源项目,主要是一个跨语言的服务开发框架,它有一个代码生成器来对它定义的IDL定义的文件自动生成服务代码框架。

  用户只要在其之前进行二次开发就行,对于底层的RPC通讯等都是透明的,不过这个对于用户来说的话需要学习特定领域的语言这个特性,还是有一定成本的。
   
   3:Dubbo是阿里集团开源的一个极为出名的项目,很多框架在互联网和企业用户种广为使用,协议和序列化框架都可以插拔是及有其特色的。

同样的远程接口时基于Java InTerface,并依托于Spring框架方便开发,可以方便的打包成一个文件,独立运行,和现在的微服务概念一致。

Http服务

   其实在很久以前,对于企业开发的模式一直定性为HTTP接口的开发,也就是我们常说的RestFul风格的服务接口
   的确,对于接口不对,系统于系统之间的交互较少的情况下,解决信息孤岛初期使用的一种通信手段,优点就是简单,直接,开发方便
   
    利用现成的Http协议进行传输,主要是进行接口的开发和请求,
   
    接口可能返回一个json,字符串,或者是xml文档,然后客户端在去处理返回的信息,从而可以比较快速的进行开发
  但是对于大型企业来说,内部系统比较多,接口非常多的情况下,RPC框架的好出就是显出出来的,首先是长链接,不必每次通信都像Http一样去3次握手什么的,减少了网络开销,
  其实就是Rpc框架一般都是注册中心,有丰富的监管管理;发布,下线接口,动态扩展等,对调用方来说,是无感知,统一化。

总结
RPC服务和HTTP服务还是存在很多不同的点的,一般来说,RPC服务针对大型的企业来说,而HTTP服务主要是针对小企业,而RPC效率更高,而Http服务开发迭代会更快。

 总之,选应什么样的框架不是按照市场上流行什么而决定的,而是要对整个项目进行完整地评估,从而在仔细比较两种开发框架对于整个项目的影响,最后在决定什么才是适合的项目。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值