Venice - 下一代衍生数据平台
在当今数据驱动的时代,如何高效地管理和利用海量衍生数据成为了许多大型企业面临的关键挑战。为此,LinkedIn开源了其内部使用的衍生数据存储平台Venice,旨在为业界提供一个强大而灵活的解决方案。本文将详细介绍Venice的设计理念、核心特性以及应用场景,展示其如何支撑起星球级的数据工作负载。
Venice简介
Venice是一个专门为处理衍生数据而设计的存储平台,具备以下几个关键特性:
- 支持从批处理和流处理源(如Hadoop和Samza)进行高吞吐量的异步数据摄取
- 通过远程查询或进程内缓存提供低延迟的在线读取
- 基于CRDT(Conflict-free Replicated Data Type)的冲突解决机制,实现跨区域的主动-主动复制
- 每个区域内支持多集群,并可由运维人员进行集群分配
- 在每个集群内实现多租户、水平可扩展性和弹性
这些特性使Venice特别适合作为特征存储(Feature Store)的有状态后端组件。AI应用可以将机器学习训练作业的输出数据输入到Venice中,然后在在线推理工作负载期间查询这些数据。
Venice的写入路径
Venice的写入路径可以分为三种粒度:完整数据集交换、向现有数据集插入多行数据、以及更新某些行的部分列。这三种粒度都支持通过Hadoop和Samza进行操作。此外,任何服务还可以使用Online Producer库异步生成单行插入和更新。
混合存储
Venice支持在单个数据集中混合使用上述三种写入操作粒度。这种既接收完整数据集交换又接收行插入或行更新的数据集被称为"混合"数据集。
在配置混合存储时,一个重要的概念是"回溯时间"。它定义了在交换新一代数据集时,应该回溯多长时间的最近实时写入并应用到新数据集之上。
利用这种机制,可以将流处理作业的输出叠加在批处理作业的输出之上。如果使用部分更新,那么某些列可以实时更新,而其他列则通过批处理更新,这两组列可以根据需要重叠或互斥。
写入计算
Venice的写入计算包括两种操作:
- 部分更新:设置值中特定字段的内容
- 集合合并:在集合或映射中添加或删除条目
需要注意的是,目前写入计算仅支持主动-被动复制模式。支持主动-主动复制的功能正在开发中。
Venice的读取路径
Venice支持以下读取API:
- 单一获取:获取与单个键关联的值
- 批量获取:获取与一组键关联的值
- 读取计算:对与一组键关联的值的字段进行投影和/或计算某些函数
在使用读取计算DSL时,Venice当前支持以下函数:
- 点积:对存储在给定字段中的浮点向量与查询参数中提供的另一个浮点向量执行点积,并返回结果标量
- 余弦相似度:对存储在给定字段中的浮点向量与查询参数中提供的另一个浮点向量执行余弦相似度计算,并返回结果标量
- 哈达玛积:对存储在给定字段中的浮点向量与查询参数中提供的另一个浮点向量执行哈达玛积,并返回结果向量
- 集合计数:返回存储在给定字段中的集合中的项目数
客户端模式
Venice提供两种主要的数据访问模式:
-
经典Venice模式(无状态):
- 可以对Venice的分布式后端服务执行远程查询
- 如果在此模式下使用读取计算操作,查询会被下推到后端,只有计算结果会返回给客户端
- 有两种客户端可以执行此类远程查询: a) 轻量级客户端:最简单的客户端,将请求发送到路由层,然后路由层将请求发送到服务器层 b) 快速客户端:这种客户端了解分区情况,因此可以直接将请求发送到正确的服务器实例,跳过路由层(注意:此客户端仍在开发中,可能不如轻量级客户端稳定或功能完备)
-
Da Vinci模式(有状态):
- 可以预先加载部分或全部数据集分区,并对结果本地缓存执行查询
- 数据的后续更新会继续流入并应用到本地缓存中
这些客户端的特性对比如下:
客户端类型 | 网络跳数 | 典型延迟(p99) | 状态占用 |
---|---|---|---|
轻量级客户端 | 2 | < 10毫秒 | 无状态 |
快速客户端 | 1 | < 2毫秒 | 最小(仅路由元数据) |
Da Vinci客户端(RAM + SSD) | 0 | < 1毫秒 | 有限RAM,完整数据集在SSD |
Da Vinci客户端(全内存) | 0 | < 10微秒 | 完整数据集在RAM |
所有这些客户端共享相同的读取API,这使得用户可以在不需要重写应用程序的情况下,调整其成本/性能权衡。
Venice的应用场景
Venice作为一个强大的衍生数据平台,在多个领域都有广泛的应用:
1. AI和机器学习
作为特征存储的后端,Venice可以存储和提供机器学习模型所需的特征数据。AI团队可以将其训练作业的输出存储在Venice中,然后在在线推理过程中快速检索这些特征。这种架构大大提高了AI应用的效率和响应速度。
2. 实时数据分析
Venice的低延迟读取和实时更新能力使其成为实时数据分析系统的理想选择。企业可以利用Venice存储和查询实时指标、用户行为数据等,支持快速决策和实时仪表板。
3. 个性化推荐系统
利用Venice的高性能读写能力,企业可以构建复杂的个性化推荐系统。Venice可以存储用户画像、商品特征等数据,并支持快速的相似度计算,为用户提供实时、个性化的推荐结果。
4. 大规模配置管理
对于需要管理大量配置数据的系统,Venice提供了一个可靠的解决方案。它支持频繁更新和快速读取,同时保证了跨区域的一致性,非常适合存储和管理全局配置、特性开关等数据。
5. 时序数据存储
虽然Venice不是专门为时序数据设计的,但其灵活的数据模型和高吞吐量的写入能力使其也能很好地处理时序数据。企业可以利用Venice存储和查询大量的传感器数据、日志数据等。
Venice的部署和使用
要开始使用Venice,可以参考官方提供的快速入门指南。该指南将帮助你创建自己的Venice集群,并演示如何创建数据存储、执行批量推送、增量推送以及单一获取等操作。
Venice团队建议使用最新的稳定版本来开始你的Venice之旅。这可以确保你获得最新的功能和性能改进,同时避免可能存在的实验性功能带来的不稳定性。
Venice社区和资源
Venice拥有一个活跃的开源社区,为使用者和贡献者提供了丰富的资源和支持渠道:
- Slack工作区: 加入Venice的Slack社区,与其他用户和开发者实时交流
- LinkedIn群组: 关注Venice的最新动态和讨论
- GitHub Issues: 报告问题或提出功能请求
- 贡献者指南: 了解如何为Venice项目做出贡献
- 贡献者协议: 了解参与Venice开发的准则和流程
此外,Venice项目还提供了多个渠道来跟踪其进展和社区动态:
- 官方博客: 深入了解Venice的技术细节和最新进展
- LinkedIn页面: 关注Venice的公司动态
- Twitter账号: 获取Venice的实时更新和快讯
- YouTube频道: 观看Venice相关的技术讲座和教程视频
结语
Venice作为一个面向星球级工作负载的衍生数据平台,展现了其在处理大规模数据方面的卓越能力。它不仅为AI和机器学习应用提供了强大的基础设施支持,还在实时数据分析、个性化推荐等多个领域发挥着重要作用。
随着数据规模和复杂性的不断增长,Venice这样的高性能、灵活的数据平台将变得越来越重要。它不仅能够满足当前的需求,还为未来的数据挑战提供了可扩展的解决方案。
无论你是正在寻找能够支撑大规模AI应用的数据平台,还是需要一个高性能的衍生数据存储系统,Venice都值得你深入探索和考虑。通过参与Venice的开源社区,你不仅可以获得强大的技术支持,还有机会为这个令人兴奋的项目做出贡献,共同推动大数据技术的发展。
让我们一起拥抱Venice,开启数据驱动未来的新篇章!🚀🌟