阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

Gutenberg:Netflix 推出的一项数据集发布订阅服务

  • 2019-11-26
  • 本文字数:1359 字

    阅读完需:约 4 分钟

Gutenberg:Netflix推出的一项数据集发布订阅服务

为了将数据集从单个生产者传播到多个消费者,Netflix 创建了 Gutenberg 服务,它使用发布/订阅技术在微服务之间传播版本化的数据集——消费者订阅数据集,并在有新版本可用时更新数据集。Netflix 公司高级软件工程师Ammar Khaku在一篇博文中介绍了 Gutenberg 的总体设计以及一些用例。


在 Gutenberg 的数据模型中,顶层结构是主题。发布到主题将创建一个新的版本单调递增的数据模型,其中每个版本都包含元数据和一个数据指针。目前,Gutenberg 支持两种类型的数据指针:一种是数据编码在指针中,当数据集小于 1MB 时使用,另一种是指向AWS,数据存储在S3中,用于更大的数据集。


Gutenberg 的一个常见用例是从单个发布者向多个消费者传播各种大小的数据。通常,这些用例处理的配置情况是数据保存在客户端的内存中并在运行时中使用。示例包括支持支付方法的元数据和 A/B 测试配置。


另一个用例是版本化的数据存储,通常用于机器学习应用程序。团队根据历史数据构建和训练模型,运行一段时间以了解其效果,然后修改一些参数并再次运行。


Khaku 强调,Gutenberg 并不没有被设计成一个事件系统。它是为发布和消费整个数据集的不可变视图而设计的,纯粹用于数据版本控制和传播。快速发布新数据并不意味着客户端将读取所有版本。当客户端请求更新时,Gutenberg 将只提供最新版本的数据,而不提供任何以前的版本。


Gutenberg 包含一个提供 gRPC 和 REST API 的服务,以及一个使用 gRPC API 的 Java 客户端库。服务器基于一个全局复制的持久化Cassandra集群,有单独的实例组分别用于处理消费者请求和发布请求。这样就可以单独扩展,消费者请求可以比发布请求多许多,并且这两种请求类型可以互不影响。


为了处理来自消费者的大量请求,每个处理消费者请求的实例都有一个最新发布内容的内存缓存,缓存每隔几秒钟更新一次。为了防止行为不端的应用程序干扰系统,它们使用自适应并发限制器来检测和限制应用程序或服务。当使用多个区域中的 S3 桶时,服务器会设法进行优化,向客户端提供与客户端距离最近的区域中的桶。


在将数据返回给消费者之前,Gutenberg 服务首先对数据进行一致性检查。如果检查失败,服务将检查所请求主题的历史记录,并返回最新的一致数据。这是为了防止不完整的数据返回给消费者,因为 Cassandra 层有时会发生复制延迟。


Gutenberg 客户端库使用 gRPC 与 Gutenberg 服务通信,并使用Eureka进行服务发现。客户端的主要职责是管理订阅和 S3 上传/下载。当用户创建订阅并开始下载时,客户端库将开始通过每 30 秒一次的轮询来检索数据,然后将数据交给用户提供的监听器。它提供了不同类型的可配置的重试逻辑,使客户端能够根据需要处理下载问题。通常情况下,客户端总是会请求它所知道的最新版本的数据,并且只使用该版本的数据。一个例外是部署不当;为了快速缓解这种问题,可以要求客户端读取已知正确的特定版本的数据。


为了实现审计和使用情况的可见性,Gutenberg 服务拦截来自发布者和消费者的请求,并在Elasticsearch中为它们建立索引。这将创建一个视图,其中包含不同主题的使用情况和未使用的主题。


Gutenberg 的开发工作还在进行当中,正按计划增加一些新特性,包括Node.jsPython客户端支持、敏感数据加密以及改进增量发布。


原文链接:


Gutenberg – A Publish-Subscribe Service for Datasets Created by Netflix


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-11-26 08:001675

评论

发布
暂无评论
发现更多内容

【数据结构与算法】粽子树?二叉树_关于堆你不知道的事情

