写点什么

滴滴海量离线数据的在线化 — FastLoad

  • 2019-10-02
  • 本文字数:2545 字

    阅读完需:约 8 分钟

滴滴海量离线数据的在线化 — FastLoad

0. 目录

  1. 业务背景:雄关漫道真如铁

  2. 技术探讨:工欲善其事必先利其器

  3. Ingest SST

  4. Map/Reduce 产出全局有序文件

  5. 系统架构:千磨万击还坚劲

  6. 总结展望:直挂云帆济沧海

  7. 基于 FastLoad 的数据传输给业务带来的收益

  8. 发展规划


FastLoad 致力于离线数据在线化,服务业务 300+,单日运行次数 1000+,在线搬运 30TB+的数据,提供数百亿次高效查询,服务稳定性达到 99.99%。


1. 业务背景:雄关漫道真如铁

在没有 FastLoad 以前,业务一般都会自己维护读离线数据,写在线存储引擎的业务逻辑。比如,滴滴有很多重要的业务有如下的场景:前一天的订单数据会落到离线平台,经过一些特征提取和分析,转换成业务需要使用的数据。在第二天线上高峰期前,需要把这部分数据及时导入线上,才能够不影响业务逻辑。这些业务都需要定时更新在线数据、线上使用最新数据,下面我们对需求进行提取。


定时更新


像特征数据,一般需要小时级别甚至天级别的更新,所以业务需要有快捷的定时更新功能。


快速更新


特征数据还有一个特点,就是数据量特别大,以乘客特征为例,动辄上 TB 级别数据量。这么大的数据量通过 SDK 写入肯定是不行的。刚开始业务方也确实是这么玩的,直接通过 Hadoop 任务调用 Redis SDK,然后一条条的写入 Fusion,一般是每天凌晨开始写数据,等到早高峰 8 点时大量读取。但是这种方法实践下来,经常导致 Fusion 各类超时,在早高峰打车已经来临时还在写凌晨的数据,非常影响稳定性。因此第 3 个需求是必须快速更新。


稳定性


这个是毋容置疑的。


多表隔离


有些业务有很多类特征数据,他们有隔离存储的需求,也有分类更新、分类查找的需求,因此需要多表来支持逻辑到物理的隔离。


下面我们看下用户正常写存储的流程,如图展示了以 RocksDB 为引擎的存储的写入过程。



正常灌库流程


如图可见,从 Hive 写到最终存储的链路比较长,数据要经过几次中转才能最终落盘。我们做一个公式换算,1TB 的数据,以 5w 的 QPS 写入存储,每个请求写 512B,需要大约 12 个小时,也就是半天的时间才能将数据完全写入。要是每天更新的任务,在早高峰之前根本不能取到最新的数据,是不满足业务场景的。


为了满足上述提及的 4 点需求,我们需要转换思维,不能拘泥于传统的数据灌入方式。我们萌生了一个快速导入的想法,如果将文件直接拷贝到存储中,就可以避免上图中的 1/2/3/4,直接对外开放读。

2. 技术探讨:工欲善其事必先利其器

Ingest SST

我们需要以文件方式导入到存储引擎中,借助了 RocksDB 提供的 IngestFile 接口,通过用户预先创建好的 SST 文件,直接加载到硬盘的 LSM 结构中,已达到快速导入的目的。直接构造 SST 文件并导入的方式,绕开了上图正常灌库的流程,避免了写 WAL 日志、写内存、刷盘等操作,同时 RocksDB 的 Ingest 能够尽可能地将数据放在 LSM 结构中最底层的位置,减少 L0 到 Ln 层不断 Compact 带来的写放大。



Ingest SST 文件


Ingest SST 文件流程为:


  • 检查需要导入的 SST 是否合法,包括文件之间 Key 值是否有重叠,文件是否为空,ColumnFamilyID 是否合法等等。

  • 阻塞 DB 实例的写入操作,对可能与 Ingest 文件有重叠的 MemTable 进行刷盘操作。阻止 RocksDB 执行新的 Compact 任务导致 LSM 结构更新。

  • 确定 Ingest 的文件应该在磁盘 LSM 结构中的哪一层,RocksDB 会尽可能地将文件放在 Key 值不重叠的最底层。如上图所示,Key 值范围为[E, F]的 SST 文件将 Ingest 导入到了 L1 层;随后,根据当前存在的快照、LSM 组织形式等设置 SST 文件的元信息。

  • 将之前设置的阻塞标记全部删除。


总的来说,Ingest 导入是 RocksDB 的一个很关键的功能特性,适合用户数据的大批量写入。上述描述了一个将新文件 Ingest 到已存在的 DB 实例中的流程,可以看出是比较重的操作,除了会导致停写停 Compact,还会导致 MemTable 强制刷盘。所以对于每天更新的任务,我们完全可以每天往新的 DB 实例里导文件,这样就能避免很多的阻塞。

Map/Reduce 产出全局有序文件

从上述的 Ingest 文件可以看出,导入文件的堵塞需要付出比较大的代价,堵塞在线写和增大系统 Compact。我们可以通过往新 DB 实例中导文件避免堵塞写,通过保证 SST 全局有序避免系统 Compact。从 Hive 到 SST 这一步,我们依赖了大数据引擎进行 Map/Reduce,将原始数据作为输入,按照用户提交的拼接 Key 的方式,启动 Map/Reduce 任务直接构造最终 DB 需要的 SST 文件。

3. 系统架构:千磨万击还坚劲

经过上面的背景和技术细节,我们最终完成了如下图的系统架构。



一键式 DTS 平台——FastLoad 系统架构


