Skip to content

pika移除sharding模式方案设计及任务划分

chejinge edited this page May 22, 2023 · 38 revisions

背景

pika当前支持sharding模式和classic经典模式,但是当前的sharding模式一方面是性能跟不上,问题比较多,另外sharding模式的有,slot、partition、table等概念,非常混乱,我们打算删除sharding模式,用codis+classic模式实现分布式。 sharding模式的代码已经基本上删除完成,但是适配codis去做集群,需要删除classic经典模式下的table和partition的概念,具体的slot、partition、table之间的关系变化如下图所示:

原来的逻辑:
image

改动后的逻辑:

image

方案设计

本次主要是要删除sharding模式的代码,同时将classic模式下的table、partition概念去除掉,统一用db和slot。

主要拆分成2个部分

1.删除sharding模块的相关代码(该部分已经完成)

2.去除classic经典模块的table和partition概念,统一用db替代,classic经典模式下一个pika_server会启动一个db,对应五种类型的blackwidow。

主要涉及到的模块及文件主要有:

命令实现部分

管理类命令实现: pika_admin.h/cc

命令映射表实现: pika_command.h/cc

Geo命令实现 pika_geo.h/cc

pika_cmd_table_manager.h/.cc

数据结构实现部分

kv数据实现: pika_kv.h/cc

bitmap相关实现: pika_bit.h/cc

list数据结构实现: pika_list.h/cc

hash数据结构实现 pika_hash.h/cc

set数据结构实现 pika_set.h/cc

zset数据结构实现 pika_zset.h/cc

meta数据实现: pika_meta.h/pika_meta.cc

pika启动及配置部分

定义pika_server pika_server.h/cc

配置文件: pika_conf.h/cc

功能实现部分

pika_repl_client.cc/.h

pika_repl_server.cc/.h

pika_repl_bgworker.cc/.h

pika_rm.cc/.h

pika_consensus.cc/.h

pika_data_distribution.cc/.h

pika_stable_log.h/.cc

任务划分

任务划分

任务 负责人 预完成时间
命令实现部分
数据结构部分
启动及配置部分
功能实现部分

每个模块修改方案

命令实现部分

命令实现部分需要将原来命令中的传入参数partition的去除,改成不需要传递参数的方式: 例:

image

修改成为 image

数据结构实现部分

与命令实现部分的修改方法类似,将传入参数中的partition概念去掉,将调用处使用的partition换成db image

修改成为

image

函数实现部分 image 修改成为 image

pika启动及配置部分

这一部分相对前两部分的修改较为复杂,需要将

参考资料

1、xcache 实现:

https://github.com/XimalayaCloud/xcache

2.pika在2018年12月之前的pika代码是可以直接适配codis的,代码连接: https://github.com/OpenAtomFoundation/pika/tree/pika_codis