编者按:过去 3 年天数里,Apache Doris 已经在华为外部得到了广泛的应用领域,支持了集团统计数据看板、网络电视广告/电视广告 BI、新零售、采用者犯罪行为预测、A/B 实验网络平台、李祖泽Isson、华为Isson、采用者肖像、华为厚积薄发等华为外部十多个销售业务,并且在华为外部形成了一套以 Apache Doris 为核心的统计数据自然生态 。责任编辑将为大家撷取华为采用者犯罪行为预测网络平台如前所述 Apache Doris 向定量版的改建课堂教学,包括统计数据存储构架和查阅服务构架的重构与改建经验撷取。
作者|华为统计数据智能化部开发技师 汤佳树
华为采用者犯罪行为预测统一网络平台是如前所述海量统计数据的一站式、全情景、多模型、多方位、自助大统计数据智能化洞悉预测服务网络平台,交会各种类型统计管理工具,展开加工处理、预测挖掘和建模展现出,满足各种类型采用者在采用者洞悉情景下的统计数据预测应用领域市场需求,提供高效率无与伦比的预测新体验。
销售业务市场需求
网络平台能如前所述统计数据展开天数预测,存留预测,分布预测,棒状预测等,销售业务方主要如前所述该事件进行预测,该事件是跟踪或历史记录的采用者犯罪行为或销售业务过程,能是单个该事件也能是多个该事件组合的交互式该事件。
且里面单厢包含五要素:
Who:即参与那个该事件的采用者是谁,比如采用者的唯一 IDWhen:即那个该事件出现的实际天数,比如time表头,历史记录精确到微秒的该事件出现天数Where:即该事件出现的地点,比如根据 IP 导出出的省市和城市How:即采用者从事那个该事件的方式,比如采用者的设备,采用的应用程序,采用的 App 版等等What:描述采用者所做的这件该事件的概要,比如点选类型的该事件,须要历史记录的表头有点选 URL,点选 Title,点选位置等统计数据如前所述 OLAP 发动机 Doris 展开储存,随着网络连接销售业务急速激增,且网络连接的销售业务规模急速收缩,Top 级应用领域能达至 100 万条/天,查阅阻力和天数相继增大,采用者对查询传输速率的聊著为数不少,我们急迫的须要提高查阅性能来提高采用者的新体验。
关键点难题
针对于销售业务市场需求,我们总结了以下关键点难题:
为了实现复杂的销售业务市场需求,OLAP 预测发动机须要存留、棒状等预测函数支撑。存量统计数据100亿/天,引入阻力大,部分销售业务要求统计数据引入不丢太重。销售业务网络连接急速激增,统计信息量收缩,须要 PB 级的统计数据下的互动式预测查阅达至以单积极响应。为了解决以上的关键点难题,我们对比了多款 OLAP 预测发动机,最终选择了 Apache Doris。Doris 提供了存留、棒状预测等函数,极大程度的简化了开发的成本。在统计数据引入的过程中,我们尝试 Doris 刚推出的 Merge On Write Unique Key 引入模型,能抗住100 亿/天的存量统计数据阻力。针对于向定量查阅发动机的改建也是的性能较之前的版有3-5 倍的提高。
构架重构
一个优秀的系统离不开持续迭代与重构。为了更好的满足销售业务市场需求,我们在储存构架与查阅发动机两个层面上急速展开尝试,华为采用者犯罪行为预测系统在上线后,目前已完成 3 次改建,以下将为大家介绍改建历程。
统计数据储存结构:统计数据构架的重构
在华为的采用者犯罪行为预测网络平台中,原始统计数据通过华为自研的消息队列 Talos,在 Flink 中清洗与建模后,被下游的 Doris 与 Hive 消费。全量的统计数据会储存在 Hive 中,展开批量 ETL 或历史统计数据召回的查阅。实时存量统计数据被储存在 Doris 中,用来做热统计数据的查阅操作。如前所述冷热统计数据分离的构架,我们展开了 3 次构架的重构。
第一阶段:如前所述明细宽表的查阅
在最初的阶段我们采用了如前所述明细的宽表查阅模式。为了处理灵活多样的预测请求,在系统中,我们配合统一埋点网络平台处理统计数据,网络连接的 OLAP 的统计数据是直接埋点的全表头展平。在入库之前,我们在 Flink 中将统计数据打平,以宽表的模式储存在 Doris 明细表中。根据查阅的市场需求,我们将经常采用的列作为建表的维度列,利用前缀索引的特性展开查阅加速。但某些头部大统计信息量销售业务容易查阅多天统计数据,一个大查阅可能就会将集群资源占满甚至导致集群不可用,且查阅耗时相当之久。
第二阶段:如前所述聚合模型的查阅加速
在改建的第二阶段,我们采用了聚合模型对销售业务查阅展开加速。我们对网络连接犯罪行为预测的应用领域展开统计预测,绝大多数网络连接犯罪行为预测的应用领域统计信息量在 1 亿/天统计信息量以内。对于部分采用频率较高的表,我们采用聚合表完成查阅加速,对单天统计数据量超 10 亿且高频的头部应用领域做聚合表加速。具体流程为根据统计信息量挑选出头部应用领域,对其展开表头导出,并挑选出常用指标及维度,由 Hive 表统计数据展开聚合 T-1 产出统计数据,最后写入到 Doris 中,进行查阅加速。该阶段的改建解决了集群头部销售业务大查阅的难题,此时虽然独立集群储存没难题,但由于其他销售业务网络连接后还会持续增加统计信息量和埋点表头 ,这样会导致元统计数据最先进入瓶颈。
第三阶段(当前阶段):销售业务适配的建表改建
当前阶段,我们对销售业务市场需求展开深度导出后重新规划了建表结构。我们对某些应用领域的埋点表头展开预测,发现有些采用者埋点表头多达 500+,但在犯罪行为预测里实际用到的可能只有 100+,这显然有所浪费。所以我们与采用者沟通调研市场需求,配合犯罪行为预测网络平台侧的能力,采用者可在网络平台对有用该事件和属性展开筛选,同时设置表头映射和过滤逻辑,然后再展开建表。
查阅服务构架:查阅发动机的改建与重构
我们如前所述销售业务深度改建了查阅的服务构架,构建了新的查阅发动机构架,实现 SQL 的权重、路由、缓存和资源调度操作。根据查阅条件,路由发动机会将 SQL 拆分成多条子查阅,在 Doris 或 Hive 中执行后,将子查阅的结果汇总,得到最终的结果。针对查阅发动机,我们也展开了 3 次技术构架的改建。
第一阶段:如前所述集群粒度的查阅资源管理
我们对集群粒度展开查阅资源管理,在资源调度中,我们会给每一个 Doris 集群设置一个总的资源池大小(根据集群能力和测试展开定量),根据统计信息量大小和查阅天数对每个 SQL 展开加权,并对资源池的最大最小并行 SQL 数展开限制,如果计算的 SQL 超过限制则展开排队。其次,还会利用 Redis 对统计数据展开 SQL 级别缓存。
第二阶段:如前所述 SQL 路由的改建
为适配聚合表加速做了路由层,提高缓存命中率和利用率,此阶段拆分原始提交 SQL,如前所述指标展开缓存,粒度更细,服务端可根据指标展开适当计算更易于缓存命中。值得一提的是排队天数往往会比较长,有些情景下可能会展开重复提交或拆分成同样的 SQL,为了提高效率率会在 SQL 排队前和排队后各展开一次缓存校验。
第三阶段(当前阶段):如前所述 SQL 权重的改建
整体架构方面,由于采取了筛选埋点表头而非全量表头引入 Doris,针对头部难题采用者,我们会如前所述查阅历史统计指标及维度,根据指定的某些规则展开默认初始化操作,并以此沟通采用者并展开引导升级。此外为了更精细的控制资源调度,本阶段对对 SQL 内容展开加权,如含有DISTINCT,LIKE,VARIANCE_SAMP等字样再加权。对于资源消耗较大的操作,如 DISTINCT,会给予更高的权重,调度发动机在执行时会分配更多的资源。
课堂教学应用领域
统计数据建模
对销售业务来讲,预测查阅须要较高的灵活度,且是对采用者粒度展开预测,所以须要保留较多的维度和指标,我们选用 Doris 作为储存查阅发动机,且采用明细表建模,这样能保证采用者能够根据预测市场需求查出统计数据。另一方面,由于查阅预测是一个延时要求较高的产品,对于统计信息量大、查阅天数多、语句复杂的情况,查阅延时会很高,所以对于头部应用领域,我们根据高频指标维度展开了聚合表模型建模。
CREATE TABLE `doris_XXX_event` (`olap_date` bigint(20) NOT NULL COMMENT “”,`event_name` varchar(256) NOT NULL COMMENT “”,`uniq_id` varchar(256) NOT NULL COMMENT “”,`dim1` varchar(256) REPLACE NULL COMMENT “”,`dim2` varchar(256) REPLACE NULL COMMENT “”,`cnt` bigint(20) REPLACE NULL COMMENT “”,`index1` double REPLACE NULL COMMENT “”,`index2` double REPLACE NULL COMMENT “”,) ENGINE=OLAPAGGREGATE KEY(`olap_date`, `event_name`, `uniq_id`)COMMENT “OLAP”PARTITION BY RANGE(`olap_date`)
统计数据引入
明细表部分,我们网络连接 Json 格式 10 次仍然失败,会将统计数据按照应用领域粒度存入 HDFS,并在凌晨定时调度任务重新写入 T-1 未写入的统计数据。聚合表部分,我们由 Talos 落盘的 Iceberg 表,每日展开 T-1 统计数据的聚合,根据服务端选取的维度和指标,以及聚合类型(count ,count distinct , sum ,max ,min ),展开聚合存入中间 Hive 表,再由统一引入 Doris 程序展开引入。
统计数据管理
明细统计数据和应用领域聚合表分库储存,TTL 均为 33 天。统计数据表会有统计数据质量监控,如果总行数或者设置指标环比波动太大,会展开告警人工介入确认统计数据是否有误,视紧急程度展开回补处理。
统计数据查阅及应用领域
绝大多数采用者会锚定该事件,展开含指标聚合,去重采用者数(几乎占总查阅的 50%)的该事件犯罪行为预测,同时还会有存留预测,棒状预测,分布预测等预测类型。
建表模型的维护
为了适配销售业务的变更,上游的埋点信息会周期性的更新。原有的表结构须要展开变更以适配埋点的增加。在过去的 Doris 版中,Schema Change 是一项相对消耗较大的工作,须要对文件展开修改。在新版中开启 Light Schema Change 功能后,对于增减列的操作不须要修改文件,只须要修改 FE 中的元统计数据,从而实现毫以单的 Schame Change 操作。
应用领域现状
华为目前在300多个销售业务线上线了 Doris 集群,超过1.5PB的销售业务数据。在初期我们选择了两个采用较为频繁的集群展开向定量升级。
现迁移 Doris 向定量集群的犯罪行为预测销售业务有 2 个,7 天存量统计数据的平均值在百亿左右,储存空间占用7T/天左右。在升级到向定量的版后,存储资源有较大的节省,只须要原有集群约 2/3 的储存空间。
性能提高请求粒度
升级 Doris 向定量版后,犯罪行为预测网络平台以请求粒度统计查阅耗时 P80 和均值,P80 耗时下降 43%,平均耗时下降 27%;统计口径:汇总 12.07-12.11 期间,犯罪行为预测请求粒度查阅执行天数。
SQL 粒度
升级 Doris 向定量版后,犯罪行为预测网络平台以SQL 粒度来统计查阅耗时 P80 和均值,耗时 P80下降 70%,平均耗时下降 54%。统计口径:汇总 12.04-12.11 期间,犯罪行为预测 SQL 粒度查阅执行天数(未含排队)
升级 Doris 向定量版后,犯罪行为预测网络平台以SQL 粒度统计查阅耗时 P80 和均值,耗时 P80下降 56%,平均耗时下降 44%;
统计口径:汇总 12.02-12.11,犯罪行为预测 SQL 粒度查阅总天数(含排队)
去重优化
在 ID-Mapping 的时候,通常须要针对 ID 展开去重操作。在最初我们采用了COUNT DISTINCT来完成去重。
SELECT a.`olap_date` AS `time`,count(distinct a.`distinct_id`) AS distinct_idFROM analysis.doris_XXX_event aWHERE `a`.`olap_date` BETWEEN 20221218 AND 20221220 ANDa.`event_name` IN(XXXX, XXX, XXX, XXX) ANDGROUP BY 1ORDER BY 2 DESCLIMIT 10000
在经过优化后,我们采用子查阅+ GROUP BY来替代COUNT DISTINCT的功能
SELECT z.`time`,count(distinct_id) var1FROM (SELECT a.`olap_date` AS `time`,a.`distinct_id` AS distinct_idFROM analysis.doris_XXX_event aWHERE `a`.`olap_date` BETWEEN 20221218 AND 20221220 ANDa.`event_name` (XXXX, XXX, XXX, XXX) ANDGROUP BY 1, 2) zGROUP BY 1ORDER BY 2 DESCLIMIT 10000
相较于原有的COUNT DISTINCT,采用子查阅+ GROUP BY 的模式性能有1/3 的提高。
未来规划
在过去的三年天数里,Apache Doris 已经在华为外部得到了广泛的应用领域,支持了集团统计数据看板、网络电视广告/电视广告 BI、新零售、采用者犯罪行为预测、A/B 实验网络平台、李祖泽Isson、华为Isson、采用者肖像、华为厚积薄发等华为外部十多个销售业务,并且在华为外部形成了一套以 Apache Doris 为核心的统计数据自然生态 。随着销售业务的持续增长,未来我们会进一步推动华为的其他销售业务上线向定量版。
非常感谢 Apache Doris 社区与 SelectDB 公司的鼎力支持,华为集团作为 Apache Doris 最早期的采用者之一,一直深度参与社区建设,参与 Apache Doris 的稳定性打磨,未来我们也会密切联系社区,为社区贡献更多的力量。