一、腾讯Tendis简介
Tendis存储版是腾讯互娱CROS DBA团队 & 腾讯云数据库团队 自主设计和研发的开源分布式高性能KV存储。Tendis存储版完全兼容redis协议,并使用rocksdb作为存储引擎。用户可以通过redis client访问Tendis存储版,几乎不用修改代码。同时,Tendis存储版支持远超内存的磁盘容量,可以大大降低用户的存储成本。
类似于Redis Cluster, Tendis存储版使用去中心化的集群管理架构。数据节点之间通过gossip协议通讯,用户访问集群中的任意数据节,请求都能路由到正确的节点。并且集群节点支持自动发现、故障探测、自动故障切换、数据搬迁等能力,极大降低运维成本。
注意:部分Redis的命令是支持的
二、安装Tendis
官网文档地址:http://tendis.cn ;我们直接在tendis的github仓库 上下载已经编译好的安装包。
- 解压
tar zxvf tendisplus-2.1.2-rocksdb-v5.13.4.tgz
- 修改配置
进入解压后的目录中,修改配置文件scripts/tendisplus.conf
;在里面添加一行bind 服务器的IP
;之后将里面路径相关改为你想要的; 注意catalog这个目录需要你手动创建,否则将启动失败; 比如: mkdir -p /home/tendis/db/catalog
;如果启动失败可以到日志文件里面去查看失败原因。
# tendisplus configuration for testing
port 51002
loglevel notice
logdir /home/tendis/log
dumpdir /home/tendis/dump
dir /home/tendis/db
pidfile /home/tendis/tendisplus.pid
slowlog /home/tendis/log/slowlog
rocks.blockcachemb 4096
executorThreadNum 48
bind 192.168.1.6
- 启动
bin/tendisplus scripts/tendisplus.conf
三、使用
原来使用redis项目的代码无需更改,只需要修改redis的连接地址和端口号即可,其他无需改变。 注意如果原来的项目中使用一些特殊的命令,需要手动测试下是否支持。比如scan命令就有区别。
vs Redis cluster
优点:
- 所有数据存储到磁盘,提供更大的容量和更低的成本,数据可靠性更高;
- 多线程架构,单进程的性能吞吐比redis单进程更高(30wQPS vs 13wQPS)
- 独立的gossip网络线程,支持更多的节点通讯,支持更大规模的集群
- 更强大的数据搬迁能力,原redis cluster的搬key实现,如果遇到大key,会导致比较恶劣的全局阻塞
- 基于rocksdb的镜像和完善的binlog实现,支持任意时间点的回档,社区版redis暂无这个能力
- 支持增量复制及复制断开断点续传,redis复制断开需要全量复制
缺点:
- 对比纯内存的redis,Tendis存储版的延时更大
- 部分命令还不支持(LUA, pubsub, geo等),正在完善中
- 对于单key更新,由于Tendis存储版内部并发控制,无法发挥多线程的优势,会退化为单线程,性能较低
四、构架说明
集群构架
Tendis存储版使用去中心化集群架构,每个数据节点都拥有全部的路由信息。
- 用户可以访问集群中的任意节点,并且通过redis的MOVE协议,最终路由到正确的节点。
- 每个Tendis存储版节点维护属于各自的slot数据,任意两个master节点之间的slot不重复
- Tendis存储版的主备节点之间通过binlog进行复制
- 任意两个节点之间通过gossip协议进行通讯
- master节点之间支持基于slot的数据搬迁
数据分片
类似redis cluster,Tendis存储版使用redis hashslot算法对数据进行划分,默认整个集群的数据划分为16384(2^14)个slot,每个Tendis存储版节点负责一部分slot。
可以通过参数chunksize来修改默认的slot数量,但只允许是Tendis存储版进程第一次启动时候指定。一旦Tendis存储版初始化,chunksize就不能改变。一般情况下,不需要配置和改变这个值。同时需要注意的是,必须保证集群的所有节点都采用相同的chunksize配置。
使用rocksdb来进行数据存储;提高数据的读写性能。