rpc 和 http对比

管理员组 夜小白 4月前 62

rpc 和 http对比

RPC,远程过程调用,与HTTP最本会的区别为:

  • RPC主要是基于TCP/IP协议;
  • HTTP主要基于HTTP协议;
  • 由于HTTP协议是在传输协议TCP之上,所以就效率而言,RPC服务要比HTTP服务更快;

OSI网络七层模型

OSI的七层网络模型(实际应用中基本都是五层),从上而下可分为以下几层:

  • 第一层:
  • 应用层,定义了用于在网络中进行通信和传输数据的接口;
  • 第二层:
  • 表示层,定义不同的系统中数据的传输格式,编码和解码规范等;
  • 第三层:
  • 会话层,管理用户的会话,控制用户间逻辑连接的建立和中断;
  • 第四层:
  • 传输层,管理网络中的端到端的数据传输;
  • 第五层:
  • 网络层,定义网络设备间如何传输数据;
  • 第六层:
  • 链路层,将上面的网络层的数据包封装成数据帧,便于物理层传输;
  • 第七层:
  • 物理层,这一层主要就是传输这些二进制数据; 实际应用过程中,五层协议结构里面是没有表示层和会话层的。应该说它们和应用层合并了。我们应该将重点放在应用层和传输层这两个层面。因为HTTP是应用层协议,而TCP是传输层协议

    RPC架构

    一个完整的RPC架构里面包含了四个核心的组件,分别是Client ,Server,Client Stub以及Server Stub,这个Stub大家可以理解为存根。分别说说这几个组件:

  • 客户端(Client),服务的调用方。
  • 服务端(Server),真正的服务提供者。
  • 客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
  • 服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法。

RPC要解决的两个问题:

  • 解决分布式系统中,服务之间的调用问题。
  • 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑

以左边的Client端为例,Application就是rpc的调用方,Client Stub就是我们上面说到的代理对象,也就是那个看起来像是Calculator的实现类,其实内部是通过rpc方式来进行远程调用的代理对象,至于Client Run-time Library,则是实现远程调用的工具包,比如jdk的Socket,最后通过底层网络实现实现数据的传输。 这个过程中最重要的就是序列化和反序列化了,因为数据传输的数据包必须是二进制的,你直接丢一个Java对象过去,人家可不认识,你必须把Java对象序列化为二进制格式,传给Server端,Server端接收到之后,再反序列化为Java对象。

sugela 等1人收藏了本帖
最新回复 (0)
返回