写点什么

Netflix 基于 Redis、Kafka 和 Elasticsearch 构建高吞吐优先队列 Timesone

  • 2022-10-20
    北京
  • 本文字数:1662 字

    阅读完需:约 5 分钟

Netflix基于Redis、Kafka和Elasticsearch构建高吞吐优先队列Timesone

最近,Netflix 公布了它是如何构建Timestone的——一个高吞吐、低延迟的优先队列系统。Netflix 使用 Redis、Apache Kafka、Apache Flink 和 Elasticsearch 等开源组件来构建这个队列系统。Netflix 的工程师们表示,他们之所以要构建 Timestone,是因为他们无法找到满足其所有要求的现成解决方案。


其中一个需求是不需要在消费者端进行任何锁定或协调的情况下将某些工作项标记为不可并行。这一需求意味着在属于同一工作集的前一个项目完成之前,Timestone 不应该发送消息。Timestone 引入了“独占队列(Exclusive Queue)”的概念来实现这一目的。


Netflix 的软件工程师 Kostas Christidis 解释了独占队列的工作原理。


独占队列被创建后将与用户定义的独占键相关联——例如,“project”。所有发布到该队列的消息都必须在其元数据中携带此键。例如,带有"project=foo"的消息将被接收到独占队列中,不包含该键的消息将不会进入独占队列。在这个例子中,与独占键对应的值是“foo”,也就是消息的独占值。独占队列的约定是,在任何时间点,每个独占值最多只能有一个消费者。因此,如果我们示例中以“project-”为前缀的独占队列中有两个消息的键值对为“project=foo”,并且其中一个消息已经分配给了一个消费者,那么另一个消息就不能退出队列。


下图描绘了这个示例。



当 worker_2 发出出队列调用时,会收到 msg_2 而不是 msg_1,即使 msg_1 具有更高的优先级


来源:https://netflixtechblog.com/timestone-netflixs-high-throughput-low-latency-priority-queueing-system-with-built-in-support-1abf249ba95f


另一个需求是,在任何给定的时间,一条消息只能分配给一个消费者。这很重要,因为 Cosmos 种的工作负载往往是资源密集型的,并且可能扇出数千个动作,这个需求的目标之一便是减少资源浪费。这个需求排除了最终一致性解决方案,这意味着 Netflix 的工程师想要的是队列级别的线性一致性


Netflix 工程师通过为每条消息维护一个消息状态来实现这一需求。当生产者将消息入队时,消息将被设置为“Pending”或“Invisible”状态,这取决于消息的超时设置(可选)。当消费者将挂起的消息从队列中取出时,它将获得该消息的独占租约,Timestone 将该消息设置为“Running”状态。在这个阶段,生产者可以将消息标记为“Completed”或“Cancelled”。每条消息最多可以尝试有限的取出次数,然后 Timestone 将其标记为“Errored”状态。下图说明了所有可能的状态转换。



来源:https://netflixtechblog.com/timestone-netflixs-high-throughput-low-latency-priority-queueing-system-with-built-in-support-1abf249ba95f


Timestone 服务器提供了一个基于 gRPC 的接口。所有 API 操作都在队列作用域内。所有修改状态的 API 操作都是幂等的。记录系统是一个 Redis 集群。在将响应发送回服务器之前,Redis 会将每个写请求持久化到事务日志中。在 Redis 内部使用了一个按优先级排序的排序集代表每个队列。消息和队列配置以散列值的方式存储。


Christidis 提到了 Netflix 工程师如何用 Redis 实现原子性:


几乎所有 Timestone 和 Redis 之间的交互都写在 Lua 脚本中。在大多数 Lua 脚本中,我们倾向于更新大量的数据结构。由于 Redis 保证每个脚本都是原子执行的,所以成功执行脚本意味着可以保证系统处于一致的(在 ACID 意义上)状态。



来源:https://netflixtechblog.com/timestone-netflixs-high-throughput-low-latency-priority-queueing-system-with-built-in-support-1abf249ba95f


为了实现可观察性,Timestone 捕获关于传入消息及其状态间转换的信息,并将其保存在 Elasticsearch 的两个二级索引中。当 Timtstone 服务器从 Redis 获得写入响应时,它将其转换为发送到 Kafka 集群的事件。有两个分别对应 Timestone 两个索引的 Flink 作业,消费来自相应 Kafka 主题的事件,并更新 Elasticsearch 中的索引。


