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 的诸多问题,提升了系统的可扩展性、可靠性和效率。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。