作者:王满,高级数据架构工程师
首汽约车(以下简称“首约”)是首汽集团为响应交通运输部号召,积极拥抱互联网,推动传统出租车行业转型升级,加强建设交通强国而打造的网约车出行平台。
在用车服务方面,包括了即时用车、预约用车、多日接送、包车业务、接送机、国际用车、城际拼车等用车服务场景,提供出租、畅享、舒适、商务、豪华、巴士等丰富车型。首汽约车还通过数据整合和智能科技陆续推出了学生用车、老人用车等产品来满足不同人群的出行需求。随着5G时代的到来,首汽约车还开启基于5G边缘计算的网约车移动业务试点项目,探索5G时代边缘计算在出行领域的应用和拓展,推动出行行业的发展升级,引领智慧交通时代。
1. 多维分析受限:从 2019 年到 2022 年初,业务数据量日增长近 10 倍,数据不断积累,分析维度不断细化,数据分析所涉及的维度越来越多。BI 层基于 Tableau Server 的多维分析报表,更新和查询效率都在变差,维度多的报表每天光刷新就需要几小时。而且基于 PrestoDB 实现的自助 SQL 查询平台并发性能较低,导致出现用户排队等待的情况,对业务方的工作效率产生了影响。
2. 指标复用性差,一致性难以保障:在业务实践过程中,派单策略、定价策略、风控策略上对实时特征的依赖日渐增加。由于缺失合适的存储层,原来使用 MongoDB 作为实时数据的存储层,无法存储大批量明细数据,只能存储维度聚合后的统计数据。因此,对于数据需求只能采用烟囱式开发,导致实时计算服务存在很多重复性开发,且数据指标的一致性难以得到保障。
3. 时效性低:企业的精细化运营越来越重要,但由于当前数据处理时效性不足,很多明细数据无法直接使用,近线数据的价值无法被充分利用;
4. 运维成本高:没有统一的 OLAP 引擎能满足大部分的分析场景,需要不同的组件搭建适配不同的业务场景,组件众多运维压力大,技术栈深且杂,业务开发学习成本高;
5. 灵活性差:单纯业务宽表场景下,业务维度变化时无法快速响应,计算模式不足以支撑越来越多的自助分析诉求。
为了给业务增长提供更强的助力,选择一款可以支持更灵活的数据模型、具有较强的并发查询性能、易于运维和使用的实时 OLAP 数据库产品,成为我们的工作重点。
统一的 OLAP 实时数据库选型
选型过程中,我们针对 StarRocks、ClickHouse、TiDB 做了一些调研和对比:
功能 | StarRocks | ClickHouse | TiDB、TiFlash |
标准 SQL | 支持标准 SQL,兼容 MySQL 协议 | 不完全支持 | 支持标准 SQL,兼容 MySQL 协议 |
分布式 Join | 支持 | 几乎不支持分布式 Join,推荐大宽表 | 支持 |
高并发查询 | 全面向量化引擎,提高并发查询量 | 不支持高并发,官方推荐 QPS 为 100 | 支持 |
运维 |
标准版:支持自动扩容、故障恢复,需要自己实现自动化部署,扩缩容节点、升级等,有一定开发工作 企业版:管理界面,提供集群 DashBoard、SQL Profile、监控报警等功能 |
依赖 Apache Zookeeper,运维成本高 |
运维方便 |
社区 | 开源活跃度高,社区论坛回复快 | 开源社区发展多年,但中文社区支持较少 | 开源社区积极良好 |
性能 | 读写性能好 |
单机性能强悍 读性能比 StarRocks 差一些 写性能好 |
轻量级分析良好,数据量大时性能不如 StarRocks 写性能受限于 TiKV,一般 |
场景 | 纯分析场景 | 纯分析场景 | 使用 HTAP 场景 |
其他 | 生态组件丰富 |
|
稳定性高 |
在 AP 业务中,不同于以点查为主的 TP 业务,事实表和维度表的关联操作不可避免。但在一些灵活度要求较高的场景,比如订单的状态需要频繁改变,或者说业务人员的自助 BI 分析,宽表往往无法满足我们的需求,我们还需要使用更为灵活的星型或者雪花模型进行建模。
ClickHouse 虽然提供了 Join 的语义,但使用上对大表关联的能力支撑较弱,复杂的关联查询经常会引起 OOM。所以如果使用 ClickHouse,需要在 ETL 的过程中就将事实表与维度表打平成宽表。而 StarRocks 提供了Shuffle Join、Colocate Join、Broadcast Join、Bucket Shuffle Join 等多种 Join 模式,对于提升联表查询场景性能有着非常大的优势。
#03
架构演进
—
目前主要是用 StarRocks 存储大量明细数据,利用时效性高的特点,替换了原有大数据架构分析层中依赖的 MongDB、MySQL、Redis 等数据库,从而避免了数据指标的重复开发,极大减少了快速变化业务下的复杂开发工作。 未来,计划利用 StarRocks 强大的物化视图、多种数据 Load 方式、外表能力,全面完成 Presto 的替换,进一步提升大数据的 Ad-Hoc 性能。
#04
基于 StarRocks 构建实时数仓
—
随着
数据的增长速度越来越快,精细化运营的诉求不断增加,传统的 T+1 离线数仓构建模式,很难满足业务运营的增长需求。越早洞察数据,越早拿到分析指标结果,才能帮助业务把握先机。数仓时效性由此逐渐从天级提高到小时级、分钟级乃至秒级。
于是,我们采用 StarRocks 构建了实时数仓 :
-
通过 FlinkCDC 从 Kafka 摄入业务数据写入 StarRocks,构建实时数仓 ODS 层;外部调度组件通过 SQL 完成 ETL 计算,然后通过微批方式写入 DWD 层;DWD 层进一步统计聚合写入 DWS,或者直接利用物化视图构建 DWS 层。
-
流式系统兼容,Flink/Spark Streaming 从 Kafka 摄入数据,进行业务计算;通过 StarRocks 提供的 Connector 将实时计算结果写入 StarRocks 实时数仓 DWS 层,在实时场景中实现统一 OLAP 分析。
#05
业务实践价值
—
场景 |
StarRocks (40C、128G 、2T*3) |
Presto+MongoDB (40C、128G 、2.5T*3) |
单表精确查询 | 1-10(ms) | 5-10(ms) |
单表统计查询 | 1-10(ms) | 20-60(s) |
单表范围+统计出查询 | 1-10(ms) | 5-10(s) |
联表查询(10亿 Join 300万) | 3s | 7(min) |
3. 在风控场景下,能否保障数据的实效性,对于企业损失控制具有重要意义。以司机运营活动的作弊识别为例,之前由于作弊识别滞后的时间较长,存在先发奖又扣走的情况,使得司机的体验变差,且有成本损失风险。将风控识别实时化后,能极大避免此类问题。再比如某些渠道待付率异常上涨,若能实时识别、及时干预,就可以减少不必要的损失。之前风控特征使用的是离线集群 T+1 产生的数据,且整个过程需要复杂代码才能实现。
4. 离线数据通过 Broker 导入时,会出现 BE 资源占有过高的问题。我们通过控制导入并发量等措施,保证了整个集群得以健康稳定运行。
#06
业务实践价值未来规划
—
总体来说,StarRocks 拥有优秀的功能和性能,迭代快速,社区活跃,服务体系良好,能够很好支撑首约大数据部门未来的规划。下一步我们将从以下几方面继续推进:
3. 加强 StarRocks 监控报警,包括数据接入、数据产出、任务监控等,及时干预,完善整体的运维体系。
未来,我们也更加期待 StarRocks 后续版本更加强大的功能特性:
4. 部分列更新不需要指定,可自适应需要更新列。