写点什么

疫情成本遭不住?一招降本 85%,架构特性全部公开!

用户头像
数据君
关注
发布于: 2021 年 02 月 01 日

在 20 年 12 月 20 日,我们开源了腾讯云数据库 Tendis 存储版,同时这款产品也在一周内就 Star 上千。这款产品为什么这么香?对于它的适用场景、架构、特性和发展历程,在很多开发者心中都是一片空白。


时隔一个月,在 Tendis 第一次开发者交流会上,这些问题得到了解答。


那么,Tendis 到底为何而生?答案是降本和增效


这还要从当年 Redis 大热的时代开始说起,Redis 得益于高性能以及丰富的数据结构命令,成为当时最受欢迎的 KV 内存数据库。然而,“高丘之下,必有峻谷”,社区版 Redis 纵然强大,但也只覆盖了缓存场景,并且纯内存的成本特别高。


而 Tendis 的出现,就解决了 Redis 纯内存成本过高和场景单一的问题,通过 Tendis 的数据降冷和压缩,数据库成本最高可以降低 85%,同时冷热分级还解决了缓存的三大难题,一举两得。因此,Tendis 是为了解决 Redis 难以解决的业务问题,而非产品的简单替代。


Tendis 的发展历程并不短,从立项到开源,蛰伏了五年,要是算上想法的萌芽,时间还要再往前推,最终,腾讯结合了近 10 年 Redis 的使用和研发经验,终于打磨出这款自主研发的开源分布式高性能 KV 存储,并推出了混合存储版和存储版两种不同产品形态,另外还将存储版开源。


那么,Tendis 的具体场景、架构、特性到底是怎样的?接下来让我一一揭晓。


Tendis 的应用场景


场景 1:Tendis Cache,所有数据放到内存中


Tendis Cache 基于 Redis 社区版定制,同样是高性能缓存解决方案,并且在社区版本的基础上还有以下优势:


实现幂等 aof


增量 rdb,slave 断开支持只同步增量变化的 rdb


减少集群版的内存消耗


对比社区版 redis,性能提升 10%


基于 rdb 搬迁方案,解决大 key 搬迁导致卡死的问题


场景 2:Tendis 存储版,所有数据落地存储


Tendis Cache 解决了性能问题,并支持线性扩展,但受限于内存的容量和成本,以及数据可靠性不够。因此,我们实现了 Tendis 的存储版,支持 Redis 协议和数据结构,所有数据落地存储。用户可以从 Redis 快速迁移到 Tendis 存储版,并且保证数据可靠性。


场景 3:Tendis 冷热混合存储


Tendis Cache 和 Tendis 存储版解决了业务对数据可靠性、成本和性能的不同要求,但它们是完全独立的两个解决方案,仅仅是协议和数据结构兼容。Tendis 冷热混合存储可以说是综合了 Tendis Cache 和 Tendis 存储版的优点,缓存层存放热数据,所有数据存放于存储层。这既保证了热数据的访问性能,同时保证了全量数据的可靠性,同时热数据支持自动降冷(同时 Tendis 冷热混合存储版已经上线腾讯云官网,欢迎使用)。


总的来说,Tendis 于 2015 年在腾讯游戏中孵化,通过不断的迭代,逐步上线存储版、混存版,解决了缓存,存储以及混合存储三个场景的问题。目前在大量游戏中使用,包括 LOL,DNF,王者营地,火影忍者 OL 等,同时也得到腾讯的内部大量业务的验证,例如社交,短视频,音乐等。



Tendis 架构解读


产品能力依托于优秀的架构设计。Tendis 存储版完全兼容 redis 协议,因此,用户可以通过 redis client 访问 Tendis 存储版,几乎不用修改代码。同时,Tendis 存储版支持远超内存的磁盘容量,可以大大降低用户的存储成本。


一、tendis 存储版架构


类似于 Redis Cluster, Tendis 存储版使用去中心化的集群管理架构。数据节点之间通过 gossip 协议通讯,用户访问集群中的任意数据节,请求都能路由到正确的节点。并且集群节点支持自动发现、故障探测、自动故障切换、数据搬迁、副本迁移等能力,极大降低运维成本。



二、tendis 特性


1\. Redis 兼容性:完全兼容 redis 协议,支持绝大多数 redis 的指令


2\. 持久化存储:使用 rocksdb 作为存储引擎,所有数据以特定格式存储在 rocksdb 中,最大支持 PB 级存储


3\. 去中心化架构:类似于 redis cluster 的分布式实现,所有节点通过 gossip 协议通讯,可指定 hashtag 来控制数据分布和访问,使用和运维成本极低。


4\. 水平扩展:集群支持增删节点,并且数据可以按照 slot 在任意两节点之间迁移,扩容和缩容过程中对应用运维人员透明,支持扩展至 1000 个节点。


5\. 故障高可用:自动检测故障节点,当故障发生,slave 会提升为 master 继续对外服务。


6\. 冷热混合存储关键组件:得益于 Tendis 存储版的设计和内部优化,Tendis Cache 和 Tendis 存储版可以一起工作成为 Tendis 冷热混合存储。混合存储区非常适用于 KV 存储场景,并平衡了性能和成本。相比于 redis,占用大量存储空间的冷数据降冷后可以最多减少 80%的成本,同时保证热数据的访问性能。



对于 Tendis 存储节点来说,具有以下特点:


整体使用线程池模式,不同功能模块使用不同的线程池,每个线程池支持动态调整线程资源


支持多线程,实现 key lock 来保证并发控制。并实现 key lock, slot lock, store lock 的分层并发控制。


支持配置多个 rocksdb,突破单一 rocksdb 的性能瓶颈,并控制单个 rocksdb 的容量规模


binlog 保存在 rocksdb 中,保证数据和 binlog 的事务一致性


三、Tendis 存储版 vs Redis Cluster


Tendis 存储版在设计和实现上继承了 Redis 的大量优点,包括丰富的数据结构,去中心化架构等。同时 Tendis 在可靠性、复制机制、并发控制、gossip 实现以及数据搬迁等做了大量的优化,并且解决了一些 Redis cluster 比较棘手的问题。



四、去中心化架构


从 Redis 3.0 开始,Redis 推出了去中心化的分布式方案,此架构跟一般基于 Proxy Based 的集群架构有很大的差别,刚开始接受和使用的人并不太多。并且随着 Redis 的迭代,redis cluster 方案也越来越成熟,理解这个架构的人也越来越多,已经成为 Redis 集群的默认选项。



最终,Tendis 经过大量的讨论和调研,也选择了这样的去中心化架构,是其他同类产品中第一个支持去中心化架构的产品。选择去中心化架构后,也带来了不少的好处:


1\. 运维简单。Redis Cluster 只需集群创建并指定 slot 分布之后,内核可以自动完成路由广播,节点发现,故障探测等日常运维最常见的问题,很大程度上降低维护成本。如果使用 Proxy Based 方案,多个 proxy 的路由一致性往往依赖外部组件(proxy+etcd 等)来保证,故障处理一般也需要额外组件来实现。


2\. 架构统一。使用了去中心化架构,可以将 Tendis 的缓存,存储和混合存储 3 个场景都统一成相同的架构,开发和维护成本更低。


内嵌搬迁。由于 Tendis 解决了路由共识的问题,那么 Tendis 的搬迁可以比较方便在内核中实现,并且可以基于 Gossip 协议来保证集群路由的一致性。这里细节比较多,暂时不展开。


3\. 访问层次更少。基于 MOVE 协议等特征,Redis Smart Client 能够直接访问 Tendis 而无需依赖 proxy,部分场景中可以减少一次网络转发。这个在混合存储的架构中特别重要,否则 Tendis Cache 和 Tendis 存储版之间就需要增加一个 proxy。


当然我们也需要正视去中心化的缺点的,首先是实现相对复杂,其次,相对于 Proxy Based 集群规模更小。节点间的通讯变多,有可能会出现 gossip 广播风暴等问题。不过 Tendis 也对 Gossip 消息进行了压缩,同时有独立的 Gossip 线程池处理相关消息,能够比 Redis 提供更大的集群规模。


Tendis 开源背后


开源是技术圈一个令人激动的话题,对于广大企业和开发者,可以低成本享受技术的魅力,而对于开发产品的团队本身,目的是为了打磨一个更好的产品。纵观目前所有优秀的开源存储产品,都利用了开源的力量,不断地修复 bug,收集需求和想法,并采纳一些优秀的贡献等,集思广益,最终产品得到不断的完善。因此,Tendis 也希望如此。


另外,Tendis 是目前第一个支持去中心化架构的 Redis 存储项目,我们认为其故障探测、自动故障切换、数据搬迁、副本迁移等能力在同类产品中是具备竞争力的,Redis 的使用和运维习惯得以延续,使用门槛可以大大降低。这样的产品对于企业和开发者,也是有重大意义的。


Tendis 的设计和实现深深受到了 Redis Cluster 的影响,可以说 Tendis 也是踩在了巨人的肩上成长的,并且经过腾讯海量业务验证的 Tendis 回馈社区,希望可以帮助用户解决 Redis 部分场景问题。



Tendis 社区招募计划——不仅是开源


除了代码开源,一个好的社区发展离不开持续的运营,因此,为了让更多人能理解 Tendis 的架构、使用方法及内部实现,帮助到更多的企业解决业务难题。因此,Tendis 后续会不断完善相关文档,定期 push 版本更新和组织线上/线下沙龙,并且积极解决用户提出的 issue 等。


另外,Tendis 社区招募计划启动,我们将征集社区开发者,开展开发者培育计划,提供专业的指导和定期的培训,一起建设 Tendis 社区。


发布于: 2021 年 02 月 01 日阅读数: 110
用户头像

数据君

关注

还未添加个人签名 2020.11.05 加入

还未添加个人简介

评论

发布
暂无评论
疫情成本遭不住?一招降本85%,架构特性全部公开!