作者:黄鹏程(马格)
(一)什么是阿里云Tair云原生内存数据库
阿里云Tair云原生内存数据库线上名字为阿里云数据库redis企业版(又称阿里云Tair),从2009年开始正式承载集团业务,是一款历经磨练的企业级产品。它完全兼容Redis的数据结构和通讯协议,包括API接口,并且在内部逐步打磨的过程中,基于Tair研发云上托管云内存数据库。
如上图所示,Tair产品分为三个类型,从性能到性价比有不同的产品排布,下面用1.0X表示开源的Redis的性能与价格,从性能和价格上与三个类型的Tair产品进行对比。
如上图所示,从内存存储方面,Tair三个类型的产品适应不同的场景。
1)数据读写频繁,要求低延迟,支持大连接;
2)成本相对不敏感,以满足业务性能需求为主。
1)数据读写较频繁,延迟要求可稍微放宽,存储数据量有一定较大容量要求;
2)成本控制较之热数据要求更高。
1)数据读写密集程度低,延迟要求不高,整体存储容量要求高;
2)成本是最大考量因素。
(二)阿里云Tair面向业务的数据结构让业务创新更容易
在业务方面,阿里云Tair与基于传统Redis存在许多不一样的地方,阿里云Tair业务结构如下所示。
除此之外,阿里云Tair有以下优点:
1)高性能
性能增强型,流量上涨淡然处之,性能是开源Redis的2倍。
2)持久化
持久内存型,数据可靠,方便业务使用,不再担心数据丢失。(RPO=0)
3)低成本
多种存储介质,选择最优性价比,性价比高于ECS自建。
4)丰富数据模型
在社区Redis上提供了更多面向应用的数据结构,应用开发更简便。
5)企业级能力
全球多活,数据闪回,混合多云(热点散列)。
(三)阿里云Tair历史
上图为Tair的发展历史。从Tair1.0开始,团队就孵化出了云Redis社区版和云Memcache,这是线上社区托管的两个版本。
在Tair1.0的时候,就会整个孵化出来,2.0逐步上云,3.0会孵化出来一款叫GDB的产品,是一款线上的图数据库。
再往下是Tair(Redis企业版/Tair 3.0),集团和云上是同一个版本,有很多种形态来支持用户在各种业务场景下的需求。
(一)做一个不丢数据的内存数据库—Tair持久内存型
我们希望做一个不丢数据的数据库,做法是通过新硬件和新软件来进行。
1.新硬件
上图为存储介质图,速度延迟从上到下逐步增大,相反,容量逐步减少,成本逐步降低。Storage Class Memory处于中间,性价比较高。
2.新软件
新软件的开发模式方案有两种,分别是内存模式(Memory Mode)与应用程序直接访问模式(App Direct Mode)。
在内存模式下,应用和OS将其视为易失性内存池,虽对应用透明,但掉电即失,因此不采用。
在应用程序直接访问模式下,持久内存和 DRAM充当独立内存资源,通过构建符合Redis协议和数据结构的软件利用两块存储资源构建兼容Redis、具备命令级持久化能力的内存数据库。
我们选择重新写兼容Redis的东西,而不是在Redis基础上进行更改,是因为新软件有着全新的挑战:
1)替代原有的内存分配器,同时要保证内存分配器元数据的持久化;
2)Redis数据结构与索引的持久化要保持一致性;
3)持久内存和易失内存如何协同工作,让整个数据库高性能工作,同时还具备强大的持久化能力。
3.产品化能力
上文结合软硬件的能力阐述了如何去构建持久化内存的形态,下面可以看一下所带来的成果。
4.应用场景
应用场景主要分为如下两种。
场景一:大数据量、高性能、成本的综合选型考虑
场景二:用作持久化数据存储
(二)做一个具备时光机能力的数据库--数据闪回
我们希望这个内存数据库具备有时光机能力。时光机能力表示可以将数据恢复到过去指定的任何时间点,也称为数据闪回,它有如下两大特点:
1)Backup/Restore的终极形态
2)支持按秒级的数据恢复(可支持到按条)
3)防止删库跑路场景
4)Clone & Switching:随时回切
1)灵活应对部分数据异常
2)其余未指定数据不变化
3)游戏数据回档实现
(三)做一个全球多地写入的数据库--全球多活
1.基本概念
我们希望数据库能够多地写入,把多地的内存数据库进行多活操作,用户可以在多地访问与写入,我们帮用户做数据按序同步。
2. 三地六向同步
3. 低时延SLA保障
1)整体看,T1 + T2 稳定在10ms,最差100ms;T3基本上时延是网络RTT。
2)忙时下不敏感,replicator具备独立的资源,点到点同步通道带宽稳定。
4. Session场景
Session的容灾至关重要
5. 游戏场景
架构特点:玩家可就近接入,本身逻辑就近计算数据读取,基本不存在数据一致性问题,灵活调整分布式节点。
可以灵活跨地域部署,数据通过Tair同步延迟根据网络速度决定通常在100ms以下。
场景:聊天室,弹幕信息同步;跨服对战;全球道具商城。
6.出行场景
Tair也在高德地图中深度使用,并解决了出行场景的一些问题。
使用前:导航时地理位置信息推送问题
使用后:高德交通三地六向同步(Tair only)
(四)做一个有计算的内存数据库
1. TairCPC高精度计数
TairCPC是一种数据的压缩算法(sketches)的内存实现,可以利用很小的空间对采样数据做高性能的计算,适合在实时和流式计算场景下做高性能的风控和安全场景。
1)内存占用低
2)增量读写,IO最小化
3)毫秒级高性能去重
4)超高去重精度
5)误差率稳定收敛
1)想以较低的内存实现对海量数据的去重计算;
2)容忍一定的四舍五入的误差率;
3)适用于实时计算的滚窗和滑窗去重。
2. TairTS时序数据处理
TairTS是基于Redis Module开发的时序数据结构,提供低时延高并发的内存读写访问,以及快速的过滤聚合查询功能。将存储与计算集于一身,极大地简化用户处理时序数据的流程,结合Tair持久内存型单集群最大规模可达65T。
1)TairTS相对于TSDB类传统时序数据库,可提供更快的写入性能,并提供数10倍的查询性能。
2)针对小规模数据场景,TairTS可将批量查询与聚合计算集成到单条命令中,减少网络交互,实现毫秒级响应。
3)针对大规模数据场景,可利用索引命令,将大规模数据,分批查询与聚合,实现秒级响应。
1)监控数据的存储与计算
2)车联网、工业互联网实时IOT数据处理
3)APM秒级监控等
最后谈一下未来面对的事情,关注云产品的人可能都知道存储计算分离,我们希望在这基础上能再进行一层分离。将内存也分离出来,做一个大的内存存储池。希望我们的再分离一层,就是把内存也分离出来,因为现在可能是一个大的存储池,为用户提供更加弹性的服务。