1 个不稳定版本
0.1.0 | 2022年4月27日 |
---|
#221 在 数据库实现
34KB
899 行
chord-dht
基于 Chord 的 DHT(分布式哈希表)实现,具有高性能和数据复制功能。
它可以作为库或独立应用程序使用。
用法
库
作为客户端
use chord_dht::client::setup_client;
use tarpc::context;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// server address
let addr = "127.0.0.1:9800"
let client = setup_client(&addr).await?;
let ctx = context::current();
let key = "key".as_bytes();
let value = "value".as_bytes();
client.set_rpc(ctx, key.clone(), Some(value.clone())).await?;
let ret = client.get_rpc(ctx, key.clone()).await?;
assert_eq!(ret.unwrap(), value);
Ok(())
}
作为服务器
use chord_dht::core::{
Node,
NodeServer,
config::Config
};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let node = Node {
addr: "127.0.0.1:9800".to_string(),
id: 0
};
let mut server = NodeServer::new(node, Config::default());
let manager = server.start(None).await?;
// Wait for the server
manager.wait().await?;
Ok(())
}
独立应用程序
启动服务器
cargo run -- chord-dht-server <bind_addr> [--join <addr>]
启动客户端
cargo run -- chord-dht-client <server_addr>
> set key value
> get key
value
基于 Chord 的功能
- 内存中的键值存储
- 数据复制
- 容错性
内存中的键值 DHT 旨在高效存储临时数据(例如用户令牌)。
待办事项
- 节点关闭或加入环时转移现有键
- 允许节点离开
许可证
根据 AGPLv3 许可证授权。
依赖关系
~14–26MB
~347K SLoC