Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[OSPP] Pika 实现 Raft 集群 #1444

Closed
yaoyinnan opened this issue May 6, 2023 · 10 comments · Fixed by #1917
Closed

[OSPP] Pika 实现 Raft 集群 #1444

yaoyinnan opened this issue May 6, 2023 · 10 comments · Fixed by #1917
Labels
enhancement ospp https://summer-ospp.ac.cn/

Comments

@yaoyinnan
Copy link
Contributor

基本信息

项目难度:进阶
支持语言:中文/英文
项目社区导师:汤瑞麟
导师联系邮箱:tang.ruilin@foxmail.com
技术领域:C++、NoSQL
开源协议:BSDv3

项目简述

Pika 是一个持久化的海量存储服务,兼容绝大多数 Redis 接口,包括 string、hash、list、zset、set 和 management 接口。解决 Redis 由于存储数据量巨大而导致内存不够用的容量瓶颈,并且可以像 Redis 一样,通过 slaveof 命令进行主从备份,支持全同步和部分同步。Pika 还可以用在 twemproxy 或者 codis 中来实现静态数据分片。

当前 Pika 的主从同步方案是基于复制算法实现的。该方案中,主节点将自己的写操作记录到本地的内存中,并通过 Binlog 将操作记录复制到从节点进行同步。当前主从同步方案存在无法满足强一致性要求,并且故障恢复困难的问题。

本项目为了实现强一致性,使 Pika 成为 CP 系统,需要使用 Raft 共识算法实现 Raft 集群来改进 Pika 的主从同步方案。Raft 共识算法可以保证数据一致性和强一致性,并且具有自动故障转移的功能,从而提高了系统的可靠性和可用性。

本项目的主要工作:

  • 设计项目方案,并定期产出相关文档;
  • 学习 Raft 集群的 Leader 选举、日志复制、安全性、日志压缩等相关知识;
  • 调研并学习业内 Raft 库的使用,如 braft 等;
  • 使用 Raft 库为 Pika 实现 Raft 集群;
  • 重新设计 Pika 的核心数据结构,适配 Raft 接口;
  • 给用户提供选择,是否开启 Raft 集群模式,要求能实现 conf 变更;
  • 测试和验证,使用单元测试、集成测试、混沌测试、压力测试等方式测试 Raft 集群的性能和稳定性。

项目产出要求

  1. 设计项目方案,并定期产出相关文档;
  2. 使用 Raft 库为 Pika 实现 Raft 集群;
  3. 重新设计 Pika 的核心数据结构,适配 Raft 接口;
  4. 进行混沌测试等调试验证性能及稳定性;
  5. 能够通过 PR 形式提交代码并通过 Pika 社区审核后合并。

项目技术要求

  • 熟悉 C++
  • 熟悉 Redis/Pika 基本使用
  • 熟悉 Pika 或其他 KV 存储
  • 熟悉 Raft 或其他共识协议
  • 熟悉 WireShark 等网络抓包工具的使用,有定位分布式问题的能力
  • 了解混沌测试相关理论和混沌测试工具 chaos mesh、chaos balde 等
@yaoyinnan yaoyinnan added the ospp https://summer-ospp.ac.cn/ label May 6, 2023
@4kangjc
Copy link
Contributor

4kangjc commented May 6, 2023

Me

@We1less1111
Copy link

我想加入

@Joeyzsy
Copy link

Joeyzsy commented May 6, 2023

Wanna join 🙋‍♀️

@AlexStocks
Copy link
Collaborator

@ChanphongGu
Copy link
Contributor

I'm in!

@cubxxw
Copy link

cubxxw commented May 14, 2023

@yaoyinnan Is there more detailed documentation?

@yaoyinnan
Copy link
Contributor Author

yaoyinnan commented May 15, 2023

@yaoyinnan Is there more detailed documentation?

@cubxxw Thanks for your attention.
You can contact @Tangruilin to discuss the project proposal in more detail.

@AlexStocks
Copy link
Collaborator

AlexStocks commented Jul 7, 2023

    * 赖沐曦,braft,先把brpc替换掉,已经写了部分申请书,后面继续跟ruilin沟通
      * 0603 提交了申请书
    * 陆安璞,后面继续跟ruilin沟通
      * 0603 提交了申请书
      * ruilin 修改陆安璞的设计文档; laimuxi 已经给出设计文档
      * 0624陆安璞继续推进
      * 于雨: 高优先级,可以 2~3 个同学参加
      * 0701 陆安璞继续跟进设计方案
      * 0729 in mem的demo跑起来了,现在在处理持久log 
      * 0805 现在在处理snapshot了,log持久化我找到有个开源库里有实现,就先用的那个,snapshot处理完初版就差不多了
      * 0902 代码已提交,少一 review:

@yaoyinnan
Copy link
Contributor Author

20230710

  1. 安璞:bthread 和 pthread 的线程模型影响的问题困扰,考虑是否使用 braft。
  2. 瑞麟:询问 braft 交流群,看是否允许不是用 brpc 的时候使用 braft。
  3. 于雨:预计应该也就只有一些线程间共享数据的问题,应该并不会冲突。
  4. 少一:raft log 和 binlog 并不冲突。
  5. 胤楠:也可以先不考虑冲突问题,先引入 braft 在一个分支上实现着,毕竟现在也没有其他 raft 库可选。
  6. 结论:先询问一下 braft 交流群,同步开发着不要断。

@yaoyinnan
Copy link
Contributor Author

anpu:在写apply的逻辑,之后基本能走通流程

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement ospp https://summer-ospp.ac.cn/
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants