QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

Pinterest 使用 Kubernetes 和 Helix 构建下一代异步计算平台 Pacer

  • 2023-09-12
    北京
  • 本文字数:1119 字

    阅读完需:约 4 分钟

大小:796.61K时长:04:31
Pinterest使用Kubernetes和Helix构建下一代异步计算平台Pacer

Pinterest 推出其下一代异步计算平台 Pacer,用以取代旧的解决方案 Pinlater。随着公司的发展,Pinlater 在伸缩性和可靠性方面面临着挑战。新的架构使用 Kubernetes 来调度作业,使用 Apache Helix 来进行集群管理。


Pinterest 之前构建了一个异步作业执行平台Pinlater,并在几年前将其开源。Pinlater 已在生产环境中使用了多年,并支持许多关键的功能领域。Pinterest 在AWS EC2上运行了几个 Pinlater 集群,每分钟处理数百万个任务。


Pinterest 软件工程师Li QiChen Zhihuang解释了促使他们构建新平台的动机:


随着 Pinterest 在过去几年的增长和 Pinlater 流量的增加,我们发现 Pinlater 存在许多局限性,包括伸缩性瓶颈、硬件效率、缺乏隔离性和可用性。我们在平台方面也遇到了新的挑战,包括那些影响我们数据存储吞吐量和可靠性的挑战。


基于他们使用 Pinlater 的经历,团队意识到他们不可能在现有架构中解决所有已知的问题,于是他们决定构建下一代平台。


新的架构 Pacer 包含了一个无状态的Thrift API 服务(与 Pinlater 兼容)、一个数据存储(MySQL)、一个有状态的脱队列代理服务(Dequeue Broker),以及在Kubernetes上运行的作业执行 Worker 池。Apache Helix(带有Zookeeper)被用来将作业队列分区分配给脱队列代理。



Pacer 架构(来源:Pinterest工程博客


脱队列代理是一种有状态服务,负责从数据存储中预取作业队列数据并将其缓存到内存中,以减少延迟和隔离入队列和脱队列的工作负载。每个脱队列代理分配到一组作业队列分区,因此可以独占获取和执行作业,从而避免出现争用的情况。Kubernetes 为每个作业队列提供了一个专用的 Pod 池,消除因不同作业类型对资源倾斜消耗所带来的影响。


新的脱队列和执行模型缓解了 Pinlater 所遭遇的问题,包括在从热点分区获取数据时避免扫描所有分区或减少锁的争用。此外,它支持按照排队顺序(FIFO)的方式执行作业,前提是为作业队列配置单独的分区。


新的架构需要给脱队列代理实例进行独占式队列分区分配,与Kafka

消费者主题分区分配类似。Pinterest 的团队选择使用 Apache Helix 来实现这个功能。Apache Helix 提供了一个通用的集群管理框架,用于给集群内的脱队列代理进行分区分配。Helix 使用 Apache Zookeeper 实现嵌在脱队列代理实例中的 Helix 控制器和 Helix 代理之间的资源配置通信。



用 Apache Helix 和 Zookeeper 协调脱队列代理(来源:Pinterest工程博客


Helix 控制监控加入和离开集群的脱队列代理实例,以及对已配置的作业队列做出的任何变更,如果发生变更,它将重新计算理想的队列分区与代理分布。在最新的分区分配被保存到 Zookeeper 之后,各个代理实例就会更新它们的内部状态,并从它们负责的队列分区中获取数据。


查看英文原文https://www.infoq.com/news/2023/08/pinterest-pacer-kubernetes/

2023-09-12 16:303880

评论

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

Service Provider Interface介绍

Skysper

spi

职位拆解:互联网-运营

Taylor

行业资讯 移动互联网 运营 AARRR

手把手透析C语言堆内存申请malloc及扩容realloc

卓丁

c 堆内存管理 heap memory malloc realloc

鄙视链 & 全栈

伯薇

学习 能力提升 全栈

字节跳动:高级人才的五个基本素质

池建强

人才培养

Kubernetes 资料集合

倪朋飞

学习 Kubernetes 架构模式

Spring Data R2DBC 入门

稻草鸟人

MySQL WebFlux springboot R2DBC

【ARTS】Week 1

Amos

ARTS 打卡计划

ARTS 01 - 为什么写作在远程工作中那么重要?

Calvin

ARTS 打卡计划

ARTS打卡 week 1

猫吃小怪兽

ARTS 打卡计划

Mobileye如何在云上进行深度学习模型训练

Randy

自动驾驶 学习 AI AWS

你所不知道的淘宝325秘密

Geek_i59t1w

ios 淘宝 325

leetcode练级-只出现一次的数字

幸福三寸日光

算法 LeetCode js

修改Tomcat窗口的名称

阡陌r

Java tomcat 踩坑 实施

Python 3.6.1 官方文档练习——初入江湖(三)

小匚

Python python教程

LeetCode 241. Different Ways to Add Parentheses

liu_liu

LeetCode

ARTS week 1

刘昱

游戏夜读 | 刀塔选手比较老吗?

game1night

leetcode练级-只出现一次的数字 升级版

幸福三寸日光

算法 LeetCode js

我的 Windows Terminal 配置

FeiLong

Windows Terminal

转行程序员浅谈Linux下的多线程编程

WB

Linux 程序员 多线程

我的读书生涯-小学到大学: 没有成长, 只有不断加深的疑惑

lmymirror

人生 读书 经历 半虚构

Lucene的Smart CN实现分词、停用词、扩展词

Page

中文分词 lucene 停用词 扩展词 SmartCN

向往优雅的代码

Janenesome

编码习惯 读书

【应用异常监控利器Sentry搭建与学习笔记】

卓丁

Docker Sertry Fasthttp CI/CD Go 语言

LeetCode 1048. Longest String Chain

liu_liu

LeetCode

ARTS 第一周

onee

ARTS 打卡计划

Java 火焰图

wong

Java flamegraph

“数据资产”究竟是“数据”还是“资产”

马踏飞机747

大数据 数据中台 数据治理 数据资产

Linux如何调试内存泄漏

泰伦卢

c c++ C#

John 易筋 ARTS打卡Week 01

John(易筋)

ARTS 打卡计划

Pinterest使用Kubernetes和Helix构建下一代异步计算平台Pacer_云原生_Rafal Gancarz_InfoQ精选文章