- 多机分布式数据存储与RPC:
kv-thrift/
├── KVService.thrift # Thrift RPC接口定义
└── kv.thrift # 基础数据类型定义
- 数据的增加、修改和删除:
kv-server/src/main/java/com/kv/server/storage/
├── KVStorage.java # 存储接口定义
└── RocksDBStorage.java # 具体存储实现,包含增删改操作
- 多副本存储:
kv-server/src/main/java/com/kv/server/consensus/
├── RaftNode.java # Raft协议实现,处理副本同步
└── KVStateMachine.java # 状态机实现,确保多副本一致性
- 读写接口/检索界面:
kv-client/src/main/java/com/kv/client/
├── KVClient.java # 客户端API
└── KVCommandClient.java # 命令行交互界面
- 数据写入日志和一致性协议:
kv-server/src/main/java/com/kv/server/
├── consensus/RocksDBLogStore.java # 写入日志存储
└── consensus/RaftNode.java # Raft一致性协议实现
- 元数据管理:
kv-server/src/main/java/com/kv/server/meta/
├── MetadataManager.java # 元数据管理器
└── RouterManager.java # 路由管理
- Bloomfilter索引:
kv-server/src/main/java/com/kv/server/storage/
└── BloomFilterImpl.java # 布隆过滤器实现
- 数据分片:
kv-server/src/main/java/com/kv/server/meta/
└── ConsistentHash.java # 一致性哈希实现,用于数据分片
- 其他特性:
- 异常处理:
kv-common/src/main/java/com/kv/common/exception/
└── KVException.java
- 工具类:
kv-common/src/main/java/com/kv/common/utils/
├── NetworkUtil.java
├── SerializationUtil.java
└── SerializeUtil.java
基础模型定义:
kv-common/src/main/java/com/kv/common/model/
├── KeyValue.java # KV数据模型
├── Operation.java # 操作模型
└── StorageNode.java # 存储节点模型
项目由四个主要模块组成:
kv-store/
├── kv-common/ # 公共模块
├── kv-client/ # 客户端模块
├── kv-server/ # 服务端模块
└── kv-thrift/ # Thrift接口定义模块
公共模块,包含:
- 常量定义
- 异常处理
- 数据模型
- 存储接口
- 工具类
主要类:
- KVConstants: 常量定义
- KVException: 异常类
- KeyValue: 键值对模型
- Operation: 操作模型
- StorageNode: 存储节点模型
- BloomFilterService: 布隆过滤器服务
- KVStorage: 存储接口
客户端模块,包含:
- KVClient: 客户端核心类
- KVCommandClient: 命令行客户端
服务端模块,包含:
- consensus/: Raft共识实现
- RaftNode: Raft节点实现
- KVStateMachine: KV状态机
- RocksDBLogStore: RocksDB日志存储
- meta/: 元数据管理
- MetadataManager: 元数据管理器
- RouterManager: 路由管理
- ConsistentHash: 一致性哈希实现
- storage/: 存储实现
- RocksDBStorage: RocksDB存储实现
- BloomFilterImpl: 布隆过滤器实现
- KVServer: 服务器主类
Thrift接口定义,包含:
- KVService.thrift: KV服务接口定义
- kv.thrift: 基础类型定义
- Java环境
# 检查Java版本,需要JDK 8或以上
java -version
- Maven
# 检查Maven版本
mvn -version
- RocksDB
# Ubuntu/Debian
sudo apt-get install librocksdb-dev
# CentOS/RHEL
sudo yum install rocksdb-devel
# 在项目根目录执行
mvn clean package
mkdir -p config/node{1,2,3}
为每个节点创建配置文件 config/node[1-3]/server.properties:
# 节点ID
node.id=node1
# 集群节点配置
cluster.peers=node1:localhost:8001,node2:localhost:8002,node3:localhost:8003
# 存储配置
data.dir=data/node1
log.dir=logs/node1
# RocksDB配置
rocksdb.path=data/node1/rocksdb
# 线程池配置
thread.pool.min=4
thread.pool.max=32
# 网络配置
server.port=8001
server.host=localhost
# 创建数据目录
mkdir -p data/node{1,2,3}/rocksdb
# 创建日志目录
mkdir -p logs/node{1,2,3}
创建 bin/start-server.sh:
#!/bin/bash
if [ $# -ne 3 ]; then
echo "Usage: $0 <configPath> <port> <replicaCount>"
exit 1
fi
CONFIG_PATH=$1
PORT=$2
REPLICA_COUNT=$3
java -cp "lib/*" com.kv.server.KVServer $CONFIG_PATH $PORT $REPLICA_COUNT
创建 bin/start-client.sh:
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: $0 <host> <port>"
exit 1
fi
HOST=$1
PORT=$2
java -cp "lib/*" com.kv.client.KVCommandClient $HOST $PORT
- mvn clean package 执行成功
- 所有模块的target目录下有编译后的jar包
- 所有节点的配置文件已创建
- 配置文件中的端口未被占用
- 数据目录和日志目录已创建
- 目录具有正确的读写权限
- Java环境正确安装(JDK 8+)
- RocksDB正确安装
- 启动脚本具有执行权限
- 配置的端口未被占用
- 节点之间网络连通
- 主机名解析正确