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

挑战

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

解决方案

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

影响

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

挑战: 效率 , 速度

行业: 社交媒体

地点: 美国

云类型: 公有

产品类型: 安装程序

出版: July 16, 2018

使用的项目
Kubernetes
Stay informed

Get the latest news from our community of doers. Subscribe to the CNCF newsletter.

See footer for our privacy policy.

一些数据…

每月有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表示:“我们可以在公有云环境中大规模运行,并以许多人可能做不到的方式进行测试。我们能够分享一些宝贵的经验。”

Join the CNCF end user community and accelerate your cloud native technology adoption in close collaboration with peers, project maintainers and CNCF.