Skip to content

panzg123/MouseKV

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MouseKV

oh, something cool. just for fun

base from OneValue

项目简介:

  1. 多线程Reactor模型,主线程监听连接请求,8子线程处理收发包和业务逻辑,底层配置多个LevelDb构成LevelDbCluster
  2. 支持主从同步,Binlog实现机制
  3. Redis客户端协议,可复用redis-cli

图解

SVR UML简介

Image text

关键类:

  • Mouse:继承于Server,服务的主体类,启动函数runMouseSvr,读取配置文件、初始化CmdTableLeveldbClusterEventLoopThreadPoolSyncThread
  • CmdTable: 管理端CMD到Handle的映射,如GET/SET/DEL/SYNC/COPY
  • LeveldbCluster:管理端多个LevelDb,封装GET/SET/DEL,同步写BinLog
  • EventLoopThreadPool:线程池,Mouse监听到客户端连接后,将fd注册到某个thread的event_loop中,创建Context,监听client读写事件
  • Contextredis-cli的上下文信息,包含server指针、io bufevent_loop指针
  • SyncThread:从节点用于从主节点同步数据的线程
  • DbCopyThread: 用于节点A拷贝数据给节点B,遍历整个LevelDbCluster

BinLog机制

关键类:

  • LogItem 一条日志信息
  • BinLog 单个日志文件
  • BinlogFileList 日志文件列表类
  • BinlogSyncStream 主从同步时的一条数据流
  • BinlogBufferReader 主节点读取binLog记录类
  • SyncThread 为Slave节点的同步线程,向Master节点发送__SYNC命令,然后接收数据写存储
  • DbCopyThread 当A节点收到B节点__COPY命令时,在后台启动Copy线程,伪装客户端建立同节点B的链接,然后遍历LevelDB,将数据同步到节点B中

单条操作binLog日志信息,LogItem示意图如下,存储于binlog目录下多个文件,binlog文件的索引存在于BINLOG_INDEX;Slave节点的 同步偏移信息存储于MASTER_INFO文件中。

Image text

TODO

  • Log
  • levelDb
  • binlog
  • master-slave
  • restful api
  • multi work process
  • support cas
  • support set,list,hash

ChangeLog

20180714 Tag1.0 单线程done,默认配置8个leveldb

20200329 Tag2.0 多线程+Binlog主从同步 done

BenchMark

ubuntu@VM-0-3-ubuntu:~/tool/redis-4.0.0/src$ ./redis-benchmark -h localhost -p 10086 -t set,get -c 10 -n 10000 -q
SET: 14306.15 requests per second
GET: 18315.02 requests per second

作为对比,redis4.0 benchmark信息

ubuntu@VM-0-8-ubuntu:~/github/redis-4.0.10/src$ ./redis-benchmark -h localhost -t set,get -c 10 -n 10000 -q
SET: 52356.02 requests per second
GET: 51282.05 requests per second

Environment

腾讯云 1核 1GB 2Mbps

About

多线程Reactor+LevelDB模拟的简单KV存储服务

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages