50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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:008303

评论

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

企评家企业投资价值评价系统,服务投资机构

企评家

企业评价 企评家 企业成长性评价 企业投资价值评价

产品经理该如何确定优先级?

LigaAI

PM 敏捷实践 优先级

焱融科技在高性能全闪文件存储系统设计的思考

焱融科技

云计算 分布式 云原生 高性能 文件存储

什么是IP冲突以及如何解决?

郑州埃文科技

IP地址 IP冲突

时序数据库在博物馆环境检测的应用

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

分布式云时代,天翼云4.0如何护卫边缘安全?

天翼云开发者社区

安全 云电脑

Flutter 如何快速切换生产和测试环境?

岛上码农

flutter 安卓开发 ios 开发 跨平台应用 5月月更

开源GitOps产业联盟会员行 | 走进秒云

MIAOYUN

云原生 gitops OGA联盟

与Fiddler旗鼓相当的mock工具!

Liam

测试 Postman 自动化测试 自动化测试平台 测试自动化

HR系统本地化部署和SAAS,优秀企业会怎么选?

BeeWorks

从开源模型、框架到自研,声网 Web 端虚拟背景算法正式发布

声网

AI 大前端 WebRTC webassembly Dev for Dev

中科创达与华为共启边缘计算合作,共建昇腾AI产业,赋能千行百业提质升级

科技热闻

恒源云(Gpushare)_今日炼丹小疑问:如何给数据加权重?

恒源云

Python 深度学习 PyTorch

聚链成网,旺链科技联合发起跨链平台搭建计划

旺链科技

区块链 产业区块链 产业生态

几行代码,网站图片访问速度 100ms 飙升到 20ms!

沉默王二

看天翼云如何为实体工业插上“数字翅膀”

天翼云开发者社区

云计算 安全 云电脑

2022年SaaS发展趋势——私有本地化部署

BeeWorks

数据传输POST心法分享,做前端的你还解决不了这个bug?

葡萄城技术团队

HarmonyOS 2迎来大更新:10个功能升级,这些机型建议更新!

科技汇

Intel CET缓解措施深度研究

腾讯安全云鼎实验室

安全攻防 网络安全 安全研究

天翼云4.0首亮相!

天翼云开发者社区

云计算 云电脑

使命与愿景

Ian哥

项目管理 企业文化 使命愿景

【国产免费】ETL任务调度运维自动化平台 TASKCTL 作业互斥与强制依赖

敏捷调度TASKCTL

DevOps 分布式 运维 ETL 大数据运维

恒源云 (Gpushare)_【炼丹必备】调参心法(说人话系列)

恒源云

深度学习

Masa Blazor自定义组件封装

MASA技术团队

C# .net 微软 UI 组件库

智能运维 VS 传统运维|AIOps服务管理解决方案全面梳理

云智慧AIOps社区

运维 监控 AIOPS 自动化运维

工业互联网,走,上云去!

天翼云开发者社区

云计算 安全 云电脑

IJCAI 2022 放榜,腾讯优图实验室三篇论文入选

极客天地

算力如何升级?天翼云这么干!

天翼云开发者社区

云计算 云电脑

得物客服一站式工作台卡顿优化之路

得物技术

前端 优化 sdk 卡顿 iframe

软件测试需要学什么?测试学习大纲梳理

伤心的辣条

Python 程序员 程序人生 软件测试 自动化测试

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