Netflix 创建 Timestone 是为了满足其媒体编码平台 Cosmos 的需求。Timestone 还支持Conductor——Netflix 的通用工作流编排引擎,作为大规模数据管道的调度器。


原文链接

Netflix Builds a Custom High-Throughput Priority Queue Backed by Redis, Kafka and Elasticsearch

2022-10-20 08:008352

评论

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

鸿蒙应用开发从入门到实战(二十):ArkUI内置弹窗组件

程序员潘Sir

鸿蒙 HarmonyOS

【IEEE冠名,香港中文大学(深圳)主办】第五届IEEE能源工程与电力系统国际学术会议(IEEE-EEPS 2025)

搞科研的小刘

国际学术会议 能源工程 电力xitong

嘉为蓝鲸CCI持续集成平台:双模式增量扫描提效,质量门禁守护代码稳定

嘉为蓝鲸

DevOps 持续集成 CI/CD 流水线 持续集成平台

简单高效的SQL注入测试方法:Break & Repair技巧详解

qife122

渗透测试 SQL注入

用Comate做个会温馨提示的“纸片人”女友

Comate编码助手

AI 编程 文心快码 文心快码3.5S AI编程助手

【SPIE出版】第五届计算机图形学、人工智能与数据处理国际学术会议(ICCAID 2025)

搞科研的小刘

人工智能 计算机图形学 数据处理 国际学术会议

springboot项目操作mysql出现锁表问题情况

刘大猫

人工智能 智能医疗 远程医疗 临床试验 医学统计

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名媒体系统生态需求洞察

qife122

AI技术 开源生态

如何利用YashanDB实施数据可视化

数据库砖家

Akka.NET高性能分布式Actor框架完全指南

qife122

微服务 分布式系统 Akka

诗画同源:元器激活想象,混元绘就诗意——让每一首古诗在孩子心中“活”起来

六月的雨在InfoQ

腾讯混元大模型AIGC

工业设计 自控设计经验总结(11)

万里无云万里天

设计师 工业 工厂运维

了解YashanDB中的数据建模基础

数据库砖家

如何利用YashanDB构建灵活的数据模型?

数据库砖家

如何利用YashanDB确保数据合规性

数据库砖家

AI 改变数据库产品实践探索

老纪的技术唠嗑局

AI Agent MCP Server

降低网络保险成本的实用技巧与网络安全实践

qife122

风险管理 网络保险

共探数智新路径,嘉为蓝鲸出席2025长三角数字化转型大会,赋能制造业研发运维效率升级!

嘉为蓝鲸

研发效能 数字化转型 智能运维 研运一体化 智能研运

工业设计 自控设计经验总结(10)

万里无云万里天

设计师 工业 工厂运维

大数据-123 - Flink 并行度设置优先级讲解 原理、配置与最佳实践 从Kafka到HDFS的案例分析

武子康

Java 大数据 flink spark 分布式

什么是MES系统,制造业必须搞懂的核心系统

万界星空科技

数字化转型 智能制造 mes 万界星空科技mes 智能化MES

了解YashanDB中的数据分区管理技巧

数据库砖家

如何构建YashanDB的高可用性架构?

数据库砖家

如何利用YashanDB实现端到端的数据治理?

数据库砖家

将 GPU 级性能带到企业级 Java:CUDA 集成实用指南

程序猿DD

安势信息亮相2025vivo开发者大会,多维度技术共推生态安全升级!

安势信息

Vivo 安势信息 清源 vivo年度最佳安全业务伙伴 CleanSource

海外原生 App 的开发费用

北京木奇移动技术有限公司

APP开发 软件外包公司 海外APP

嘉为蓝鲸CMeas效能洞察平台:在线SQL编辑支持实时预览,DevOps跨领域洞察更高效

嘉为蓝鲸

数据库 DevOps 研发效能度量 研发效能洞察管理 研发效能洞察

Netflix基于Redis、Kafka和Elasticsearch构建高吞吐优先队列Timesone_软件工程_Eran Stiller_InfoQ精选文章