RPC(Remote Procedure Call,远程过程调用) 是一种进程间通信技术,它允许一个程序在另一个网络上的程序上执行某个函数或过程,而无需程序员显式地处理底层网络通信的细节。对于调用者来说,就像是在本地调用一个函数一样。
在 OceanBase 数据库 的上下文中,RPC 的作用和工作原理如下:
- 作用:
- 节点间通信:OceanBase 是一个分布式数据库,其数据分布在多个 OBServer 节点上。当一个 SQL 请求需要访问的数据不在当前节点时,该节点就需要通过 RPC 协议向持有目标数据的其他节点发起请求,获取数据或协调事务。
- 实现分布式一致性:OceanBase 使用 Paxos 协议来保证数据的高可用和强一致性。集群中的 Leader 和 Follower 节点之间大量的日志同步、心跳检测和选举操作都是通过 RPC 来完成的。
-
执行跨节点操作:如
UPDATE或DELETE语句如果影响了分布在不同节点上的多行数据,就会产生大量的 RPC 请求来协调这些操作(参考 UPDATE SQL 语句产生大量 RPC 请求问题分析的原因和解决方法)。
- 工作原理:
- 当客户端或一个 OBServer 节点需要调用远端服务时,会将调用的方法名、参数等信息序列化成一个消息包(packet)。
- 这个消息包通过网络发送给目标服务器(OBServer 节点)。
- 目标服务器接收到消息后,进行反序列化,然后执行对应的方法。
- 执行完成后,再将结果序列化并返回给调用方。
- 在 OceanBase 中,为了保证通信效率和安全性,RPC 框架有特定的限制和优化,例如:
- 存在
rpc_timeout系统参数来设置 RPC 请求的超时时间 (排查是否因时钟跳变导致 RS 失去心跳的方法)。 - 对单次传输的 packet 大小有限制,由租户配置项
max_allowed_packet控制,过大可能会导致-4119错误 (SQL 执行报错 -4119,RPC packet to send too long)。 - 提供了 RPC 连接认证 功能来提升安全性,确保只有经过认证的节点才能建立连接 (RPC 连接认证)。
- 存在
总而言之,在 OceanBase 中,RPC 是维系整个分布式系统正常运转的“神经系统”,负责所有节点间的指令传递、数据交换和状态同步。