Pinterest 使用 Kubernetes 和 Apache Helix 重构其异步计算平台

Pinterest 推出下一代异步计算平台 Pacer

Pinterest 开发了下一代异步计算平台 Pacer,以取代旧有的解决方案 Pinlater。Pinlater 由于 Pinterest 的快速发展,逐渐暴露出可扩展性和可靠性方面的挑战。Pacer 的新架构利用 Kubernetes 进行作业执行工作者的调度,并使用 Apache Helix 进行集群管理。

Pinlater 的挑战

Pinlater 是 Pinterest 之前开发的异步作业执行平台,并且已在生产环境中使用多年,支持了许多关键功能领域。然而,随着 Pinterest 的快速增长和流量增加,Pinlater 暴露出了以下问题:

  • 可扩展性瓶颈
  • 硬件效率低下
  • 缺乏隔离性
  • 可用性问题
  • 影响了数据存储的吞吐量和可靠性

Pinterest 的软件工程师 Qi Li 和 Zhihuang Chen 总结了这些问题,并得出结论:在现有架构下无法解决所有问题,因此决定投资开发下一代平台。

Pacer 的架构

Pacer 的新架构包括:

  • 无状态的 Thrift API 服务(与 Pinlater 兼容)
  • 数据存储(MySQL)
  • 有状态的出队代理服务
  • 在 Kubernetes 上运行的作业执行工作者池

Pacer 使用 Apache Helix 和 Zookeeper 来管理作业队列分区到出队代理的分配。

出队代理的作用

出队代理是一个有状态服务,负责从数据存储中预取作业队列数据并缓存在内存中,以减少延迟并隔离入队和出队工作负载。每个出队代理分配一组作业队列分区,使得作业由一个代理独占获取和执行,从而避免竞争。每个作业队列在 Kubernetes 中都有专用的 pod 池,以消除不同作业类型资源消耗不均的影响。

新模型的优势

新的出队和执行模型解决了 Pinlater 的以下问题:

  • 避免扫描所有分区
  • 减少从热门分区获取数据时的锁竞争
  • 支持按入队顺序(FIFO)执行作业

Apache Helix 的作用

Pacer 使用 Apache Helix 来实现队列分区到出队代理实例的独占分配。Helix 提供了一个通用的集群管理框架,用于跟踪一组出队代理之间的分区分配。Helix 使用 Apache Zookeeper 在 Helix Controller 和嵌入在出队代理实例中的 Helix Agents 之间通信资源配置。

Helix Controller 的功能

Helix Controller 监控出队代理实例的加入和离开,以及配置的作业队列的任何变化。在任何变化时,它会重新计算队列分区到代理的理想分布。最新的分区分配保存在 Zookeeper 中后,各个代理实例更新其内部状态并获取它们负责的队列分区数据。

通过 Pacer,Pinterest 成功解决了 Pinlater 的诸多问题,提升了系统的可扩展性、可靠性和效率。

阅读 23
0 条评论