RPC/gRPC入门学习
一、RPC
1.1 RPC概念
RPC = Remote Procedure Call, 即远程过程调用,是一种构建分布式、基于客户端-服务器的协议。两个进程可以位于同一系统中,也可以位于不同的系统中,通过网络相互连接。
RPC使程序能向网络中另一台计算机上的软件请求服务,而无需了解网络的具体细节。
RPC允许开发人员使用函数调用的方式而非网络细节的方式,简化了网络的复杂性,从而促进了将软件分布在不同系统上的过程。
RPC的工作原理是允许一个程序(客户端)直接调用另一台机器(服务器)上的程序(函数)。客户端发出的程序调用看似是本地的,但实际上是在远程机器上运行的。当进行RPC调用时,调用参数会被打包并通过网络传输到服务器,服务器会解包这些参数,执行所需的程序,并将结果返回给客户端。
1.2 RPC工作过程
1.客户端调用客户端代理程序,并以常规方式传递参数,该客户端程序位于客户端自身地址空间中。
2.客户端代理会将参数封装到消息中。封装过程包括将参数的表示转换为标准格式,并将每一个参数复制到消息中。
3.客户端代理将消息传递到传输层,传输层再将该消息发送到远程服务器。在服务器端,传输层将消息传递给服务器代理,服务器代理会解包参数,并使用常规的调用机制调用所需的服务器例程。
4.当服务器程序执行完毕后,它会返回到服务器代理,然后由该代理将返回值整理成一条消息。
5.然后,服务器代理将消息传递给传输层。传输层将结果消息发送回客户端传输层,而客户端传输层再将该消息传递给客户端代理。
6.客户端代理会对返回参数进行解封装处理,并将执行结果返回给调用者。
二、gRPC
2.1 gRPC概念
在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似, gRPC也是基于以下理念:定义一个服务,指定其能够被远程调用的方法 (包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。
2.2 gRPC的优势
1.基于HTTP2长连接,创建高效、可靠的通信服务平台
HTTP/2的优势:
(1) 多路复用:引入帧和流的概念,在一个TCP连接中可以存在多条流,可以区分出多个request/response。下一个请求无需等待上一个响应返回即可发出。
(2) 服务器推送:减少了请求数量。服务端推送能把客户端所需要的资源伴随着请求页面一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度
(3) 二进制分帧
(4) 首部压缩:利用HPack实现头部压缩。HTTP/2可以维护一个字典,差量更新 HTTP 头部,大大降低因头部传输产生的流量。
gRPC则在此基础上进行了开发,具有连接池功能、健康状态管理、高效使用数据帧以及多路复用等特性。
2. 支持多种编程语言和平台
C, C++, Python, PHP, Nodejs, C#, Objective-C、Golang、Java
3.使用Protocol Buffers作为接口定义语言(IDL),避免了数据格式不一致的问题。