Tendis is a high-performance distributed storage system fully compatible with the Redis protocol.
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 个月前 | ||
| 11 个月前 | ||
| 11 个月前 | ||
| 10 个月前 | ||
| 5 年前 | ||
| 2 个月前 | ||
| 10 个月前 | ||
| 1 年前 | ||
| 2 年前 | ||
| 1 年前 | ||
| 4 年前 | ||
| 2 个月前 | ||
| 5 年前 | ||
| 1 年前 | ||
| 5 个月前 | ||
| 5 个月前 | ||
| 11 个月前 | ||
| 5 个月前 | ||
| 1 年前 | ||
| 5 年前 | ||
| 5 年前 | ||
| 4 年前 |
Tendis 是一款高性能的分布式存储系统,完全兼容 Redis 协议。中文文档
目录
简介
Tendis 是一款高性能的分布式存储系统,完全兼容 Redis 协议。它采用 RocksDB 作为存储引擎,所有数据通过 RocksDB 持久化到磁盘。用户可以直接使用 Redis 客户端访问 Tendis,应用几乎无需修改。此外,Tendis 支持远超内存的存储容量,能显著降低用户的存储成本。
与 Redis 集群类似,Tendis 采用去中心化的分布式方案。节点间通过 gossip 协议进行通信,用户访问集群中任意节点都能路由到正确的目标节点。集群节点支持自动发现其他节点、检测故障节点,并在主节点发生故障时确保应用几乎不受影响。
特性
-
Redis 兼容性
Tendis 支持的 Redis 协议和命令与 Redis 保持兼容。
-
持久化存储
采用 RocksDB 作为存储引擎。所有数据以特定格式存储在 RocksDB 中,支持 PB 级存储容量。
-
去中心化分布式集群
实现方式类似 Redis 集群,节点间通过 gossip 协议进行通信。
-
水平扩展能力
支持节点间数据在线迁移。高性能且线性扩展,可扩展至 1000 个节点。
-
故障自动转移
自动检测故障节点,并在发生故障时将从节点提升为主节点。
-
Tendis 混合存储版的核心组件
得益于其设计和内部优化,Redis 与 Tendis 可协同工作形成混合存储版。该版本适用于 KV 存储场景,能够平衡性能与成本,在冷数据占比较大的场景中,可将业务运营成本大幅降低 80%。
快速开始
环境要求
- g++(C++17 要求,版本 >= 5.5)
- cmake(版本 >= 3.13.0)
构建
$ git clone https://github.com/Tencent/tendis.git --recursive
$ git submodule update --init --recursive
$ mkdir build
$ cd build & cmake ..
$ make -j12
运行与体验
$ ./build/bin/tendisplus tendisplus.conf
通过 redis-cli 连接服务器
$ redis-cli -p 51002
测试
您可以对代码进行一些修改,并确保以下测试脚本能够通过。
$ sh ./testall.sh
性能
硬件规格
CPU:2.50 GHz,48 core
DISK:NVMe SSD
MEM:192GB
基准测试与 QPS 数据
tendisplus:工作线程数 = 56
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="set __key__ __data__" --key-prefix="kv_" --key-minimum=1 --key-maximum=500000000 --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="get __key__" --key-prefix="kv_" --key-minimum=1 --key-maximum=500000000 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="incr __key__" --key-prefix="int_" --key-minimum=1 --key-maximum=1000000 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="lpush __key__ __data__" --key-prefix="list_" --key-minimum=1 --key-maximum=1000000 --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="sadd __key__ __data__" --key-prefix="set_" --key-minimum=1 --key-maximum=1000000 --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="zadd __key__ __key__ __data__" --key-prefix="" --key-minimum=1 --key-maximum=1000000 --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="hset __key__ __data__ __data__" --key-prefix="hash_" --key-minimum=1 --key-maximum=1000000 --random-data --data-size=128 --test-time=1800

延迟:
SET 1.6ms 99%
SET 2.2ms 99.9%
SET 6.9ms 99.99%
SET 9.4ms 100.00%
不同负载下的 QPS
tendisplus:工作线程数 = 56
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="set __key__ __data__" --key-prefix="kv_" --command-key-pattern=R --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="get __key__" --key-prefix="kv_" --command-key-pattern=R --test-time=1800

我们先测试 set 操作半小时,再测试 get key 操作半小时。由于数据量不大,大部分数据都在内存中,因此不同 payload 下的 get qps 几乎相同。
贡献
有关提交 issue 或 pull request 的更多信息,请查看 CONTRIBUTING
支持
查看 support 获取常见问题解答,或加入我们的讨论组。
许可
Tendis 采用 GNU General Public License Version 3.0 许可。版权和许可信息可在文件 LICENSE.txt 中找到。
本仓库中与腾讯代码相关的版权声明此前以“THL A29 Limited”名义发布。该实体现已注销。对于之前分发的所有代码副本,您应将其版权声明视为以“腾讯”名义发布。