12 个版本

0.2.6 2024 年 6 月 27 日
0.1.5 2024 年 6 月 24 日
0.0.5 2024 年 6 月 19 日

#2170数据库接口

MIT/Apache

32KB
594

远程哈希表

使用 gRPC 实现的复制键值存储的分布式节点集群管理系统。

目录

特性

  • 分布式键值存储
  • 节点集群管理
  • 通过定期 ping 进行健康检查
  • 跨节点数据复制
  • 可配置的 ping 间隔
  • Docker 支持简化部署

架构

系统由两个主要组件组成

  1. 节点:能够存储键值对并响应 ping 请求的单个服务器。
  2. 节点组:节点集群的管理器,处理节点添加、检索和健康监控。

入门

先决条件

  • Rust(带有 Cargo 包管理器)
  • protoc(Protocol Buffers 编译器)用于 gRPC
  • Docker(可选,用于容器化部署)

安装

  1. 克隆仓库

     git clone https://github.com/kwdowicz/remote_hash_map.git
     cd remote_hash_map
    
  2. 构建项目

    cargo build --release
    

使用方法

运行节点组

启动节点组服务

./target/release/ng --listen 127.0.0.1:5000

运行单个节点

运行节点并将它们连接到节点组

./target/release/node --listen 127.0.0.1:6001 --ng 127.0.0.1:5000
./target/release/node --listen 127.0.0.1:6002 --ng 127.0.0.1:5000

使用客户端

  1. 创建新项目

     mkdir rhm_test && cd rhm_test
     cargo init
     cargo add remote_hash_map tokio
    
  2. 将以下内容添加到 src/main.rs

    use remote_hash_map::common::client::Client;
    
     #[tokio::main]
     async fn main() -> Result<(), Box<dyn std::error::Error>> {
     let mut client = Client::connect("127.0.0.1:5000").await?;
    
     client.set("name", "Daria").await?;
     client.set("name", "Tosia").await?;
     client.set("name", "Gabi").await?;
    
     let result = client.get("name").await?;
     println!("Name: {}", result);
    
     Ok(())
     }
    
  3. 运行客户端

  cargo run

使用 grpcurl 示例

grpcurl -plaintext -d '{"key": "name", "value": "Tas", "replication": true }' 127.0.0.1:5021 node_rpc.NodeRpc/Set
grpcurl -plaintext -d '{}' 127.0.0.1:5000 node_group_rpc.NodeGroupRpc/GetServer

Docker 支持

使用 Docker 构建 и 运行

docker build -t remote_hash_map .
docker network create --subnet=192.168.0.0/16 my_network
docker run --name ng --network my_network --ip 192.168.0.3 remote_hash_map ng
docker run --name node --network my_network --ip 192.168.0.4 -e NG_ADDRESS="192.168.0.3:5000" remote_hash_map node

配置

  • 可以为节点组配置 ping 间隔
    ./target/release/ng --listen 127.0.0.1:5000 --ping-sec 4
    

日志记录

项目使用 env_logger。设置 RUST_LOG 环境变量以设置不同的日志级别

RUST_LOG=debug ./target/release/node --listen 127.0.0.1:6001 --ng 127.0.0.1:5000

故障排除

  • 确保所有依赖项都已安装并正确配置。
  • 请检查指定的端口是否正在使用或被防火墙阻止。
  • 检查日志输出以查找错误或警告。

贡献

欢迎贡献!请提交拉取请求或创建一个问题来讨论拟议的更改或改进。

许可证

本项目采用 MIT 许可证。

依赖项

~7–14MB
~150K SLoC