Skip to content

Latest commit

 

History

History
60 lines (52 loc) · 2.18 KB

readme_ch.md

File metadata and controls

60 lines (52 loc) · 2.18 KB

介绍

Klein是一个基于Paxos分布式共识类库,基于它实现了KV存储、缓存。

你可以独立部署Klein,像使用Redis一样使用它;但是仅仅是这样的话,也太没有新意了,它有趣的地方在于:Klein可以内嵌入你的项目中,你可以不依赖任何中间件,保证各个成员之间的数据一致。

基于此,你可以有无限多的想法,例如用Klein来实现KV存储,或者用它来实现分布式缓存,甚至用它来实现分布式锁,etc anything.

缓存/K-V存储

  • 最大存储的大小(LRU)
  • TTL自动过期

里程map

进度

paxos

  • 写请求、乱序协商,顺序确认
  • 读请求,使用协商log完成
  • 批量协商
  • 优化prepare阶段
  • 快照
  • 拆分Group,proposer等角色无须隔离,只需隔离instance
  • 增加Master:
    • 成员变更
    • master晋升应拥有最完整的数据(以提案协商选举master,如果成功晋升,那么在此之前的instance一定都apply了)
    • 数据对齐
      • Master心跳触发对齐
      • 快照同步(心跳携带checkpoint、learn消息返回checkpoint)
      • 新成员加入集群,主动向master学习
    • 优化读请求(写请求一定要复制到Master)
    • 优化写请求(写请求只能由Master执行,避免活锁)
  • 成员自动发现(调研)
  • 数据对齐:成员上线、落后成员对齐
  • NWR
  • confirm优化读请求
  • 不存在干扰key,无需执行一轮Prepare
  • Verified by jepsen

缓存

  • 读、写、等基础功能
  • 配合持久化实现LRU
  • TTL自动过期

待优化

  • LogManager行锁
  • 监控协商效率
  • 监控线程池指标(DefaultTimer, ThreadExecutor)
  • ProposalNo全局唯一

章解

Paxos

  • ProposalNo怎么生成?
  • 是否真的能支持并行协商?
  • 到底哪个提案会达成共识?
  • Confirm阶段(应用状态转移)是否真的可以异步执行?
  • 如何为一个运行的系统创建快照?
  • Group的拆分是否有必要完全隔离?
  • 优化Prepare阶段
  • 批量协商(队列),减少RPC交互