云数据库 Tendis 混合存储版

云数据库 Tendis 混合存储版(集群架构)基于腾讯内部广泛使用的 KV(key-value)存储引擎 Tendis ,Tendis 是腾讯自研兼容 Redis 协议的 Rocksdb 存储引擎,拥有高性能、高压缩比、高稳定性特性,在腾讯内部有着丰富的运营经验。

相关产品
云数据库 Tendis 产品页,含版本规格、价格与购买入口。

·混合存储版(集群架构)由缓存 Redis 和引擎 Tendis 两大组件构成,适用于 KV 存储场景,平衡了存储场景中性能和成本之间难题,在冷数据占比较大的场景中可帮业务降低多达80%的运营成本。

·混合存储版(集群架构)完全兼容 Redis 4.0 集群版的版本命令,使用门槛低,可以充分利用 Redis 丰富的数据结构和操作命令带来的高效率。

·混合存储版(集群架构)的全量数据存储于磁盘,全量 Key 和热 Key 的 Value 缓存于内存。

一、低成本

·数据自动降冷自动缓存,全量数据存储于磁盘,热数据缓存于内存,和内存版相比运营成本可降低40% – 80%。

·数据落盘自动压缩,采用 LZ4 压缩算法在性能和容量中寻找平衡,最大可降低 90% 的磁盘空间。

二、高效率

·100%兼容 Redis 协议,业务可以完整地体验 Redis 高效的数据组织结构和操作接口。

·使用 Tendis 混合存储版,业务无需再处理数据的冷热交换,以及传统缓存方案中数据一致性、缓存击穿、缓存雪崩等问题,降低了业务的复杂性,提升开发效率,降低运维成本。

三、高性能

·提供与 Redis 一致的热数据访问性能,最大提供300万 + QPS。

·支持高达100万 QPS 的并发写入。

四、大容量

·提供240GB – 32TB的超大存储容量规格。

·磁盘数据支持6副本,充分保障数据的可靠性。

五、混合存储版架构

云数据库 Tendis 混合存储版(集群架构)核心组件由 Proxy、缓存 Redis、引擎 Tendis 组成,每个组件功能介绍如下:

·Proxy:负责对客户端请求进行路由分发,将不同的 Key 命令分发到正确的分片,同时 Proxy 还负责部分监控数据的采集,以及高危命令在线禁用等功能。

·缓存 Redis:缓存 Redis 组件源于 Redis 4.0 Cluster,为了支持冷数据自动降冷,我们对 Redis 进行了 Value 淘汰、写入数据同步 Tendis、冷数据访问、主备热数据同步、按时间淘汰 Value 等核心功能的改造,改造后的混合存储版100%兼容 Redis Cluster 命令。

·引擎 Tendis:腾讯自研的 KV 存储引擎,兼容 Redis 协议,该引擎已经在腾讯内部运营多年,性能和稳定性得到了充分的验证,在混合存储系统中主要负责全量数据的存储和读取,以及数据备份,增量日志备份等功能。

六、混合存储版规格

注意:说明:

redis-benchmark -h 10.0.0.5 -p 6379 -c 100 -n 60000000 -r 1000000000 -d 128 -t set -a passwd

分片数量 总缓存容量(GB) 总磁盘容量范围(GB) 最大写入性能(QPS)
4 64 240 – 520 60,000
4 128 480 – 960 60,000
4 256 1000 – 2000 60,000
8 128 480 – 960 120,000
8 256 960 – 1920 120,000
8 512 2000 – 4000 120,000
16 256 960 – 1920 240,000
16 512 1920 – 3840 240,000
16 1024 4000 – 8000 240,000
32 512 3840 – 7680 480,000
32 1024 7680 – 15360 480,000
32 2048 16000 – 32000 480,000

七、Value 驱逐策略

·value-eviction-policy

·value-eviction-policy 参数支持 time-to-eviction、none,默认为 none,表示在内存足够的情况下 Key 默认不被驱逐出内存。

·通过设置 value-eviction-policy 为 time-to-eviction,可指定 N 分钟未访问的 Key 自动被驱逐出内存。value-time-to-eviction 参数默认值为10080分钟(7天),可在 控制台 自助调整该参数值。

·maxmemory-policy

·混合存储版仅支持 allkeys-lru、allkeys-random,默认为 allkeys-lru。

·当内存使用到达 maxmemory,系统将按照 maxmemory-policy 从内存策略驱逐 Value。

八、Value 缓存策略

