作者:旋宇,淘菜菜数据研发
前言:
阿里淘菜菜(简称 TCC)主营社区团购,其在阿里至多历经 6 年工夫,为了更好反对业务倒退,淘菜菜也在一直演进其技术架构。2020 年淘菜菜开始与 Hologres 单干,历经 2 次大的架构降级,从传统多组件的架构降级为当初稳固的高可用实时数仓 2.0,承载上千万 RPS 写入、几百 T 数据存储和秒级查问响应。在此单干过程中,淘菜菜技术团队一直积淀出实时数仓场景下的最佳实际、开发实际、开发标准等,基于此背景,咱们将会单干推出系列文章,介绍淘菜菜基于 Hologres 搭建实时数仓的最佳实际,内容将会包含架构降级、场景实际、容灾实际以及最近业界比较关心的老本治理等,冀望与更多的企业互通有无,在数仓建设上更加简略、不便、高效。
本期咱们将会带来系列文章第一篇:淘菜菜技术架构的前世今生 – 技术架构降级之路。
淘菜菜业务简介
阿里淘菜菜 (简称 TCC) 事业部的前身是盒马优选及批发通,2021 年初合并成立了淘菜菜事业部,次要做社区团购,和多多买菜、美团优选业务模式统一,主营生鲜和日销品,采纳次日达的配送形式为用户提供服务。2022 年开始和淘宝深度单干,作为淘宝生鲜和日销品类目标补充。目前淘菜菜属于稳固倒退阶段,微信、淘宝、淘特、支付宝等多渠道入口,日均用户访问量上千万,数据量约有几百 T。
倒退历程:从数据库到高可用实时数仓
为了反对淘菜菜丰盛的业务需要,其背地的技术倒退历经了最后的批发通原始数据库架构、批发通传统 lambda 架构、Hologres 实时数仓、Hologres 高可用实时数仓这 4 个阶段。
阶段 1:16 年之前原始架构 - jstorm 阶段
该阶段为实时数仓的初期建设,次要用于批发通团队的实时作战大屏,以及外围数据产品的报表看板等。技术计划采纳的 jstrom,有专门的实时团队同学反对,实时工作数 10 个以内,实时计算的资源在 3000+CU。
阶段 2:16-20 年传统架构 -FlinkSQL 阶段
16 年之后,批发通业务开始规模化增长,因而业务场景变得更加丰盛,包含实时大屏、实时营销流动剖析、渠道实时剖析等。这个阶段次要基于 Flink SQL 倒退,同时离线开发同学缓缓开始退出,和实时团队同学配合进行实时需要反对。直到到 19 年 B 系研发同学开始独立反对实时数据体系的建设,这个期间实时工作数快速增长到 500+。资源应用也比第一个阶段回升 30%。
阶段 3:20 年实时数仓 – Flink+Hologres 阶段
随着业务的疾速倒退,实时数仓的建设越来越臃肿,也开始呈现一些开发和运维问题。而过后 Hologres 也开始在团体内大面积推广,于是咱们开始思考用一套新的计划解决老架构存在的问题。因而这个阶段开始基于 Flink+Hologres 进行实时架构降级。
在这个阶段,批发通和盒马优选合并成淘菜菜团队。面对日益增长的数据,技术上次要要解决的问题就是实时开发提效,谋求高效率、高灵便,以此来满足淘菜菜所有小二实时 & 离线数据的查问需要,外围利用场景包含交易实时多维分析,物流供应链实时服务、指标核心自助剖析和离线报表减速等。
咱们用了一年的工夫(从 20 年 9 月到 21 年 9 月)实现了架构降级,通过新架构缩短了实时处理链路,进步数据处理效率,让实时数仓变得更加高效快捷。
阶段 4:21 年高可用实时数仓 -Flink+Hologres 读写拆散部署
21 年架构降级实现后,在新的阶段,咱们的外围指标就是晋升新架构的稳定性。同时业务倒退也逐步趋于稳定,除了惯例场景的反对,也开始参加双 11、双 12 等大促节日,因而老本的治理也开始提上日程,咱们冀望可能用最简略的架构,起码的资源撑持所有的场景。
在高可用稳定性方面,咱们应用写链路的主备链路,应用层应用 Hologres 多子实例共享存储的部署形式,主实例用于写,不同子实例用于不同场景的查问,这样做可能十分好的做到读写拆散、资源隔离以及开发生产隔离。
在老本治理侧,咱们次要采取了将闲置实时工作及时治理、Hologres 表存储优化等伎俩,21 年共计节约 200w+ 资源。
目前新的架构在淘菜菜业务稳固运行中,在本文中咱们将会介绍为什么要进行架构降级,以及架构降级后咱们遇见的挑战和对应的解决方案,以帮忙大家更简略高效的建设实时数仓。
淘菜菜实时数仓的典型利用场景
随着业务的倒退和合并,咱们总结了淘菜菜实时数仓须要反对的业务场景和背地须要的技术能力。
1、高管实时播报
场景阐明:淘菜菜外围数据实时查问,并且每日须要播报到高管钉钉群里,帮助管理层第一工夫做出业务决策。
特点:高保障、数据低提早、指标疾速勘误、问题疾速排查并复原
须要的技术能力:离线实时存储一体、列式更新、多表关联、即席简单查问
2、物流实时作业
场景阐明:供物流小二应用,联合出入库、仓库作业等实时数据帮助小二日常物流订单剖析、订单派送等。
特点:高稳固、继续的在线服务查问能力,长周期实时数据生产能力
须要的技术能力:高可用,可疾速主备切换、高效问题排查、物化视图
3、指标核心 & 自助剖析
场景阐明:配置外围指标和罕用维度的查问,自助生成多维报表,反对小二多维数据疾速看数,不便小二疾速做经营动作
特点:多维简单查问、大量 Distinct 去重、主动生成大 SQL
须要的技术能力:实时多维 OLAP 能力,大表关联能力
4、增长平台(试验平台 & 圈选平台)
场景阐明:为拉新和留存提供的数据增长平台,次要是提供不同试验的多维分析,同时也能反对标签圈选的能力,从而生成人群画像,帮忙业务精细化经营。
特点:多维分析、大数据量穿插(7 亿多数据量表关联)
须要的技术能力:多维 OLAP 灵便查问
5、小二日常看数报表(数来宝)
场景阐明:提供给行业、营销、用户、渠道、物流等小二日常看报表的能力,须要提供历史和实时数据的查问,同时报表可能疾速交付,满足小二的个性化剖析
特点:基于已有的基数数据可能疾速交付,灵便查问,缩短交付周期
须要的能力:表面减速、多维 OLAP
回顾:传统架构及遇到的问题
以下是 20 年架构降级之前的架构图:
能够看到为了反对好业务,整个架构还是比拟臃肿,采纳多套组件反对不同的场景,架构冗余,组件简单,随之而来带来的问题就是:
1、数据不统一: 数据团队和技术团队实时计划不统一,从底层音讯流的获取,到两头加工,再到最初的利用,别离用的自有计划,源、解决流程和逻辑不统一,经常出现数据不统一问题,须要破费较多人力去排查问题。
2、开发效率低下: 多维数据分析以及惯例开发模式须要别离进行开发,导致实时工作数变多,代码调试、数据测试等都比拟耗时,特地是数据测试,还须要写到对应的 db 中,而后进行核查,效率低下。
3、运维老本高:
- 1)工作排查耗时长:实时工作链路长,局部应用层 ADS 的设计达到 5 层,加上 ODS 和 DWD 总共达到 7 + 以上的档次,再加上有些工作自身逻辑简单,导致整个计算链路十分长。另外因为实时自身的 State 不可见,在问题排查的时候十分艰难,均匀一个问题定位到解决就须要半天以上,重大影响线上查问效率。
- 2)长周期回滚难:因为上游采纳的 TT 中间件(Datahub),只能回滚 3 日数据,对于长周期去重指标回滚就会有问题,同时为了保证数据一致性,须要另外将离线数据退出能力进行回滚。在压测的时候,上游的数据量不够,无奈达到压测预期,还须要额定造离线数据。
4、实时资源节约: 有些实时数据并不是高频应用场景,比方大促预热期的多维实时蓄水成果监控跟踪,日常根本没查问,仅在大促前两天须要应用,日常的实时计算就会导致节约计算资源。
20 年业务合并后,数据量变得更多,业务场景更加简单,传统架构无奈再持续满足需要,因而咱们迫切希望可能将现架构进行替换,以此来撑持更多的业务。恰逢过后 Hologres 在团体内大面积推广应用,因而咱们便开始了新架构的降级之路。
第一次架构降级:传统架构替换为 Flink+Hologres 实时数仓 1.0
面向公共层的对立数仓设计
引入 Hologres 后,新架构如下:
1、数据源对立
通过 TT(Datahub)来对立数据源的入口。因为原架构技术、算法都本人创立数据源,比方交易,技术会用 metaq、notify 等各种音讯队列,而数据团队通常会采纳 TT 获取 MySQL Binlog。ODS 源不统一,导致数据统计的时候存在一些差别,因而首先就是要进行数据源对立,保障所有整个事业部的数据源头对立。
2、存储对立:CDM/ADS 层降级为 Hologres
CDM 和 ADS 层对立用 Hologres 替换原架构的各种组件,其中:
1)CDM 设计为 Hologres 行存表
- 上游能够间接订阅 Hologres Binlog 作为输出应用
- 问题排查间接查问 Hologres 即可,不必再云存储到 MaxCompute 后解析
- 生命周期可设置多天,保留更久的数据,便于长周期指标计算和压测
2)ADS 采纳 Hologres 行存和列存联合对接利用查问
- 简化代码档次,明细数据或者轻度汇总数据间接写入 Hologres,而后前端调用时实时计算,保障用的时候才耗费资源,防止日常无人看的时候的计算资源节约
- 对于高并发点查场景采纳行存模式,保障在线服务的高并发查问
- 对于保障等级不同的利用进行实例隔离,如营销流动剖析等利用独立申请实例。
3、计算降级
1)实时计算降级
不同的实时工作进行独自分隔,互相计算不受影响,别离更新同一个表的不同字段。
- 运维独立,高效开发和运维;单个提早不会影响其余数据
- 前端调用简略,只须要从一个表中就能够获取所有数据
2)流批一体,计算对立、存储对立
- 实时计算实现后,间接通过同步工作写入 MaxCompute 上应用,不必再离线反复计算。
- 离线、实时数据雷同代码在 Flink 引擎上采纳流和批的形式别离执行,当实时数据呈现问题时,能够用离线数据间接笼罩 holo 的历史分区。保障了口径统一、存储统一、服务统一。
4、应用服务对立降级为 Hologres
1)OLAP 多维分析报表疾速搭建
基于 Hologres 列存实时宽表,用 FBI 疾速搭建多维的数据报表。比方:将交易明细间接存储到 Hologres 中,对应行业、品牌、区域、商家、商品等各种维度的随便穿插能够实现疾速的开发上线。
2)指标核心 & 自助剖析平台初步搭建
与技术单干建设指标核心,通过可视化的配置化形式进行指标的开发,保障指标口径的一致性,且反对业务自主抉择须要看的指标和维度。
遇到的挑战及应答计划
挑战 1:Hologres 随便应用带来的性能瓶颈
Hologres 初期估算只有 400cu,无脑应用产生性能瓶颈,在双 11 前的 B 系压测中就呈现 Hologres CPU 使用率间接继续到 100%,从而导致 Hologres 宕机的状况;另外 Hologres 的应用也没有几年,业务对于大促保障还不太熟悉。
应答计划如下:
- 首先遇到瓶颈的时候,通过文档及 Hologres 技术同学的调研,思考理论数据存储量、关联条件、写入 QPS/ 并发等,思考对数据的散布 Table Group 和 Shard count 进行优化。
- 其次,思考数据表自身优化计划,对多级索引进行优化,调整适合的表构造。
- 最初,散布和表构造自身做到极致优化的时候,思考到还是可能存在简单 SQL 高并发的时候,会对整个数据库造成压力,对于重要的数据利用就进行实例隔离。
挑战 2:ETL 逻辑后置带来的指标口径一致性问题
以往传统架构根本是先通过 Flink 计算好各个粒度指标之后,写入到对应的 MySQL/HBase 等数据库中,而后配置数据服务查问。而当初通过 Flink 计算的都是明细或者轻度汇总的数据,不会算出最终的指标,有一些逻辑片段后置到前端编写,在利用调用的时候实时计算,那么逻辑大量数据写到汇总层后,如何治理这些指标口径,保障指标计算逻辑的一致性呢?
应答计划如下:
1)数据监控
通过配置数据比对,比照雷同指标不同中央展现的差别值,而后进行巡检和预警。监控平台有:业界数据比照工具进行数据比对和监控。
2)与技术单干共建指标核心
根底明细和轻度汇总数据灌入指标核心库中,而后配置指标和粒度,在展现的时候间接计算。通过界面进行指标口径的治理,保障同一个指标只用配置一次,而后在不同粒度进行应用即可。
3)逻辑下沉
针对高频应用、多场景应用、性能较差的逻辑进行下沉,还是进行预处理,而后写入 holo;保障共性指标计算逻辑的一致性。
计划长处
降级后的架构带来的益处是:
1、架构对立: 对立了整个 BU 的实时架构,可能笼罩到所有的实时计算场景。
2、开发效率高:所见及所得的开发模式。SQL 写好间接能够用,省去开发、调试、公布、运行等较多实时开发环节的步骤。
3、档次少,运维高效:
- ADS 层能够大量间接从明细进行 olap 剖析,缩小 ads 多层计算的依赖,防止两头表的解决。
- 可有限回滚:hologres 作为中间件能够存储较长生命周期的数据,cdm 层能够存储更久的数据,利用应用的时候能够回滚更久的数据。
4、灵便扩展性强:OLAP 查问、点式查问等都能够反对。
5、实时离线数据能较好的联合:
- 既反对实时数据存储,又反对离线数据存储,同时还能实时更新或者离线更新,无需再直达数据,对立存储。
- 离线更新历史分区,实时更新当日分区,保障数据全副实时化且能够回滚。
第二次架构降级:Flink+Hologres 高可用实时数仓 2.0
在新的架构上线后,随着业务的倒退及利用大量应用,咱们又遇到了新的问题:
企业级稳定性和老本治理需要
问题 1:基于 Hologres 的实时架构稳定性危险减少
1)不标准
- 实时场景增长迅速,大量利用沉积到 Hologres 库中,实例配置不合理(计算资源配置,存储资源配置等)
- 不标准建表(散布键不平均、异样开启 binlog、TG 不合理等)
- 不同场景利用调用相互影响(点查、OLAP 简单查问在同一集群上),性能瓶颈时常导致机器异样,甚至所有利用临时不可用状况。
2)SLA 场景继续服务能力不足
- 实例挂掉后,因为数据量太对,实例资源大,重启复原太慢导致数据不继续可用,特地是物流场景须要全天继续服务的在线场景
问题 2:资源节约重大
- 多份 Hologres 实例,同一份数据,多份存储,开发投入减少,存储成本增加
- Hologres 表数据生命周期默认 100 年,60% 以上的表不设置无效的生命周期或者设置不合理
- 开启列存 Hologres Binlog,或者 Binlog 的生命周期设置太长(大于 90 天),导致存储减少
应答计划
1、降级为高可用实时数仓 2.0 架构
为了晋升稳定性,咱们将实时数仓 1.0 降级为高可用版实时数仓 2.0,采纳同城容灾、主备链路、多子实例等措施对架构降级,从而实现不同保障 SLA 利用隔离,新的架构如下:
其中,
1)公共层采纳主备链路
- 上海 region 的 TT 作为主链路。张北 region 作为备链路,次要凋谢最近 3 日的数据订阅。
- Hologres 行存实例作为第二条备链路,为上游提供长周期的 Binlog 日志订阅。
2)应用层采纳 Hologres 主从实例(1 主 3 从)和同城容灾
- 因为上游 TT、Flink 等次要资源都在上海,因而 Hologres 主实例选用上海集群。主实例只用于实时或者离线写入
- 3 个从实例别离用于不必业务的查问,比方报表查问,指标查问和在线服务,从实例和主实例共享存储,数据只须要存储一份即可
- 建设同城灾备实例,构建残缺的主备链路。
同时为了晋升稳定性,咱们还采取了以下措施:
1)事先标准: 制订严格的开发标准和公布红线,防止出现资源乱用、滥用的状况。
2)事中快恢: 设置指标告警,确保 3 分钟通过告警项发现问题,5 分钟染指进行排查,10 分钟内定位不到问题就启动应急预案,确保 30 分钟内回复
3)预先改善: 梳理业务查问场景,设置适合的表构造,防止出现慢 SQL 影响业务应用的状况。同时定期复盘问题,及时治理问题
2、老本治理
Hologres 表治理
- 通过 query 日志 hologres.query_log 查看 SQL 执行明细中的表拜访状况,最近 180 天无拜访的表进行清理。
- 设置适合表数据和分区表生命周期,防止出现过期表或者数据占用大量存储的状况
- 剖析型实例列存表异样开启 Binlog,导致存储资源耗费,重新制定 Binlog 开启准则以及 Binlog 生命周期设置正当的数值,升高存储。
计划长处
在实时数仓 1.0 的根底上,实时数仓 2.0 真正做到了写的主备疾速切换,和应用层的读写拆散,以及同城容灾,真正做到了高可用同,十分高效的晋升了零碎的稳定性,能更加专一于业务开发。
新一代实时数仓架构提效降本
1、高效反对业务看数
开发和运维提效,可能更加疾速的反对业务数据的查看、剖析及迭代。
- 反对各类量级数据: 反对 10 亿 + 的大数据量,并可能提供稳固的查看,不在须要额定减速或者分库分表。
- 反对各种类型场景: 行存反对点查,列存反对 olap,也能够行列共存;binlog 能力能够提供上游生产;物化视图等各种能力能够满足大量的场景,反对不同场景的利用。
- 疾速交付: 稳定性增强,更多场景可间接视图模式或者 FBI 数据集的形式搭建利用,数据服务 / 可视化的效率大大晋升。惯例利用间接表面就能够提供数据服务。
2、继续化数据服务能力
实时 &Hologres 月均异样次数从月均 5 次降落到月均 1 次以下,实例重启复原从 50min+ 缩小到 20min 复原,外围数据利用可保障 99% 继续可用。
- 反对业务指标继续跟进和决策
- 物流根据实时数据继续作业
3、老本投入升高几百万
- 通过继续的 Hologres 无用表、长周期表治理,实例日存储节俭 260T,21 年老本升高几百万元
将来瞻望
1、更加稳固
- 增强 Hologres 应用标准管控和监控治理,摸索 shard 多正本等多种稳定性保障计划,晋升危险评估,保障高稳定性
- 容灾计划欠缺,保障更加稳固
- 实例 & 表视角的危险评估、事先预警及事中复原机制增强
2、更加高效
- 摸索 Hologres 物化视图、schemaless、行列共存等多种计划,冀望可能疾速反对笼罩 100% 小二端 OLAP 类利用场景。
3、更加低成本
联合新财年估算状况对老本进行治理和治理,保障稳固的同时缩小节约。
- holo 存储计算治理
- 有效 holo 表辨认,长生命周期治理,其余存储异样辨认
- 动静扩缩容,实现老本和稳定性的衡量