Pinterest:云原生,让未来发展板上钉钉

挑战

经过8年的发展,Pinterest已经成为一家拥有1,000个微服务、多层基础设施以及各种设置工具和平台的大型社交媒体。2016年,该公司发布了迈向新计算平台的路线图,其愿景是帮助工程师最快速地完成从构思到生产的过程,而无需考虑底层基础设施。

解决方案

路线图的第一阶段涉及将服务移至Docker容器。这些服务于2017年初投入生产后,团队便开始研究编排工具,以便提高它们的效率并对其进行分散化管理。经过层层筛选和多项评估,Pinterest最终选择了Kubernetes。

影响

Pinterest云和数据基础设施部门产品经理Micheal Benedict表示:“通过迁移到Kubernetes,团队可以构建按需扩展和新故障转移策略,同时简化Jenkins等复杂基础设施的整体部署和管理。这不仅缩短了构建时间,还显著提升了效率。例如,团队能够在非高峰时段回收80%的容量。因此,与以前的静态集群相比,Jenkins Kubernetes集群现在每天的实例时数减少了30%。”

公司

Pinterest

挑战

效率 速度

行业

社交媒体

地点

美国

云类型

公有

产品类型

安装程序

出版

July 16, 2018

使用的CNCF项目

Kubernetes

每月有2亿活跃用户,
存有1,000亿个对象

现在每天的实例时数减少30%

容量

增加80%

2010年,Pinterest在云中诞生,它从第一天起就在AWS上运行,但即使是云原生公司也可能会经历一些“成长痛” 自上线以来,Pinterest已经成为一个家喻户晓的社交平台,每月活跃用户超过2亿,保存了1,000亿个对象。这庞大的体量背后,是1,000个微服务和成千上万个数据任务在支撑。

为应对这种高速增长,Pinterest针对不同的工作负载采用了多层基础设施和各种设置工具与平台,导致出现不一致和复杂的端到端开发人员体验,从而最终降低了生产速度。因此,2016年,该公司发布了迈向新计算平台的路线图,其愿景是帮助工程师最快速地完成从构思到生产的过程,而无需考虑底层基础设施。

路线图的第一阶段涉及迁移到Docker。Pinterest云和数据基础设施部门产品经理Micheal Benedict表示:“Pinterest一直在虚拟机上并且直接在EC2实例上长时间、超负荷地运行。为解决软件打包方面的问题,避免工程师采用良莠不齐的方法,我们规范了打包机制,并将其迁移到虚拟机之上的容器中。个中变化不是很大,我们不想一蹴而就。”

迁移的第一个服务是为大多数Pinterest提供支持的单体架构API。同时,Benedict的基础设施治理团队构建了计费和容量规划系统,以分析公司如何在AWS上使用虚拟机。Benedict说:“很明显,从目前我们所做的工作来看,在虚拟机上运行工作负载是不可持续的。很多资源都没有得到充分利用。我们曾在效率上下功夫,这在一定规模上效果很好。但是发展至今,我们必须采用一种更分散的方式来进行管理。于是我们就想到了编排,也许它可以帮我们走出困境。”

这就进入了路线图的第二个阶段。2017年7月,经过八周的严格评估后,团队从一众编排平台中选择了Kubernetes。Benedict说:“当时Kubernetes还不完善,比如它不能像我们期望的那样运行Spark。但是我们意识到,哪怕我们自己尝试构建一下呢,这对Pinterest和CNCF社区都有意义。我们在大数据特别兴趣小组中进行了反复讨论。我们知道,等真正开始将这些功能投入生产时,社区会为我们提供强大的后盾。”

2018年初,团队开始在Kubernetes系统中启动第一个用例,即Jenkins工作负载。Benedict表示:“虽然我们是在一天中的特定时段开展构建工作,但我们始终需要分配高峰容量。旧系统没有任何自动调整功能,容量会一直保持不变。由于逐渐增加容量非常浪费时间,我们很难加快构建速度。鉴于以上种种原因,我们认为Jenkins是我们开展工作的理想用例。”

“Pinterest在全球率先推出视觉搜索引擎。我们致力于帮助用户发现和做自己喜欢的事情。如今,我们的平台拥有超过2.5亿月活跃用户,并且每天提供上百亿条推荐。Pinterest的基础设施规模非常庞大。我们拥有成千上万台服务器、300PB数据、数以千计的任务和工作流,这些都为Pinterest提供非凡的体验打下了坚实基础。”

— 基础设施工程主管KARAN GUPTA

他们扩大了集群容量,并与一个四人团队合作,使Jenkins Kubernetes集群为投入生产做好了准备。Benedict表示:“我们还有静态Jenkins集群,但是在Kubernetes上,我们可以进行类似的构建,测试整个管道,并做好构件准备,我们还可以通过比较了解在这里构建需要多长时间。是否满足SLA?生成的构件是否正确?以及是否存在任何问题?”

他补充说:“到目前为止,一切都很好,尤其是能够在Kubernetes共享集群上灵活地配置Jenkins工作负载。这就是我们想要的。”

2018年第一季度末,该团队就已成功将Jenkins Master迁移到在Kubernetes上本地运行,它还与Jenkins Kubernetes插件协同管理员工生命周期。Benedict表示:“我们目前正在这个新集群上构建整个Pinterest JVM堆栈(Pinterest最近采用了Bazel的大型 monorepo之一)。在高峰时段,我们在几百个节点上运行了数千个pod。总体而言,通过迁移到Kubernetes,团队可以构建按需扩展和新故障转移策略同时简化Jenkins等复杂基础设施的整体部署和管理。这不仅缩短了构建时间,还显著提升了效率。例如,团队能够在非高峰时段回收了80%的容量。因此,与以前的静态集群相比,Jenkins Kubernetes集群现在每天的实例时数减少了30%。”

“Pinterest从一开始就在云端运行,很明显,随着公司的发展,削减虚拟机管理方面的开销变得对我们至关重要。因此,我们投资Kubernetes作为计算基础设施, 以便工程师能快速迁移,并消除自行管理设备的开销。”

— 工程经理MICHEAL BENEDICT

Benedict描绘了未来“相当稳健的路线图”。除Pinterest大数据团队在Kubernetes上试用Spark以外,该公司还与Amazon的EKS团队合作开发了ENI/CNI插件。

Jenkins集群正式上线后,Benedict希望建立最佳实践,包括在迁移下一项服务之前,完成治理原语的构建(包括与计费系统相集成)。Benedict表示:“我们有一个正常的用例管道可供使用。在Jenkins之后,我们希望为Tensorflow和Apache Spark提供支持。在某个阶段,我们的目标将是迁移公司的整体API服务。如果我们了解其中的复杂性,便能够自信地采取行动。它可帮助我们为迁移所有其他服务做好准备。”

作为云原生领域的先驱,Pinterest渴望将其多年以来的发展历程分享给大家。Benedict表示:“我们可以在公有云环境中大规模运行,并以许多人可能做不到的方式进行测试。我们能够分享一些宝贵的经验。”