Venice 项目介绍
概述
Venice是一个用于衍生数据存储的平台,专为处理大规模工作负载而设计。其主要特点包括支持从批处理和流媒体源(如Hadoop和Samza)的高吞吐量异步数据摄取、通过远程查询或进程内缓存实现的低延迟在线读取、基于CRDT的跨区域主动-主动复制、区域内多集群支持以及每个集群内的多租户、水平扩展和弹性。这使得Venice非常适合作为支持特征存储(例如Feathr)的状态组件,许多AI应用程序将机器学习训练作业的输出输入到Venice中,然后在在线推理工作负载期间查询这些数据。
写入路径
Venice的写入路径支持三种粒度的数据操作:完整数据集交换、向现有数据集中插入多行、以及更新某些行的某些列。这三种操作都可以通过Hadoop和Samza实现。此外,任何服务都可以使用在线生产者库异步执行单行插入和更新。支持的写入操作包括:
- 完整数据集交换
- 插入一些行到现有数据集
- 更新某些行的某些列
混合存储
以上三种写入操作粒度可以在一个数据集中混合使用,称为混合存储。配置混合存储时,需要定义一个回溯时间,以确定在新的数据集生成交换前,实时写入数据需回溯并叠加的时间跨度。这种机制允许将流处理作业的输出叠加在批处理作业的输出之上,通过部分更新,还可以实现一些列实时更新,一些列批量更新,这两组列可以根据需要重叠或不重叠。
写入计算
写入计算包括两类操作:
- 部分更新:设置值中的某个字段内容。
- 集合合并:添加或移除集合或映射中的条目。
目前,写入计算仅支持主动-被动复制,主动-主动复制的支持仍在开发中。
读取路径
Venice支持以下读取API:
- 单次获取:获取与单个键相关联的值
- 批量获取:获取与一组键相关联的值
- 读取计算:对一组键相关联的值的某些字段进行选择投影和/或一些函数运算。支持的运算包括点积、余弦相似度、Hadamard积和集合计数。
客户端模式
访问Venice数据有两种主要模式:
- 传统Venice(无状态):进行远程查询,使用细分客户端或者快速客户端进行请求。
- Da Vinci(有状态):预先加载一些或全部数据分区,查询本地缓存,并实时更新本地缓存数据。
不同客户端的特性对比如下:
网络跳数 | 典型延迟 (p99) | 状态占用 | |
---|---|---|---|
细分客户端 | 2 | < 10毫秒 | 无状态 |
快速客户端 | 1 | < 2毫秒 | 最小路由元数据 |
Da Vinci 客户端 | 0 | < 1微秒 | 限制内存与完整SSD数据集 |
Da Vinci 客户端 | 0 | < 10微秒 | 完整内存数据集 |
所有客户端共享相同的读取API,使用户可以在不改变编写应用程序的情况下调整性能和成本。
社区和资源
用户可以通过Slack工作区、LinkedIn群组和GitHub问题与社区进行互动。官方博客、LinkedIn页面、X平台以及YouTube频道都可以提供更多关于Venice项目和社区动态的信息。用户也可以参考Venice快速入门指南以创建自己的Venice集群,并体验其创建数据存储、批量推送、增量推送和单次获取的功能。
Venice项目提供了丰富的文档和社区支持,希望新用户和贡献者能够快速上手并参与到项目的发展中。