PinLater:Pinterest的异步任务执行系统
jopen 9年前
近日,Pinterest 宣布 开源异步任务执行系统 PinLater 。该系统已经在Pinterest的生产环境中应用了两年多,是Pinterest最关键的任务系统之一。目前,PinLater使用了10多个位于 Amazon EC2 之上的不同集群,500多个任务队列每分钟总计要处理超过600万个任务。
PinLater的基本架构如下:
可以看出,PinLater包含三个组件:
- 一个无状态的Thirft服务,管理任务提交和调度;
- 一个存储后台,存储任务和状态;
- 工作进程池,执行任务。
要了解更多架构细节,可以查看Pinterest工程师Raghavendra Prabhu先前发表的一篇 文章 。
PinLater 主要有如下特性:
- 可靠的任务执行 :显式确认、自动重试、延迟可配置;
- 任务调度 :可以将任务安排到将来的一个特定时间点执行;
- 速率限制 :可以限制系统中特定队列的执行速率;
- 语言无关 :可以使用任何Thrift支持的语言编写任务入队程序和任务执行程序;
- 横向可扩展 :服务及存储均是横向可扩展的;
- 支持多种存储后台 :目前针对不同的使用场景支持MySQL和Redis实现;
- 可见性 :可以通过 Ostrich 查看任务及相应的任务队列,跟踪各种运行时属性。
过去的一年中,Pinterest对PinLater进行了改进,在使用MySQL作为存储后台时,其吞吐量提升了5倍,单个i2.2xl MySQL EC2实例每秒可以执行2000多次入队操作。考虑到MySQL提供了更高的可靠性,他们计划将所有工作负载移至MySQL。他们还构建了一个检查点功能 和一个故事板,前者用于支持长时间执行的任务和复杂的工作流程,后者用于查看任务状态、调试失败任务等。要了解更多信息,请查看 PinLater的GitHub页面 。