over-golang/06-微服务/03-rpc-1-rpc简介.md
2021-07-02 18:11:59 +08:00

3.2 KiB
Raw Permalink Blame History

一 rpc概述

RPC即远程过程调用协议(Remote Procedure Call Protocol),是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

二 rpc执行过程

七层网络模型如下:

  • 第一层:应用层。定义了用于在网络中进行通信和传输数据的接口;
  • 第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等;
  • 第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断;
  • 第四层:传输层。管理着网络中的端到端的数据传输;
  • 第五层:网络层。定义网络设备间如何传输数据;
  • 第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输;
  • 第七层:物理层。这一层主要就是传输这些二进制数据

实际应用过程中,五层协议结构里面是没有表示层和会话层的。应该说它们和应用层合并了。

RPC与web请求类似都是客户端向远端服务器请求服务返回结果但是web请求使用的网络协议是http高层协议而rpc所使用的协议多为网络层的TCP协议减少了信息的包装加快了处理速度。

在OSI网络通信模型中RPC跨越了传输层和应用层使得开发包括网络分布式多程序在内的应用程序更加容易。运行时一次客户机对服务器的RPC调用步骤如下

  • 1 调用客户端句柄,传送参数
  • 2 调用本地系统内核发送网络消息
  • 3 消息传送到远程主机
  • 4 服务器句柄得到消息并得到参数
  • 5 执行远程过程
  • 6 返回执行结果给服务器句柄
  • 7 服务器句柄返回结果,调用远程系统内核
  • 8 消息传回本地主机
  • 9 客户句柄由内核接收消息
  • 10 客户接收句柄返回的数据

三 rpc架构

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

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

调用过程如图:

四 rpc的实现

常见的rpc实现有

  • go原生rpcgo的rpc包封装了rpc相关实现但Go的RPC它只支持Go开发的服务器与客户端之间的交互因为在内部它们采用了Gob来编码
  • grpcGoogle开源的rpc实现基于最新的HTTP2.0协议,并支持常见的众多编程语言
  • thriftFacebook开源的跨语言的服务开发框架它有一个代码生成器来对它所定义的IDL定义文件自动生成服务代码框架。用户只要在其之前进行二次开发就行对于底层的RPC通讯等都是透明的
  • dubbo阿里开源的rpc框架远程接口是基于Java Interface依托于spring框架可以方便的打包成单一文件独立进程运行和现在的微服务概念一致。
  • HSF淘宝系内部rpc框架