TinyKv介绍

简介: TinyKv介绍


前言

  开一个新坑,将tinykv的4个project全部实现。虽然今天我点进去看的时候就萌生退意。好在没有放弃之前,把project1完成了,这让我跃跃欲试挑战后面的project。。。。。。

  打算后续将每个project的解决思路写出来,下面介绍一下tinykv这个项目。我的地址是git tinykv master,如果遇到不会的希望可以给读者提供一些思路。

tinykv

  TinyKV 使用 Raft 共识算法构建 key-value 存储系统。它的灵感来自MIT 6.824和TiKV 项目。

  完成本项目后,您将具备实施具有分布式事务支持的水平可扩展、高可用性、键值存储服务的知识。此外,您将对 TiKV 架构和实现有更好的了解。

  • project1是构建一个单机kv server
  • project2是基于raft算法实现分布式键值数据库服务端
  • project3是在project2的基础上支持多个raft集群
  • project4是在project3的基础上支持分布式事务

架构

  整个项目一开始就是一个key-value server和一个scheduler server的骨架代码——需要一步步完成核心逻辑:

  • project1:Standalone KV
  • 实现一个独立的存储引擎。
  • 实现原始键值服务处理程序。
  • project2:Raft KV
  • 实现基本的 Raft 算法。
  • 在 Raft 之上构建一个容错的 KV 服务器。
  • 增加对 Raft 日志垃圾回收和快照的支持。
  • project3:Multi-raft KV
  • 对 Raft 算法实施成员变更和领导层变更。
  • 在 Raft 存储上实现 conf 更改和区域拆分。
  • 实现一个基本的调度器。
  • project4:Transaction
  • 实现多版本并发控制层。
  • 实现KvGet、KvPrewrite和KvCommit请求的处理程序。
  • 实现KvScan、KvCheckTxnStatus、KvBatchRollback和KvResolveLock 请求的处理程序。

代码结构

  类似于 TiDB + TiKV + PD 的存储和计算分离的架构,TinyKV 只关注分布式数据库系统的存储层。如果您也对 SQL 层感兴趣,请参阅TinySQL。除此之外,还有一个名为 TinyScheduler 的组件作为整个 TinyKV 集群的中心控制,从 TinyKV 的心跳中收集信息。之后,TinyScheduler 可以生成调度任务并将任务分发给 TinyKV 实例。所有实例都通过 RPC 进行通信。

整个项目被组织到以下目录中:

  • kv包含键值存储的实现。
  • raft包含 Raft 共识算法的实现。
  • scheduler包含 TinyScheduler 的实现,负责管理 TinyKV 节点和生成时间戳。
  • proto包含节点和进程之间的所有通信的实现,使用基于 gRPC 的协议缓冲区。这个包包含了 TinyKV 使用的协议定义,以及生成的你可以使用的 Go 代码。
  • log包含根据级别输出日志的实用程序。

如何去写

  tinykv提供了非常多的单元测试,通过MakeFile来验证我们写的代码

git clone https://github.com/tidb-incubator/tinykv.git
cd tinykv
make
# 例:我们project1写好后 通过单元测试验证是否正确实现
make project1

  那么我们如何去写呢?其实tinykv早已经准备好了,已project1举例。可以看到下面都有提示,我们需要通过分析源码,进行填空即可。

type StandAloneStorage struct {
  // Your Data Here (1).
}
func NewStandAloneStorage(conf *config.Config) *StandAloneStorage {
  // Your Code Here (1).
}
func (s *StandAloneStorage) Start() error {
  // Your Code Here (1).
}
func (s *StandAloneStorage) Stop() error {
  // Your Code Here (1).
}
func (s *StandAloneStorage) Reader(ctx *kvrpcpb.Context) (storage.StorageReader, error) {
  // Your Code Here (1).
}
func (s *StandAloneStorage) Write(ctx *kvrpcpb.Context, batch []storage.Modify) error {
  // Your Code Here (1).
}

  对于每个project,都会有一篇markdown文档进行简单的介绍,和一些提示。所以仅有的这几篇文档,要仔细阅读才行!

TinyKv参考内容

//待补充

目录
相关文章
|
存储 缓存 弹性计算
阿里巴巴开源 容器镜像加速技术DADI 上手指南
阿里资深技术专家在阿里云开发者社区特别栏目《周二开源日》直播中,介绍刚于3月份开源的容器镜像加速器项目 DADI ,并带大家快速上手使用。本文为直播内容文字整理,看直播回放,请点击文首链接~
阿里巴巴开源 容器镜像加速技术DADI 上手指南
|
消息中间件 Java 中间件
秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。接下来我就将从零开始介绍什么是消息队列?消息队列的应用场景?如何进行选型?如何在Spring Boot项目中整合集成消息队列。
25948 10
秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
|
存储 SQL 缓存
Hadoop入门(一篇就够了)
Hadoop入门(一篇就够了)
34280 4
Hadoop入门(一篇就够了)
|
消息中间件 Java Apache
STOMP协议详解
STOMP协议详解 一、STOMP协议介绍 STOMP即Simple (or Streaming) Text Orientated Messaging Protocol,简单(流)文本定向消息协议,它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。
7503 0
|
3月前
|
人工智能 调度 开发工具
MemOS 正式上线魔搭社区 MCP 广场,让你的智能体拥有「长期记忆」
MemOS 正式上线魔搭社区 MCP 广场,作为首个大模型记忆操作系统,支持标准化记忆读写,7天调用量超14.9万次。开发者可一键集成,让AI具备持久化、可调度的记忆能力,实现连续思考与长期进化。
592 3
|
负载均衡 监控 算法
【阿里二面面试题】说说你对 Raft 算法的理解?
【阿里二面面试题】说说你对 Raft 算法的理解?
1317 0
【阿里二面面试题】说说你对 Raft 算法的理解?
|
运维 负载均衡 算法
“分布式基础概念”全面解析,让你秒懂分布式系统!【一】
该博客文章全面解析了分布式系统的基础概念,包括微服务架构、集群与分布式的区别、节点定义、远程调用、负载均衡、服务注册与发现、配置中心、服务熔断与降级以及API网关,帮助读者快速理解分布式系统的关键组成部分和工作原理。
“分布式基础概念”全面解析,让你秒懂分布式系统!【一】
|
消息中间件 中间件 Kafka
分布式事务最全详解 ,看这篇就够了!
本文详解分布式事务的一致性及实战解决方案,包括CAP理论、BASE理论及2PC、TCC、消息队列等常见方案,助你深入理解分布式系统的核心技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
分布式事务最全详解 ,看这篇就够了!
|
机器学习/深度学习 并行计算 PyTorch
从零开始下载torch+cu(无痛版)
这篇文章提供了一个详细的无痛版教程,指导如何从零开始下载并配置支持CUDA的PyTorch GPU版本,包括查看Cuda版本、在官网检索下载包名、下载指定的torch、torchvision、torchaudio库,并在深度学习环境中安装和测试是否成功。
从零开始下载torch+cu(无痛版)