#dht #chord #replication #data #high #table #hash

bin+lib chord-dht

基于 Chord 的 DHT 实现的 Rust 工具,具有高性能和数据复制功能

1 个不稳定版本

0.1.0 2022年4月27日

#221数据库实现

AGPL-3.0

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