整个系统分为以下几个模块:


  • 控制台服务:对外提供控制台表单和 OpenAPI 方式接入,提供创建任务、Schema 转换规则等服务。

  • 大数据调度模块:依赖 Hadoop 的计算资源,将 Hive 数据导出为我们需要的中间文件,在经过 Map/Reduce 的构建,生成全局有序的 SST 文件。

  • 文件下载模块:根据分布式存储的路由表,将 SST 文件下载到不同的存储节点。

  • 文件导入和 DB 切换:依赖上文提及的 Ingest SST 的方式,将文件一次性导入 DB 实例。为了避免上述提及的堵塞,我们提供往新 DB 实例导数据的选项,这样就可以避免因线上写而导致的堵塞,空数据也可以避免 Compact。假如选择了新 DB 导入的选项,最后还会有一次 DB 新旧实例的切换,相当于一次链接映射。

4. 总结展望:直挂云帆济沧海

基于 FastLoad 的数据传输给业务带来的收益

  • 大大缩短业务导数据耗时,1TB 数据平均导入时间为 1 小时;

  • 线上服务业务 300+,每天运行次数 1000+,每天导数据量 30TB+;

  • 服务稳定性达到 99.99%,上线运行 2 年无任何重大事故;

  • 高频运维操作一键自助完成,90% 的问题,5 分钟完成定位;

发展规划

  • 架构优化,整体架构目前依赖 Hadoop,可以考虑迁移到 Spark,提升运行效率;

  • 管控优化,提供更细致更全面的 FastLoad 监控和报表;

  • 多产品应用,目前 FastLoad 主要针对 NoSQL 和 NewSQL 两种场景,同比可以应用在 ES、MQ 等场景;

  • 新场景支持,离线数据的实时读取不仅对 OLTP 场景提供了更好的支持,也为接下来大热的 HTAP 场景提供了无限的可能。


作者介绍


赵锐,滴滴高级工程师


从事分布式存储 NoSQL/NewSQL 的相关研发,参与从零开始构建滴滴分布式存储 Fusion,有 PB 级别存储、千万 QPS 的存储经验。


本文转载自公众号滴滴技术(ID:didi_tech)


原文链接


https://mp.weixin.qq.com/s/geS5USJagRNFAk0qYJ40Cg


2019-10-02 08:002549

评论

发布
暂无评论
发现更多内容

基于时间维度水平拆分的多 TiDB 集群统一数据路由/联邦查询技术的实践

PingCAP

数据库 分布式 TiDB

聊一聊 C#异步 任务延续的三种底层玩法

EquatorCoco

C# 前端

推荐一个适合TikTok直播的海外直播专线

Ogcloud

海外直播专线 tiktok直播 tiktok直播专线 tiktok直播网络 tk直播专线

【YashanDB知识库】进行load data的时候报找不到动态库liblz4.so

YashanDB

数据库 yashandb

如何在 NocoBase 中开发插件发送 WhatsApp 消息?

NocoBase

开源 工作流 低代码 插件 无代码

显卡较量:AMD和英伟达哪个好?

Finovy Cloud

英伟达 AMD 显卡

PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”

PingCAP

数据库 开源 分布式 TiDB pingCAP

Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战

PingCAP

MySQL TiDB newsql

为什么软件测试开发需要智能体(AI Agent)?

测吧(北京)科技有限公司

测试

OpenAI O3模型:重构软件测试的未来

测试人

软件测试

【论文速读】| 利用大语言模型在灰盒模糊测试中生成初始种子

云起无垠

浅谈 2025 年加密货币叙事中的「真相」和「谎言」,哪些叙事值得关注?

TechubNews

研究报告 #区块链 #Web3

【YashanDB知识库】如何解决删除分区后索引失效问题

YashanDB

数据库 yashandb

使用海外直播专线,拓展直播带货的海外市场

Ogcloud

海外直播专线 海外直播 直播专线 海外直播网络 海外直播IP

桌面贴纸工具Desktop Stickers for Mac激活版

小玖_苹果Mac软件

【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错

YashanDB

数据库 yashandb

免费下载|《可观测性体系建设100问》全册解锁!

博睿数据

全球领先光伏企业的碳管理进阶之旅

AMT企源

碳管理

剪贴板文件笔记快捷工具Unclutter for Mac激活版

小玖_苹果Mac软件

软件提取工具Pacifist for Mac激活版

小玖_苹果Mac软件

TiDB 8.5 LTS 发版——支持无限扩展,开启 AI 就绪新时代

PingCAP

数据库 AI 分布式 TiDB

年度人力费用你管对了吗?

AMT企源

企业管理 人力成本管控 人力费用

G1原理—G1是如何提升分配对象效率

不在线第一只蜗牛

Java 算法 JVM

贝锐花生壳简单3步映射金蝶KIS接口,实现财务凭证远程同步

贝锐

内网穿透 金蝶

浏览器缓存清理工具Cookie for Mac激活版

小玖_苹果Mac软件

智慧公厕2.0:未来城市公共卫生空间的新探索

光明源智慧厕所

“领导企业转型必修课” 3月1-2日敏捷领导者(CAL1)认证周末班

ShineScrum

Scrum 敏捷 敏捷领导力 敏捷培训

RAG的技术困境:为何单纯依赖向量嵌入不可靠?

Baihai IDP

人工智能 程序员 AI LLMs rag

【YashanDB知识库】YMP在迁移过程中,遇到报错:failed to open file /qianyi/ymp/ymp_23.3, errno 2, error message "No such file or directory".

YashanDB

数据库 yashandb

【YashanDB知识库】如何输入小写表名的函数参数

YashanDB

数据库 yashandb

多样化消息通知样式,帮助应用提升日活跃度

HarmonyOS SDK

HarmonyOS

滴滴海量离线数据的在线化 — FastLoad_语言 & 开发_赵锐_InfoQ精选文章