当前位置:主页 > 查看内容

Beyond the Cache ——阿里云Tair云内存数据库场景解读

发布时间:2021-06-10 00:00| 位朋友查看

简介:作者 黄鹏程 马格 一、Tair背景介绍 一 什么是阿里云Tair云原生内存数据库 阿里云Tair云原生内存数据库线上名字为阿里云数据库Redis企业版 又称阿里云Tair 从2009年开始正式承载集团业务 是一款历经磨练的企业级产品。它完全兼容Redis的数据结构和通讯协议……

作者 黄鹏程 马格



一、Tair背景介绍


一 什么是阿里云Tair云原生内存数据库


阿里云Tair云原生内存数据库线上名字为阿里云数据库Redis企业版 又称阿里云Tair 从2009年开始正式承载集团业务 是一款历经磨练的企业级产品。它完全兼容Redis的数据结构和通讯协议 包括API接口 并且在内部逐步打磨的过程中 基于Tair研发云上托管云内存数据库。


1.png


如上图所示 Tair产品分为三个类型 从性能到性价比有不同的产品排布 下面用1.0X表示开源的Redis的性能与价格 从性能和价格上与三个类型的Tair产品进行对比。


Tair性能增强型
性能约为开源Redis的两倍 支持多种常见数据结构 在天猫/淘宝/高德/优酷中大规模使用 并拥有任意时间点恢复/全球分布式/热点散列等特性。

Tair持久内存型
基于Intel傲腾持久内存做的数据库 后文会重点阐述其特点。

Tair容量存储型
直接对标社区Pika等开源存储型Redis产品。然后因为我们会用阿里云的高效的高效云盘 所以说整个的功能和性能都会比Pika强很多。


2.png


如上图所示 从内存存储方面 Tair三个类型的产品适应不同的场景。


Tair性能增强型

1 数据读写频繁 要求低延迟 支持大连

2 成本相对不敏感 以满足业务性能需求为主。


Tair持久内存型

1 数据读写较频繁 延迟要求可稍微放宽 存储数据量有一定较大容量要求

2 成本控制较之热数据要求更高。


Tair容量存储型

1 数据读写密集程度低 延迟要求不高 整体存储容量要求高

2 成本是最大考量因素。


二 阿里云Tair面向业务的数据结构让业务创新更容易


在业务方面 阿里云Tair与基于传统Redis存在许多不一样的地方 阿里云Tair业务结构如下所示。


3.png


除此之外 阿里云Tair有以下优点

1 高性能

性能增强型 流量上涨淡然处之 性能是开源Redis的2倍。

2 持久化

持久内存型 数据可靠 方便业务使用 不再担心数据丢失。 RPO 0

3 低成本

多种存储介质 选择最优性价比 性价比高于ECS自建。

4 丰富数据模型

在社区Redis上提供了更多面向应用的数据结构 应用开发更简便。

5 企业级能力

全球多活 数据闪回 混合多云 热点散列 。


三 阿里云Tair历史


4.pngimage.gif


上图为Tair的发展历史。从Tair1.0开始 团队就孵化出了云Redis社区版和云Memcache 这是线上社区托管的两个版本。


在Tair1.0的时候 就会整个孵化出来 2.0逐步上云 3.0会孵化出来一款叫GDB的产品 是一款线上的图数据库。


再往下是Tair Redis企业版/Tair 3.0 集团和云上是同一个版本 有很多种形态来支持用户在各种业务场景下的需求。




二、Tair功能介绍


一 做一个不丢数据的内存数据库—Tair持久内存型


我们希望做一个不丢数据的数据库 做法是通过新硬件和新软件来进行。


1.新硬件


5.jpg


引入英特尔? 傲腾? 数据中心级持久内存
与DRAM内存相近的性能表现 而且其大容量和非易失性的特性还可帮助系统获得更优的可用性
它相比于DRAM内存的成本和容量优势 也可帮助客户有效地降低总拥有成本。


6.png


上图为存储介质图 速度延迟从上到下逐步增大 相反 容量逐步减少 成本逐步降低。Storage Class Memory处于中间 性价比较高。


2.新软件


模式选择

新软件的开发模式方案有两种 分别是内存模式 Memory Mode 与应用程序直接访问模式 App Direct Mode 。


7.png


在内存模式下 应用和OS将其视为易失性内存池 虽对应用透明 但掉电即失 因此不采用。


在应用程序直接访问模式下 持久内存和 DRAM充当独立内存资源 通过构建符合Redis协议和数据结构的软件利用两块存储资源构建兼容Redis、具备命令级持久化能力的内存数据库。


全新的挑战


8.png


我们选择重新写兼容Redis的东西 而不是在Redis基础上进行更改 是因为新软件有着全新的挑战


1 替代原有的内存分配器 同时要保证内存分配器元数据的持久化

2 Redis数据结构与索引的持久化要保持一致性

3 持久内存和易失内存如何协同工作 让整个数据库高性能工作 同时还具备强大的持久化能力。


3 产品化能力


上文结合软硬件的能力阐述了如何去构建持久化内存的形态 下面可以看一下所带来的成果。


9.png


消除aofrewrite与fsync的无Fork设计 服务更顺滑 P95延时较之内存版Redis更低更稳定
读写性能吞吐为内存版Redis的90%以上。


10.png


原生命令级持久化能力 操作写入即持久化
缓存主存合一成为可能 成本更低 架构更优雅。


