AI与BI的现有系统如何整合?
打破 AI 与 BI 的底层壁垒:基于 Ray + Lance + Iceberg 的多模态数据湖架构实践
在企业数字化转型的深水区,数据架构正在经历一次深刻的裂变。一方面,基于结构化数据的 BI(商业智能)体系已经非常成熟;另一方面,以大模型和多模态为核心的 AI 业务正在狂飙突进。
然而,当我们要将 AI 和 BI 结合时,底层的存储和计算瓶颈却暴露无遗。本文将深入探讨一种业界前沿的多模态数据湖(Multimodal Data Lake)架构,看看如何通过 Ray on EKS + Lance + Iceberg + Trino 的技术栈组合,彻底打通非结构化与结构化数据的任督二脉。
1. 业务的痛点:当传统数据湖遇到 AI
在构建现代 AI 应用(如音视频智能分析、多模态 RAG、精准推荐)时,传统基于 Parquet 或 ORC 格式的数据湖仓往往显得力不从心:
多模态数据存储与检索极其低效: 传统列式存储并不擅长处理超长文本、海量图片和高维特征向量(Embedding)。读取带有百兆级别大字段的表时,内存极易溢出(OOM)。
探索新特征的成本高昂(Schema 僵化): 算法团队经常需要迭代模型(如上线 v2 版本的 Embedding 算法)。在 Parquet 中新增一列特征,往往意味着要重写数十 TB 的历史数据。
AI 与 BI 的“数据孤岛”: 数据分析师用 SQL 在 Iceberg 里查用户画像,算法工程师用 Python 在 S3 里捞原始视频。当业务需要进行跨界联动(例如:“找出所有高净值用户看过的、且情绪被识别为‘积极’的视频”)时,由于缺乏统一的元数据和联邦查询能力,只能靠写胶水脚本做低效的数据搬运。
2. 设计与方案:双轨制并行的数据底座
为了解决上述痛点,我们需要打破“一个格式打天下”的迷思,采用**“底层存储统一、中间格式分流、上层计算按需调用”**的设计哲学。
统一存储与元数据层: S3 作为唯一的 Single Source of Truth,结合 AWS Glue Data Catalog 作为全局统一的数据字典。
双轨制存储格式:
Iceberg 层 (BI/分析侧): 负责承载强约束、需要 ACID 事务支持的结构化数据(如用户标签、交易流水)。
Lance 层 (AI/多模态侧): 替代 Parquet,专门存储非结构化数据。Lance 的按列排列和碎片管理机制,天生支持高维向量的快速随机访问(Random Access),且支持零拷贝(Zero-copy)的动态列扩展。
异构计算与联邦查询层:
Ray on EKS: 作为 AI 处理引擎,混合调度 CPU 和 GPU 节点,从 S3 并发拉取非结构化数据,执行预处理、模型推理(提取 Embedding),并利用 Lance 的高 I/O 原生接口流式写入 S3。
EMR Trino: 作为联邦查询引擎,打破 AI 与 BI 的界限。分析师可以直接写 SQL 对 Iceberg(结构化)和 Lance(非结构化特征)两张表执行 JOIN 操作。
生命周期管理: 结合 S3 的冷热分层(Intelligent-Tiering 与 Glacier),并通过 Ray 定期执行 Lance 碎片的 Compaction(合并压缩),实现极具性价比的海量数据归档。
3. 架构图:平行的计算与存储宇宙
在这个架构下,AI 和 BI 不再是上下游的附庸关系,而是共享底层数据底座的平行宇宙。
Plaintext
1 | AI & Apps Layer BI & Analytics Layer |
4. 行业先锋实践案例
这套架构并非空中楼阁,国内外头部科技企业已经在使用类似的技术栈重构其数据湖:
Netflix (Media Table 实践): Netflix 构建了大规模的 Media Table,将视频的 URI、基础元数据和各种机器学习模型输出的特征(Embedding)统合存储。通过类似 Lance 的格式特性,算法团队可以在不重写底层原始大文件的情况下,极其轻量地动态增加列,极大地加速了新推荐特征的探索与上线。
Bilibili (基于 Ray + Lance 的底层数据湖): B站面临着海量视频、弹幕等多模态大向量的存储与计算挑战。他们引入了 Ray + Lance 技术栈。Ray 提供了极致的分布式计算扩展性,而 Lance 彻底解决了传统格式处理大向量时的 I/O 拥堵问题,实现了灵活的 Schema 扩展和高效的 AI 模型训练数据投喂。
5. 方案的短板与落地防坑指南
没有任何架构是银弹,在落地这套前沿方案时,仍需正视以下短板与挑战:
Trino 并非向量数据库: Trino 能够完美执行跨界 JOIN(例如匹配用户 ID),但绝对不能用 Trino 去执行底层的 KNN(K-近邻)高维向量相似度检索。复杂的向量计算仍需推回给在线的 Vector DB(如 LanceDB、Milvus)或在 Ray 任务中完成。
S3 API 限流与海量小文件灾难: 当并发处理数亿张小图片或音频切片时,极易触发 S3 的
503 Slow Down。必须在接入层做好合并(Batching/Tarball),或者在 EKS 引入分布式缓存(如 Alluxio)。跨模态的数据一致性黑洞: Iceberg 和 Lance 是两个独立的格式层,缺乏全局的分布式事务锁。如果 BI 侧的用户状态已更新,而 AI 侧的向量特征未重算,Trino 查询时可能会出现短暂的数据“错位”。这需要上层的数据编排工具(如 Airflow/Dagster)来保障任务链路的强一致性。
缺乏亚秒级实时能力: 这本质上依然是一个以批处理和微批处理(Batch / Near-line)为主的数据湖仓架构。如果业务需要毫秒级的事件驱动反馈,还需要额外挂载 Flink + Kafka 组成的流计算引擎。