RPC介绍
RPC(Remote Procedure Call,远程过程调用)是一种分布式计算通信模式,它允许一个程序调用另一个地址空间(通常是远程计算机上)的过程或函数,就像调用本地过程一样。RPC 的主要目标是隐藏分布式系统的底层通信细节,使分布式系统中的远程调用过程更像本地调用,从而简化分布式应用程序的开发。
以下是 RPC 的一些关键特点和组成部分:
抽象性:RPC 隐藏了网络通信的底层细节,使开发人员不必担心底层协议、数据序列化和网络连接管理。
远程对象:RPC 通常基于对象的概念,允许客户端调用远程服务器上的对象的方法。这些对象可以是本地代理,通过网络与远程对象通信。
协议和序列化:RPC 使用通信协议来定义通信双方的消息格式和通信规则。数据通常需要序列化为网络传输,以便在不同平台之间传递。
自动生成代码:许多 RPC 框架提供代码生成工具,可以根据定义的接口自动生成客户端和服务器端代码,简化开发。
异步和同步调用:RPC 框架通常支持同步和异步调用,允许客户端等待远程过程的返回结果,或者不等待并继续执行其他任务。
安全性:RPC 框架通常提供身份验证和授权机制,以确保只有经过授权的客户端可以访问远程服务。
一些流行的 RPC 框架和协议包括 gRPC、Apache Thrift、Java RMI、CORBA 等。它们为不同编程语言提供了分布式通信的标准化方式,使得不同平台上的应用程序可以相互通信。RPC 在构建微服务架构和分布式系统中发挥了关键作用。
一、RPC面临的问题
1、call_Id映射,如何确定函数的指定调用(传输的URL)
2、序列化和反序列化(编码和解码),网络传输只能传输二进制数据,
本地方法调用实际上压栈的过程,但是远程服务做不到本地压栈去实现了
3、网络传输(建立连接tcp/上层http协议)http协议有一个问题:不配置情况下是一次性的,对方返回结果连接断开,重连耗时,http2.0可以保持长连接比较高级、http协议1.x有性能问题,性能:可以直接选择tcp/udp协议去封装一层自己的应用层协议同http,没有通用性,因为要让别人学习
http1.0一次连接,重新连接性能消耗大,底层还是tcp
http2.0支持长连接
二、RPC客户端和服务端的主要流程
客户端:
1.建立连接tcp/http
2.将结构体对象序列化为json/protobuf-序列化
3、发送json序列化数据-调用成功之后实际接收到一个二进制的数据
4、等待服务器发送结果
5、将服务器返回的数据解析为响应结构体的对象-反序列化
服务端:
1、监听网络端口
2、读取数据-二进制的json数据
3、对数据进行反序列化结构体对象
4、开始处理逻辑业务
5.将处理的数据结果序列化为json二进制数据,序列化
6、将数据返回
序列化协议是可以选择的具有很多不同的序列化传输协议
三.RPC要素
4大要素:客户端、客户端存根、服务端、服务端存根
您提到的客户端、客户端存根、服务端和服务端存根是RPC开发中的四大要素,它们是RPC系统的关键组成部分:
-
客户端:客户端是发起RPC请求的一方,它需要调用远程服务的方法。客户端通常包括应用程序代码,用于构建请求并发送给远程服务。
-
客户端存根:客户端存根是客户端应用程序中的一部分,用于将本地方法调用转化为远程过程调用。它负责序列化方法参数、将请求发送到服务器,并等待响应。客户端存根还负责反序列化响应数据以供客户端使用。
-
服务端:服务端是提供RPC服务的一方,它包含了实际的业务逻辑和方法实现。服务端接收客户端的请求,执行相应的方法,并返回结果。
-
服务端存根:服务端存根是服务端应用程序中的一部分,用于接收来自客户端的请求,反序列化请求数据,然后调用本地服务的方法。它还负责序列化方法的响应数据并将其发送回客户端。
这四大要素协同工作,使得远程方法调用能够在分布式系统中顺利进行,同时隐藏了底层的网络通信细节,使开发人员可以像调用本地方法一样调用远程服务。
GO语言自带的RPC
Go语言中的Gob(Go binary)协议是一种用于编码和解码数据结构的二进制格式。它是Go语言的特有协议,用于在Go程序之间进行数据交换,通常用于Go程序之间的通信或数据持久化。以下是关于Gob协议的一些重要信息:
-
二进制格式:Gob协议使用二进制格式编码数据,与JSON或XML等文本格式不同。这使得它在编码和解码速度上具有优势。
-
Go语言特有:Gob协议是Go语言的特有协议,因此它最适合用于Go程序之间的通信。其他编程语言通常不支持Gob协议。
-
数据类型支持:Gob支持Go语言中的大多数数据类型,包括基本类型、自定义结构、数组、切片、映射和接口等。这使得它非常适合在Go应用程序之间传输复杂的数据结构。
-
自描述性:Gob数据包含类型信息,因此在解码数据时,接收方知道如何还原原始数据的结构,而无需额外的类型标签。
-
不适合跨语言通信:由于Gob是Go语言特有的,因此不适用于与其他编程语言进行跨语言通信。如果需要与其他编程语言进行通信,通常会选择使用更通用的格式,如JSON或Protocol Buffers。
总之,Gob协议是Go语言中的一种高效的二进制数据编码协议,适用于Go程序之间的通信和数据持久化。但要记住,它不适用于与其他编程语言进行通信,因为它是Go特有的。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。