4.应用场景


应用场景主要分为如下两种。


场景一 大数据量、高性能、成本的综合选型考虑

机器学习平台、推荐系统等计算数据对性能和容量的要求很高
全内存又使得成本压力巨大
可采用Tair持久内存型以有效降低成本 并能够保持高性能运行
同时用户也无需为降本而综合使用其他数据存储 有效地平衡了系统复杂度与成本。


场景二 用作持久化数据存储

游戏、直播、数据分析中大数据结果集对外提供查询服务等场景可以使用
可采用Tair持久内存型作为数据最终的存储
对比缓存 主存的两层架构 数据同样可靠
性价比更高 代码更简化 架构更优雅。


二 做一个具备时光机能力的数据库--数据闪回


11.png


我们希望这个内存数据库具备有时光机能力。时光机能力表示可以将数据恢复到过去指定的任何时间点 也称为数据闪回 它有如下两大特点


七天内任意时间点的数据恢复

1 Backup/Restore的终极形态

2 支持按秒级的数据恢复 可支持到按条

3 防止删库跑路场景

4 Clone Switching 随时回切


根据按照指定Key或者Key Glob Pattern进行原地数据部分恢复

1 灵活应对部分数据异常

2 其余未指定数据不变化

3 游戏数据回档实现


三 做一个全球多地写入的数据库--全球多活


1.基本概念


我们希望数据库能够多地写入 把多地的内存数据库进行多活操作 用户可以在多地访问与写入 我们帮用户做数据按序同步。


12.png


2. 三地六向同步


13.png


全区全服同时在线 解决漫游 roaming 和DNS漂移问题。
数据本地访问 locally data access 的流畅性。
单元化 独立部署 区域容灾 按需调度。
数据的高可靠和性能提升。


3. 低时延SLA保障


14.png


推送模式 Push Latency T1 (binlog落盘时延) T2 (Replicator发现时延) T3 (Apply时延)

1 整体看 T1 T2 稳定在10ms 最差100ms T3基本上时延是网络RTT。

2 忙时下不敏感 replicator具备独立的资源 点到点同步通道带宽稳定。


适合写入量大 对平均时延要求高的客户。
目前全球分布式缓存只能做3地6向。
适合跨域多活及单元化业务 阿里内部经验 。
Tair全球同步时延测试白皮书

https://help.aliyun.com/document_detail/199010.html


4. Session场景


15.png


Session的容灾至关重要

随着业务扩展 session访问压力几何级数增长。
对抖动敏感 远距离访问体验差。
单元化部署 全球化部署。
除去容灾 跨域备份 还要能就近读写 跨域双活 多活 。


5. 游戏场景


16.png


架构特点 玩家可就近接入 本身逻辑就近计算数据读取 基本不存在数据一致性问题 灵活调整分布式节点。


可以灵活跨地域部署 数据通过Tair同步延迟根据网络速度决定通常在100ms以下。


场景 聊天室 弹幕信息同步 跨服对战 全球道具商城。


6.出行场景


17.png


Tair也在高德地图中深度使用 并解决了出行场景的一些问题。


使用前 导航时地理位置信息推送问题

DNS漂移是一个边界效应 通常大概影响边界上5%-7%的用户。
在导航中跨越边界时 会大量出现交叉访问不同数据区的场景 业务逻辑复杂 可靠性低 用户体验差。


使用后 高德交通三地六向同步 Tair only

Redis-enterprise跨域多活提供百万OPS每秒的数据同步。
交通在三地都可高速写入/访问 极高性能的优势提供流畅的用户体验。
用户可以灵活的在SDK层控制读写 比例等。


四 做一个有计算的内存数据库


1. TairCPC高精度计数


18.png


TairCPC是一种数据的压缩算法 sketches 的内存实现 可以利用很小的空间对采样数据做高性能的计算 适合在实时和流式计算场景下做高性能的风控和安全场景。


主要特性

1 内存占用低

2 增量读写 IO最小化

3 毫秒级高性能去重

4 超高去重精度

5 误差率稳定收敛


适用场景

1 想以较低的内存实现对海量数据的去重计算

2 容忍一定的四舍五入的误差率

3 适用于实时计算的滚窗和滑窗去重。


2. TairTS时序数据处理


19.png


TairTS是基于Redis Module开发的时序数据结构 提供低时延高并发的内存读写访问 以及快速的过滤聚合查询功能。将存储与计算集于一身 极大地简化用户处理时序数据的流程 结合Tair持久内存型单集群最大规模可达65T。


主要特性

1 TairTS相对于TSDB类传统时序数据库 可提供更快的写入性能 并提供数10倍的查询性能。

2 针对小规模数据场景 TairTS可将批量查询与聚合计算集成到单条命令中 减少网络交互 实现毫秒级响应。

3 针对大规模数据场景 可利用索引命令 将大规模数据 分批查询与聚合 实现秒级响应。


适用场景

1 监控数据的存储与计算

2 车联网、工业互联网实时IOT数据处理

3 APM秒级监控等



三、面向未来


20.png


最后谈一下未来面对的事情 关注云产品的人可能都知道存储计算分离 我们希望在这基础上能再进行一层分离。将内存也分离出来 做一个大的内存存储池。希望我们的再分离一层 就是把内存也分离出来 因为现在可能是一个大的存储池 为用户提供更加弹性的服务。


本文转自网络,原文链接:https://developer.aliyun.com/article/784620
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