这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
在go框架三件套中提到了Kitex这个golang微服务RPC框架,不过没有怎么对RPC进行介绍,因此在课后查询了一些资料在此聊作补充。
有关RPC的概念
RPC指(Remote Procedure Call Protocol)远程过程调用协议,是一种在客户不需要了解底层网络技术(即技术实现细节)的情况下,就能通过网络从远程计算机程序上请求服务的协议。 在别人家好像在自家一样~
典型RPC实现有如:Dubbo、Thrift、GRPC
从中我们能看出RPC的一些特点:
1、不同于本地调用,远程调用需要通过网络作为媒介,因而RPC假定某些网络传输协议的存在(如TCP/IP)来为远程计算机程序通信传输信息。
2、远程计算机上的程序调用过程对客户端不透明,调用方并不关心信息怎么传输、使用什么协议、信息在远程计算机上被如何使用、远程计算机程序怎么计算处理并返回信息。调用方对这些过程一概不知,用户感知上类似于本地调用程序。
3、各服务器运行应用的一部分通过远程调用方法连接,可以给整个系统的处理能力带来巨大的提升。
RPC架构
四个核心组件:
stub可以理解为用于转换RPC过程中传递的参数问题的代码
客户端:
Client 服务调用方。
Client Stub 存放服务端的地址消息,将客户端的请求参数序列化为网络消息远程发送给服务端。
服务端:
Server 服务提供者。
Server Stub 接收客户端发送过来的消息,反序列化消息获取参数,并调用本地的方法。
RPC调用过程
client以本地调用方式(通过定义的接口)调用服务
client stub接收到调用后,将client的请求参数序列化
client通过sockets将消息发送到server
server stub将所得消息反序列化获取原始参数并调用本地服务
本地服务根据参数执行程序并将结果返回给server stub
server stub将获得的结果序列化
server通过sockets将消息发送到client stub
client stub接收到结果并反序列化
client得到最终结果。
序列化和反序列化即将原始信息->二进制信息->原始信息,在网络上传输的是二进制信息。