Twitter如何在数千台伺服器上快速部署程式码?

2020-06-09 493浏览 59评论 42赞
Twitter如何在数千台伺服器上快速部署程式码?

答案是:用 BT,也就是你我应该都很熟悉的 BitTorrent。

对于网站经营者、创业者来说,延展性的问题是在网站流量成长过程中势必会面对的问题,如何建立一个具有延展性的架构便是在规划网站事业过程中不可或缺的专业知识。

如果服务本身的功能性合乎使用者需求,却因为架构、程式效能、资料库效能的问题导致服务成长出现瓶颈,如何评估、分析网站效能瓶颈?釐清问题后如何找出对应的解决方案,可以思考的相关议题可能包括:

参考国外知名网站在架构上的作法是很好的一种方式,儘管服务的规模可能无法相比,但根据「正确的作法与经验」踏出对的第一步,肯定是有助于突破网站营运的效能瓶颈。

Twitter 身为全球最大的微网誌服务,运用数千台的伺服器提供服务给来自全球各地的使用者,然而每当网站内容、应用程式有更新时,如何尽可能地在越短的时间内将程式码部署到所有的伺服器便是相当重要的课题。

Twitter 的开发部落格 上的一篇文章:「Murder: Fast datacenter code deploys using BitTorrent」分享了 Twitter 如何持续改善应用程式的部署流程,在过去 Twitter 使用 Capistrano 部署应用程式,Capistrano 是许多 Ruby/Rails 使用者用来部署程式码的一个开源专案,开发人员在部署程式码的过程都可以透过自动化的部署流程来简化经常重複的动作,尤其在专案必须同时部署到多台应用程式伺服器时会特别方便。

Twitter 在早期便依赖 Capistrano 来进行应用程式的部署,每当有新版本的程式码需要释出时,Capistrano 会根据预设好的各种设定、流程到 Twitter 所有的伺服器上进行更新的动作,在过去伺服器还不多的情况下一切都很美好,但随着 Twitter 伺服器数量的成长,到了几百台伺服器时,事情已经不再像过去一样美好,甚至到后来拥有数千台伺服器时,更新的作业会耗费 40 分钟。

Twitter 针对这个问题,认为问题的关键在于:使用集中式的系统,也就是所有的伺服器要轮流排队到同一台版本控制系统上进行程式码更新。Twitter 最初的想法是将版本控制系统也做出分散式的架构,伺服器的程式码更新就可以分散到不同的机器来压缩部署时间,但事实上版本控制系统即使分散在多台伺服器上,也同样会有这些伺服器要更新档案的时间。因此 Twitter 发现或许是需要一个完全去中心化、最好像是 BitTorrent,利用 P2P 的特色让所有的节点都可以协助进行程式码的更新。

以结果来看,在 採用了 BitTorrent 的方式来更新程式码后,部署的时间从 40 分钟大幅减少到只要 12 秒钟! 实在是非常惊人的改善,数千台伺服器的程式码居然只要短短 12 秒钟就能完成。

Twitter 也将此次部署流程改善的成果分享出来,专案名称叫做 Murder,如果对于技术细节有兴趣的读者,可以再进行深入的研究;笔者简单摘录几个重点如下:

以下是 Twitter 的架构工程师 Larry Gadea 谈 Murder 的影片:

Twitter -- Murder Bittorrent Deploy System from Larry Gadea on Vimeo.

上一篇: 下一篇: