前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一款受欢迎的KV存储数据库是如何炼成的?

一款受欢迎的KV存储数据库是如何炼成的?

作者头像
腾讯云数据库 TencentDB
发布2021-05-24 16:10:15
2.2K2
发布2021-05-24 16:10:15
举报

自2015年开始,手游从萌芽期发展到如今炙手可热的领域,发展的速度之快一定推动了背后技术的改革换新,传统的技术为了适应新时代的变化,也会不断进化,而Tendis的出现也让所有关注朋友们眼前一亮,那么,如何打造一款受欢迎的KV存储数据库?

5月22日08:50-18:00,3306π将集结多位行业专家,在广东广州天河区黄埔大道中322号粤大金融城国际酒店六楼平安厅与大家相约互动,点击「阅读原文」即可报名。

此次活动中,腾讯云数据库专家工程师,Tendis技术负责人陈福荣也将分享《如何打造一款受欢迎的KV存储数据库》,同时,在会前针对这个话题,陈福荣也给出了他的见解和思考,以下是访谈实录:

Q

请陈老师先简单聊聊自己,以及自己当初是如何考虑从事数据库研发这个方向呢?

A

其实我的本科是非计算机专业,但在大二的时候,发现编程是一个非常有意思的事情,于是就考虑转专业并且报考计算机专业的研究生。

第一次接触数据库的时候,是当时加入学校的技术社团并开发了一些网站,后台数据库使用的是SQL SERVER。当时就觉得二维表的库表结构和SQL语句都非常强大和灵活,很多逻辑可以直接通过SQL语句来解决,但理解还比较肤浅。

本科毕业后,就报考了数据库专业的研究生。算起来,今年刚好毕业10年,比较幸运的是,自己也一直从事数据库内核开发的相关工作。经历了移动互联网以及云计算的爆发性增长,数据库相关工作逐步变得香饽饽。

数据库是一个理论和工程实践结合得特别好的学科。大家会发现,随着对数据库的理解越深入,以前在计算机课程上的基础理论知识就越重要。例如,ACID、CAP、隔离级别、分布式事务等等理论知识,都是理解一个数据库系统的最重要基础。

拥有了基础的理论知识,结合当前最流行的开源数据库(mysql, redis, rocksdb等),多动手操作,带着疑问去理解和学习源码,最终都可以深入理解一个数据库。介绍一个经验,例如学习mysql,可以先尝试单步跟踪一个insert语句的完整流程,并且可以优先跟踪innodb内部的流程。这样可以对存储格式、B树、缓存系统、redo log有一个大概的理解。然后不断反复这个跟踪过程,最终把关联模块也搞清楚了。

重复这个流程,扩大到更多场景,例如更新、删除、查询等,尽量不放过任何一个细节,同时多写一些学习记录,巩固自己的理解,最后源码面前是没有秘密的。

Q

陈老师能否给我们介绍一下Tendis的产生背景?

A

从2012年开始,腾讯游戏就开始使用redis来作为业务缓存来提供服务。随着业务的不断壮大,特别是手游爆发性增长,redis作为缓存暴露了一些比较大的问题:

1. 成本。redis作为纯内存数据库,性能特别高。但随着业务的不断接入,数据量越来越大,也发现不少业务把redis直接当成了存储,QPS和访问延时其实并不高。这个时候,基于纯内存的redis成本就显得太高,并且存在浪费。

2. 可靠性。redis毕竟是一个内存数据库,数据的可靠性并不能让人放心。因此,业务上redis+mysql这样的组合被广泛使用,但业务必须小心翼翼地处理缓存和存储的一致性问题。

因此,需要有一个redis协议的存储来降低成本以及替代部分mysql存储场景。于是,Tendis就立项了。从2015年立项到现在,已经有了6年时间。

Q

同样作为优秀的KV数据库产品,Tendis也有着它的独到之处,基于Redis与RocksDB的组合取长补短,非常新颖,还请陈老师为社区朋友们介绍一下Tendis这款产品。

A

简单地理解,Tendis就是一个支持redis协议的KV分布式存储。因此,Tendis首先需要保证数据落地存储,其次协议和命令完全兼容。

数据落地,我们选择的是rocksdb,看中的是它成熟的社区,强大的功能和高性能。rocksdb可以认为是目前最强大和最可靠的事务型存储引擎之一。

对于协议和命令的兼容,Tendis的目标是真正的完全兼容。协议兼容,其实这个比较容易,更困难的是命令的完全兼容。例如,zset在redis使用内存skiplist来实现,那么在Tendis基于rocksdb如何实现呢?目前Tendis的实现方式跟其他类似的redis存储都不太一样,我们基于什么考虑?5月22日的分享会有这方面的解读。

另外,Tendis的目标是命令的完全兼容,例如LUA和SCAN,我们也是花了较大的精力去实现和支持。因为,在过去几年的业务推动发现,只要与redis少量的不兼容或行为不一致,业务从redis迁移过来都需要花很大精力去评估和沟通。因此,命令兼容性是Tendis目前非常重要的一个方向。Tendis也是目前命令兼容性做得最好的redis存储。

最后,其分布式解决方案也是非常重要的一点,也是这次分享的重点。

Q

Tendis自2019年内部发布,沉淀了一年终于在2020年面终于向大众,相对于19年,Tendis面向外界后又带来了哪些亮点,可否介绍一下呢?

A

2019年以来,Tendis主要做了两个方向的优化:

1. 存储版去中心化架构,实现类似redis cluster的去中心化架构,减少运维成本

2. 冷热混合存储架构,热数据在缓存层,全量数据在存储层,加速热数据的访问效率。

这两个架构都会在5月22日的分享中更详细地介绍,敬请期待。

Q

最后小编想就Tendis的使用,替大家咨询陈老师一个问题,一款优秀的产品的推广,除了本身产品的优秀设计之外,运行的稳定性和适用场景也是至关重要。陈老师可否简单介绍下呢?

A

Tendis在2015年立项以来,其实架构也经历过多次调整,也踩过很多坑,经历了腾讯海量业务的洗礼。运行的稳定性,除了一些基本设计外,有几个原则需要保证:

1. 化繁为简。当设计一个功能,逻辑特别复杂,耦合模块特别多的时候,要时刻提醒是不是搞复杂了。是需求不合理还是设计有问题?需要敢于否定以前的设计和实现。需要用简单的逻辑来解决大部分的问题。

2. 测试的完备性。Tendis在设计与实现的初期,就非常重视单元测试框架的开发与编写。后面逻辑变复杂了,模块测试和集成测试的测试用例也需要不断丰富。另外,版本的灰度验证策略也非常重要。

3. 诊断的能力。目前Tendis仍在不断完善的就是暴露更多的有价值的内部信息,用于评估内部运行的稳定性。例如rocksdb关键特性,过期处理信息,compaction行为,内部排队情况,锁持有情况等等。一个系统的稳定需要依赖长期的运营,而长期的运营需要依赖一些内部数据进行优化分析和决策。

这些方面的思考,期待5月22日的分享中与大家的讨论。

↓↓报名请点这儿~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云数据库 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档