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