·value-cache-policy
通过该参数,用户可以配置数据何时缓存至 Tendis 缓存,通过以下参数可以避免遍历数据等情况,造成缓存失效的问题。

·value-cache-policy-period 参数默认值为300秒(5分钟),可指定 N 秒钟内 Key 访问次数大于等于 N 次(value-cache-policy-threshold 参数值),Tendis 会将 Value 缓存至内存。

·value-cache-policy-threshold 参数默认值为1,范围值可设置为1-100,该参数配置为1,冷数据将立即缓存。

·Expire 语义说明
对于设置了 Expire Time 的 Key,混合存储版将保持原有的语义,将到期的 Key 和 Value 从内存和磁盘中删除。EXPIRE、EXPIREAT、PEXPIRE、PEXPIREAT 命令对 Key 进行设置过期时间也是相同原理,到期后 Key 和 Value 都会删除。

·大 Key 驱逐说明
为保障读性能,混合存储当前版本对于超过8MB或者 filed 超过1000个的复杂结构 Value(非 string),将不从内存中驱逐,因此如果存在大 Hash 等复杂数据结构情况下,降冷效果不明显,后续我们将持续优化。

九、命令兼容性说明

混合存储版(集群架构)数据是分布式存储的,集群架构命令支持情况分为支持、自定义命令、不支持,详细命令兼容性列表请参见 命令兼容性。

·不支持的命令
系统将返回如下错误:

keys * (error) ERR unknown command 'keys'

·有限支持的命令
混合存储版(集群架构)兼容 Jediscluster 等智能客户端,为兼容 Jedis cluster 的使用场景,云数据库 Tendis 对 Cluster 支持命令返回对 IP 列表进行了修改,返回信息中每个节点的 IP 地址为实例的 VIP。

·CLUSTER NODES

·CLUSTER SLOTS

·CONFIG GET

·跨 Slot 命令支持
混合存储版(集群架构)目前支持跨 Slot 访问的命令,包括 MGET、MSET、DEL,其他多 Key 命令的跨 Slot 访问暂不支持。

·自定义命令
混合存储版(集群架构)通过 VIP 封装,在集群模式下提供了单机版的使用体验,对业务的使用带来的极大的便利,但是对运维不够透明,因此通过自定义命令来弥补这块空缺,支持集群中每个节点的访问,支持方式为在原有命令的参数列表最右边新增一个参数【节点ID】,COMMAND arg1 arg2 … [节点ID],节点 ID 可通过 cluster nodes 命令,或者在 控制台 中获取:

10.1.1.1:2000> cluster nodes 25b21f1836026bd49c52b2d10e09fbf8c6aa1fdc 10.0.0.15:6379@11896 slave 36034e645951464098f40d339386e9d51a9d7e77 0 1531471918205 1 connected da6041781b5d7fe21404811d430cdffea2bf84de 10.0.0.15:6379@11170 master – 0 1531471916000 2 connected 10923-16383 36034e645951464098f40d339386e9d51a9d7e77 10.0.0.15:6379@11541 myself,master – 0 1531471915000 1 connected 0-5460 53f552fd8e43112ae68b10dada69d3af77c33649 10.0.0.15:6379@11681 slave da6041781b5d7fe21404811d430cdffea2bf84de 0 1531471917204 3 connected 18090a0e57cf359f9f8c8c516aa62a811c0f0f0a 10.0.0.15:6379@11428 slave ef3cf5e20e1a7cf5f9cc259ed488c82c4aa17171 0 1531471917000 2 connected ef3cf5e20e1a7cf5f9cc259ed488c82c4aa17171 10.0.0.15:6379@11324 master – 0 1531471916204 0 connected 5461-10922 原生命令: info server 自定义命令: info server ef3cf5e20e1a7cf5f9cc259ed488c82c4aa17171 SCAN 命令示例: scan 0 238b45926a528c85f40ae89d6779c802eaa394a2 scan 0 match a* 238b45926a528c85f40ae89d6779c802eaa394a2 KEYS 命令示例: keys a* 238b45926a528c85f40ae89d6779c802eaa394a2

·多数据库(DB)支持
混合存储版(集群架构)不支持多 DB,支持 SELECT 0 命令。

·低性能命令

·linsert、lrem:List 命令族中的 linsert、lrem 命令不建议使用,这两个命令会在磁盘中遍历 list 节点,命令的执行时间复杂度为 O(n),性能较差,list 节点数较大时,命令会执行超时。

·append:append 命令在字符长度超过1MB后性能较差。

赞 (0)
上一篇 4天前
下一篇 4天前