干货丨KingbaseES中的RPC介绍

互联网的发展,应用的规模不断扩大,导致各行业对于数据库处理能力需求不断增长,数据库横向扩展需求以及频繁的跨节点操作需求随之提升,用户对于数据库RPC能力提出较高要求。那么,RPC是什么?RPC能够解决什么问题?本篇将以KingbaseES中的RPC为例向大家进行系统介绍。

RPC是什么

RPC是远程过程调用(Remote Procedure Call)的缩写,论文《Implementing remote procedure calls》最早提出了RPC的概念。RPC提供了完成远程调用的能力而且不损失本地调用的语义。

图片经典的RPC过程

KingbaseES在各类集群架构中都需要跨节点的操作,KingbaseES实现了RPC能力以便这些需要跨节点操作可以被更简单的实现。

RPC解决的问题

为了透明的实现远程调用,RPC需要解决以下问题:

1.client如何从server端获取可用的接口列表

不同于各类RPC框架,KingbaseES的RPC只用于产品内部,原则上可以在编译时导出列表。但KingbaseES的集群部署中需要在升级时保持节点间的互操作性以支持滚动升级,所以也支持了动态获取接口列表并支持向前兼容。

2.client和server端的连接建立

由于只需支持节点间的连接,目前选择在部署自动生成节点间的连接配置。

3.传输协议选择

选择还是基于开发的便利性,基于KingbaseES本身使用了TCP/IP协议的原生接口,可以基于已有的代码简单封装。

4.调用的参数传输

a)参数序列化

KingbaseES提供各类基础数据类型的参数传输,包括传值参数(定长数据类型)和引用参数(指针+长度的形式)。

b)在支持跨平台部署的产品中,处理不同字节序主机间的参数传输

目前的RPC支持了定长类型的字节序透明处理。

5.通信连接模型选择

a)一进程一连接

每个client进程独占一个到server进程的连接。这种模型优点是独占连接可以保证每个client的请求不互相影响可以及时处理,缺点是在连接规模增加时,进程的上下文切换会越来越频繁,性能损耗大。

数据库经常会处理高并发,保有千级别的活动连接,在集群架构下这种模型的连接数也会随着节点数增加而增长,造成巨大的性能损耗。

图片

b)多进程一连接

A模型的优化版本,为了减少连接数,多个client进程连接到本节点的一个通信进程,通信进程连接到一个server进程。server进程根据会循环接收报文,然后根据收到的报文进程内调用过程的handler。这种模型优化了连接数,但单个server进程处理请求上容易发生瓶颈,一个请求的响应时间超长就会阻塞全部请求。

图片

c)多进程多连接

B模型的优化版本,通过增加通信进程数量增加吞吐量。

图片

基于KingbaseES集群目前支持的节点数量和每个节点的连接数,RPC实现选择了模型C。大部分的RPC处理都是延迟很小的操作,不会出现对于单个调用阻塞一个连接的情况,对于少数需要I/O或封锁等待的操作,选择在Server端实现异步调用避免等待。

6.RPC和本地调用的语义差异

RPC故障情况下的语义和本地调用不同,KingbaseES选择了如下的RPC语义

a)本发送成功前的错误按调用错误处理

b)发送后有返回的情况下,返回值正确描述server端执行的结果

c)发送后网络超时或错误时, 支持重试直到收到节点变更通知或完成重试,完成至少一次的调用语义。client需要根据调用的幂等性选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值