Dream-Y.ocean

栈和队列 9月月更

Python语法之模块和包(1)

二哈侠

9月月更 Python语法 模块的创建

跟我学Python图像处理丨傅里叶变换之高通滤波和低通滤波

华为云开发者联盟

Python 人工智能 企业号九月金秋榜

Python语法之类和对象(1)

二哈侠

Python 9月月更 类与对象

第一模块作业

lsf1227

「架构实战营」

【中秋特辑-代码解析月饼节】C++比C语言更加规范、方便?是因为增加了如下特性 | C++98 & C++11 | C++难学?带领大家一步一步深度剖析 | 简单易懂

Dream-Y.ocean

c++ 底层 细节 9月月更

C++来时路 _ 重温经典之C++类和对象 | 三大特性之一 - 封装 | 腾讯面试题

Dream-Y.ocean

c++ 封装 底层 腾讯面试 9月月更

【web开发基础】php开发基础快速入门(1)-PHP介绍及开发环境快速安装和基本使用介绍

迷彩

Web应用开发 php开源 9月月更 web开发基础

怎样提高报表呈现的性能

陈橘又青

sql 9月月更

打印 Logger 日志时,需不需要再封装一下工具类?

程序员小航

Java 日志 slf4j

跟着卷卷龙一起学Camera--内存池浅析06

卷卷龙

ISP 9月月更

【数据结构与算法】2道面试真题,带你领略算法思想【附思路、动图、源码】

Dream-Y.ocean

面试 链表 9月月更

深度剖析“八大排序”(上)_ 探寻一些不为人知的细节

Dream-Y.ocean

排序算法 9月月更

深度剖析“八大排序”(下)- 交换排序 | 快速排序 & 优化 | 非比较排序_探寻一些不为人知的细节

Dream-Y.ocean

排序算法 9月月更

【数据结构与算法】二叉树题目很难?一句”技巧“巧做基础二叉树题目

Dream-Y.ocean

二叉树 二叉树遍历 9月月更 技巧总结

HowTo:Pipy 如何修改请求和响应的内容

Flomesh

Service Mesh 服务网格

读书笔记|择一城以定财富,择一行以定发展

宇宙之一粟

读书笔记 职业 个人感悟 9月月更

跟着卷卷龙一起学Camera--内存池浅析05

卷卷龙

ISP 9月月更

前端工程师在面试时经常被问的闭包到底是什么?我用打包礼物的例子让你秒懂

wljslmz

JavaScript 闭包 9月月更

【数据结构与算法】“堆”还能这样用_堆的应用

Dream-Y.ocean

面试 9月月更

【数据结构与算法】LeetCode面试真题,带你领略算法思想

Dream-Y.ocean

面试 队列 9月月更

从东南亚到中东,为什么社交类产品成为游戏出海的突破口?

融云 RongCloud

白皮书 社交网络 出海 社交娱乐

openjdk镜像的tag说明

程序员欣宸

Docker Docker 镜像 9月月更

大数据ELK(六):安装Elasticsearch

Lansonli

ES 9月月更

企业服务中出场率最高的活动目录AD到底是什么?本文带您好好了解一下!

wljslmz

AD 9月月更 活动目录

rust语言写的贪吃蛇游戏

福大大架构师每日一题

rust 贪吃蛇 福大大

架构模块一作业

Diana S

架构实战营

前端三件套 HTML+CSS+JS基础知识内容笔记

明金同学

前端

Python之类和对象(2)

二哈侠

属性 9月月更 子类的定义

【数据结构与算法】一篇文章带你玩懂 “栈和队列”(增、删、查、改)的实现_【附源码、动图】

Dream-Y.ocean

队列 数据结构与算法 9月月更

【数据结构与算法】详解 “清华大学(考研)OJ题”_ 二叉树重要面试OJ题

Dream-Y.ocean

面试 算法 清华大学 9月月更

Gutenberg:Netflix推出的一项数据集发布订阅服务_软件工程_Jan Stenberg_InfoQ精选文章