作者|腾讯音乐大数据架构师 张俊、罗雷
腾讯音乐娱乐集团(以下简称“腾讯音乐”)是中国在线音乐娱乐服务开拓者,有着广泛的用户基础,总月活用户数超过 8 亿,通过“一站式”的音乐娱乐平台,用户可以在多场景间无缝切换并享受多元的音乐服务。我们希望通过技术和数据赋能,为用户带来更好的体验,为音乐人和合作伙伴在音乐制作、发行、销售等方面提供支持。
SQL 查询平台:业务分析师根据需求进行 SQL 语句编写,对平台数据进行查询分析,每位业务人员都需要掌握 SQL,导致学习成本高、上手难度大。 固定看板(Dashboard):技术人员基于常规业务开发制作数据看板,虽然能够简化业务分析师查询的过程,但是看板制作成本高且灵活度低,当面对复杂的用户问题时,看板无法及时调整以满足需求变更。 定制分析工具:基于特定的业务需求,技术人员需要定制化开发产品分析工具,整体开发成本过高,且单一的开发工具不具备通用性,随着工具数量增加,操作介面变得散乱,从而降低业务效率。 人工跑数:当以上三个场景都无法满足业务需求时,业务分析师需要向技术人员提需求进行人工跑数,沟通成本过高、整体解决效率低下。
大模型 + OLAP :开启数据服务平台新模式
在大模型 + OLAP 架构方案中,目前经典方案如下图所示,大模型充当中间层将用户输入的自然语言转化为 SQL 执行语句,OLAP 作为底层存储和数据处理的引擎,负责接受和执行从大模型发送过来的 SQL 语句,对数据进行预聚合、多维分析等操作,满足大规模数据集的查询分析需求。
复杂数据口径不统一:大模型对于技术方面的词汇,如字段、行列、表等无法理解,相反对于业务方面的词汇,如公司收入情况、日活跃用户数量等能够提供有效翻译与转换。因此挑战之一是需要思考如何引导用户进入指标范围内提问,挑战之二是当用户存在对多种指标、多类指标查询时,需要考虑如何保持指标维度口径的统一、如何有效生成对应的指标计算公式。 模型处理效率较低:现阶段大模型虽然支持交互能力,但推理速度较慢,需要花费十秒级以上响应,用户每增加一个问题输入,就需要花费更多等待时间,使服务质量降低。同时大模型整体按照 Token 收费,使用量增加时也会导致平台成本升高。 私域知识无法识别:虽然大模型已经开展许多公开数据集的语言转换训练,但面对企业内部的大量专业术语仍无法很好地理解转化。以音乐内容数据库为例,大模型时常缺少对于某些冷门歌曲的认知,在问答过程中无法正确给出交互反馈,因此我们需要增强大模型对于私域知识的理解。 定制场景无法满足:大模型主要依据自身数据集进行回答,会出现“知识幻觉”(输出缺乏依据的内容)问题,我们需要允许第三方插件的接入使大模型得以联网,让用户借助内部插件完成更定制化、更多样的任务。因此如何接入、匹配并触发组件功能是我们的重点优化目标。
针对模型效率问题,我们的解决思路是对指标计算、明细查询、人群圈选等查询场景进行复杂度判定,将简单查询场景直接跳过大模型解析的步骤,进入底层 OLAP 进行处理分析,使大模型更加专注处理复杂查询场景。
为此,如上图所示我们在模型中添加人工经验判断。当业务分析师输入 “查询各大音乐平台收入”问题时,模型依据判定规则发现该场景只需要提供某个指标或几个维度即可完成,这时不需要将问题进入大模型解析,直接使用 OLAP 进行查询分析,能够有效缩短响应时间,提升结果反馈效率。此外,跳过大模型解析的步骤也能够节省 API 调用经费,解决平台使用成本升高的问题。
03 增加内容映射:处理私域知识问题
针对私域知识的问题,我们在大模型上游增加 Schema Mapper 、在外部建立业务知识库,将平台用户的问题与知识库进行连接,通过 Schema Mapper 判定是否存在部份文字能够与知识库内容匹配。如果匹配成功,大模型将进一步解析转化、OLAP 分析处理。Schema Mapper 与业务知识库的引入,有效解决了大模型对私域知识理解不足的问题,提升语言处理的效果。
目前,我们正在不断对 Schema Mapper 匹配准确性进行测试与优化,将知识库中的内容进行分类处理、字段评级等操作,同时将输入文本进行不同范围的内容映射(如全文本映射与模糊映射),通过映射结果来加强模型语义解析的能力。
04 插件接入:处理定制场景问题
Embedding 本地文本接入:该方式首先对本地文档进行向量化处理,通过语义向量搜索,找到本地文档中相关或者相似的词语进行匹配,之后将文档内容注入大模型解析窗口中生成答案。这种方式非常适合业务分析师希望将音乐内容数据库与最新政策等一类较为私有的文件结合完成查询需求。 ChatGPT 第三方插件接入:每款插件具备对应的 Prompt 与调用函数。业务人员在安装某款插件之后,在与模型对话中可以通过 Prompt 词触发函数开启调用。目前第三方插件类型丰富,涉及行业广泛,能够有效增加多元场景的处理与响应能力。
超音数平台框架构思
根据上述大模型 + OLAP 的四大解决方案进行了方案整合,以此进行框架设计并将其命名为超音数平台。大模型主要作用于自然语言与 SQL 分析语句的连接与转化,OLAP 引擎则作为数据存储与查询分析的核心基建。
用户输入问题通过 Schema Mapper 检索,判定字段是否匹配与业务知识库。 如若匹配则跳过大模型解析步骤,直接利用知识库中的指标计算公式触发 OLAP 进行查询分析;如若不匹配则进入大模型,开启下一步判定。 大模型首先通过人工经验判定问题复杂度,简单查询将指定 OLAP 引擎直接分析,复杂查询则开启语义解析形成 DSL 语句。 DSL 语句通过语义层进一步过滤、拆解关联查询场景,生成简易单表 SQL 语句以触发 OLAP 数据处理与查询加速。 针对需要与外部信息结合的查询场景,大模型会判断是否调用第三方插件来辅助完成查询。
以“某首歌曲能否在综艺节目播出”为例,在经过检索匹配、语义解析后,大模型选择利用 OLAP 数据查询与第三方版权行业插件结合的方式进行回答,最终呈现结果由数仓中的歌曲信息与插件判定结果构成。
如今,业务分析师只需要在超音数平台中定义指标含义、维度类型即可直接开展自然语言的问答交互服务。同时还可以在平台中内置插件、丰富指标市场来拓展语义解析能力,完全覆盖了业务在常规与定制化场景下的查询需求。平台基于大模型 + OLAP 的模式加速业务分析效率,减少技术开发成本,向智能化、个性化、实时化的全新业务服务模式更近一步。
在这里希望可以与大家分享该开源项目,让更多人体验和学习大模型构建,也欢迎感兴趣的读者们共同参与大模型开发与建设。
超音数开源框架:https://github.com/tencentmusic/supersonic
超音数平台框架演进
接下来我们将对比介绍 OLAP 早期架构与新一代架构在数据写入与查询两方面的差异,分享在架构演进过程中大模型 + OLAP 模型优化历程,最终助力超音数平台的构建,开启新一代的数据服务模式。
01 数据架构 1.0
我们初期的业务架构如上图所示,分为处理层、分析层、应用层三部份,用户文本在进入大模型之后解析为 SQL 语句使 OLAP 开始执行任务,具体的工作原理如下:
处理层:在 ODS- DWD- DWS 三层中将数据整合为不同主题的标签和指标体系之后,通过对 DWS 调度与采集所需字段,在 DWM 层将维度与指标数据加工成大宽表。
分析层:通过大宽表进入分析层,将数据导入 Clickhouse 与 Elasticsearch,其中 Clickhosue 主要负责维度与指标两类数据的查询加速,作为分析引擎为后续提供报表开发服务;Elasticsearch 主要负责维度数据处理,作为搜索/圈选引擎。
应用层:业务人员基于场景选取所需要的标签与指标,在应用层中创建数据集作为逻辑视图,同时可以二次定义衍生的标签与指标。
在实际业务使用中,早期架构的数据处理方式存在大宽表带来的数据延迟与存储浪费、多套组件导致架构冗余带来指标维度重复定义、学习与运维成本高等问题,具体如下:
数据延迟:处理层不支持部分列表更新,DWS 层数据写入产生延迟后会造成大宽表的延迟,进而导致数据时效性下降。
运维成本高:在处理层大宽表中维度数据量平均占一张大宽表的 50%,且在大部份情况下变化缓慢,这意味着每一张宽表的开发会将维度数据叠加,造成存储资源的浪费、维护成本增加;在分析层中存在多引擎使用的问题,查询 SQL 语句需要同时适配 Clickhouse 与 Elasticsearch 两个组件,增加人力成本,且两套组件也会加大运维难度,运维成本进一步升高。
架构冗余:在应用层进行指标与维度定义时,导致相同数据会进行多次定义使各种指标、维度定义口径不一致,造成权限不可控,例如上图所示的 T1 (标签)与 M1 (维度)在应用层中,被不同数据集多次定义。
02 数据架构 2.0
实时导入: Apache Doris 能够支持海量业务数据的高吞吐实时写入,时效性可以做到秒级完成导入。 引擎统一:支持 Multi-Catalog 功能,能够通过 Elasticsearch Catalog 外表查询,实现查询出口统一,查询层架构实现链路极简,维护成本也大幅降低。 查询分析性能:Apache Doris 是 MPP 架构,支持大表分布式 Join,其倒排索引、物化视图、行列混存等功能使查询分析性能更加高效极速。
分析层:引入 Apache Doris 替换 Clickhouse 组件,利用 Doris 的 Elasticsearch Catalog 功能对 Elasticsearch 外表进行查询,实现查询出口统一; 语义层:应用层不再需要创建数据集视图,直接通过语义层获取指标与标签内容执行查询任务,有效解决标签与指标口径问题。
03 数据架构 3.0
由于宽表开发过程中,维度数据一般变化较小、字符存储空间较大,且分析查询一般只需要查询最新的维度数据。在这种情况下,如果不断叠加维度数据制作宽表,会造成存储空间浪费的问题,同时查询响应速度也受到影响。
处理层:按照业务分类在 DWM 中将大宽表拆分成缓慢维度表与指标表,使两类表在本地 Hive 中进行关联,通过 Hive 导入 Apache Doris 分析层中加速任务; 分析层:将关联数据表直接导入 Apache Doris 中,结合语义层暴露指标与维度以实现语义统一,用户只需要通过过滤条件就能够直接查询数据,得到所需要的结果。
04 数据架构 4.0
分析层 + 处理层:数仓 DWD 层数据采用 Rollup 功能使事实表与维度表实时关联并创建多个视图进入 DWS 中。通过这种方式,分析层与处理层中的各类指标数据无需再重复定义,能够基于 Apache Doris 全部写入新建的 Rollup 视图中并利用 GROUP BY 将维度传入视图进行查询加速,直接对外暴露所需数据。 语义层:利用 Apache Doris 物化视图对指标与维度自定义口径,通过语义物化层进行查询加速,并将指标与维度通过 SUM 加工开发衍生标签与维度数据。 应用层:利用 Apache Doris 2.0 版本的倒排索引功能,对现有的索引结构进行丰富,满足了对知识库进行模糊查询、等值查询和范围查询等场景中的能力,进一步加速指标、维度查询响应速度。
Apach Doris 性能优化实践
01 Colocate Join 宽表优化
指标大宽表:采用 Apache Doris 的 Aggregate Key 模型,使用增量的方式将数据覆盖写入; 缓慢维度表:主要通过 start_date 和 end_date 的设置进行表建设,同时利用 end_date 进行分区,当我们需要查询最新的维度数据时只需要将 end_date 设置为 ‘9999-12-31’ 即可。此外我们引用 Doris 2.0 版本中的写时合并,利用 Unique Key 模型进行维度数据聚合,使查询性能在该场景中得到很大的提升。 对外访问视图:在指标与维度表建设完成之后,利用 CREAT VIEW 提供统一对外访问视图,同时添加 end_date 条件,使视图保持最新数据的展示。通过这样的方式不仅能够大幅度降低查询的复杂性,还能够充分利用 Doris 特性实现查询加速。
02 Rollup 解决指标膨胀问题
平台指标:覆盖四大音乐平台,包括酷我、QQ 音乐、酷狗、K 歌 内容指标:包含歌曲、歌手、专辑以及厂牌等数据
03 物化视图实现查询加速
Apach Doris 导入性能调优实践
目前,腾讯音乐具有 90+ 数据来源表、 3000 + 维度和指标、导入数据量达到千亿级别,我们希望数仓能够支持大规模数据快速导入,且导入过程中保证数据写入的准确性。
01 Flink Doris Connector 实现快写入
02 Doris Compaction 保证写入稳定性
Vertical Compaction 功能优势:在单次合并过程中,我们不需要再将所有的列读出,只需要加载部份列数据即可,这能极大减少合并过程中的内存占用问题,提高压缩的执行速度,实现在大宽表场景下的部份数据合并。 Segment Compaction 功能优势:在单批次大数据量的导入场景下可以有效减少 Flink 写入过程中产生的 Segment 数量,且能够使合并和导入两个过程并行,避免增加导入时间。
总结收益与展望
极速查询分析:通过 Apache Doris 的 Rollup、物化视图、倒排索引功能,由原来的分钟级查询时间达到现如今秒级毫秒级; 导入性能提升:导入优化完成后,原本 3000+ 维度、指标数据的导入时间需要超过一天,现如今能够在 8 小时内完成导入,导入时间缩短至原来的 1/3,实现快速导入需求;更重要的是,Apache Doris 在保证数据快写入的同时,使数据能够不丢不重、准确写入; 链路极简与统一:Apache Doris 将查询与分析出口引擎统一,去除 Elasticsearch 集群使架构链路极简; 存储成本降低:通过大宽表拆分的方式,使存储成本降低 30%,开发成本降低 40% 。
欢迎更多的开源技术爱好者加入 Apache Doris 社区交流群,携手成长,共建社区生态。Apache Doris 社区当前已汇集了上万名开发者和使用者,承载了 50+ 交流社群,如果你也是 Apache Doris 的爱好者,非常欢迎您的加入!
▼ 点击阅读原文,下载使用最新 Doris!
内容中包含的图片若涉及版权问题,请及时与我们联系删除
评论
沙发等你来抢