Twitter如何在数千台服务器上快速部署代码?,互联网营销

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

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

  如果服务本身的功能性符合用户需求,却因为架构、程序性能、数据库性能的问题导致服务增长出现瓶颈时,如何评估、分析网站性能瓶颈?厘清问题后如何找出对应的解決方案,可以思考的相关议题可能包括:

  • 如何有效率地厘清问题?从客户端的数据(读取时间)或是从服务器端的log日志、硬件的负载率?
  • 网站性能瓶颈是出現在Client或Server端?是数据库撑不住还是程序性能不好?是Request太多还是数据太大?
  • Web Server、DB server如何挤出更多的资源?挤不出资源后如何扩展?扩展后会遇到什么问题?

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

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

  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,如果对于技术细节有兴趣的读者,可以再进行深入的研究;笔者简单摘录几个重点如下:

  • Murder是以BitTornado为基础开发出来的(BitTornado是一种BitTorrent client)。
  • Murder的定位是「协助我们快速地将文件部署到大批服务器上」。
  • 利用BitTorrent的部署方式可避免防火墙的问题、拥有非常快的传输速度。
  • 实际的部署代码是搭配Capistrano进行,网页上有很清楚的说明。

  以下是Twitter的架构工程师Larry Gadea谈Murder的视频(不能直接访问):

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

  原文标题:Twitter如何在數千台伺服器上快速部署程式碼

  原文链接:http://www.inside.com.tw/07/17/how-twitter-deploys-application-to-thousands-of-servers

  简体版编译:博客园

时间: 2024-12-11 17:56:23

Twitter如何在数千台服务器上快速部署代码?,互联网营销的相关文章

expect自动检测并重启另外一台服务器上的程序代码_linux shell

[s005 you] # cat haproxy_expect 复制代码 代码如下: #!/usr/bin/expectset ssh_user "fivetrees"set password "123456"spawn ssh -i /root/.ssh/$ssh_user Server004.xd.comexpect_before "no)?" {send "yes\r" }sleep 0.5expect "En

【OpenManage大解密】分钟级部署千台服务器?

拼功能?拼价格?你已经Out啦!不落到企业用户场景里去谈功能的产品,都是耍流氓!今天我们就从戴尔智能管理员OpenManage开始,落到用户三大场景中去解密其用途和价值,且很多功能参数绝对您以前没有听说过!解密,即刻开始!   记得10年前,我和当时的同事在做服务器选型测试工作时,就不止一次谈到这样问题--当我们使用来自多家(主板/准系统)供应商的产品时,就会面临管理方案不同的问题. 举个例子,比如SuperMicro.Intel(EPSD)和Tyan这3家服务器ODM,在主板的管理上就有着不同

数千台MySQL数据库遭黑客比特币勒索,该怎么破?

据内部数据中心安全的行业领导者GuardiCore公司爆料,数千台MySQL数据库遭到勒索.这是近半年内,不断频发的数据库勒索事件的延续:   国内Oracle数据库遭"恶作剧"比特币勒索: 2017年1月11日报道3.3万台Mongo数据库实例被勒索,有些数据库直接被删除,国内受害者众多: 2017年1月13日报道3.5万个ElasticSearch CCluster被勒索,被删除数据大小至少450TB: 2017年1月19日报道1万+台Hadoop和CouchDB被勒索: 2017

在一台服务器上实现多个Web站点

web|服务器|站点 Windows 2000 Server安装成功后,一般会启动一个默认的Web站点,为整个网络提供Internet服务.在中小型局域网中,服务器往往只有一台,但是一个Web站点显然又无法满足工作需要.那么,能否在一台服务器上设置多个Web站点(以下我们简称为"一机多站")呢?答案是肯定的,并有多种途径可以达到这一目的.我们知道,网络上的每一个Web站点都有一个惟一的身份标识,从而使客户机能够准确地访问.这一标识由三部分组成,即TCP端口号.IP地址和主机头名,要实现

如何在同一台服务器上建立Oracle 10g DATA GUARD

为了测试在同一台服务器上建立了DATA GUARD环境. 主库状态正常,也存在可用的备份,下面设置主库的FORCE LOGGING和相关的初始化参数: SQL> alter database force logging; Database altered. 修改主库的初始化参数: SQL> alter system set log_archive_config = 'DG_CONFIG=(primary,standby)'; System altered. SQL> alter syst

开机启动-数据库和应用都装在一台服务器上同时设置开机自动启动会有问题吗?

问题描述 数据库和应用都装在一台服务器上同时设置开机自动启动会有问题吗? 会不会出现数据库还没启动完成应用就启动了,然后连不上数据库就出错了? 解决方案 数据库能否连上,不是数据库软件启动,而是服务,即使你没有进入windows,sqlserver的服务也起来了,你一样能连接,当然,也不排除,应用启动迅速,而服务还未准备好的情况 解决方案二: 肯定要保证数据库服务先正常启动的前提下再启动数据库 解决方案三: 对,服务在开机启动,一般不会连不上耳朵 解决方案四: win7以后,服务,启动应用程序,

负载均衡-请问一下nginx里配置upstream 如何能获得最终负载到哪台服务器上呢

问题描述 请问一下nginx里配置upstream 如何能获得最终负载到哪台服务器上呢 请问一下nginx里配置upstream 如何能获得最终负载到哪台服务器上呢 解决方案 这个是nginx自己内部的处理了,你只能从access.log等中去查看

图片-memcache与couchbase安装在同一台服务器上出错

问题描述 memcache与couchbase安装在同一台服务器上出错 小弟最近碰到了服务器做缓存服务同时安装了memcache与couchbase两个缓存应用,但是实际运行时报缓存错误,报错截图如下 不过分到不同的机子上安装的话就没有这个问题了.请问这是什么原因,应该不是端口占用吧,占用的话服务应该起不来. 解决方案 楼上这位哥哥你回答的这是什么?

lvs轮调的间隔时间太长,总是转发到同一台服务器上,过很久才能转发到另一台服务器

问题描述 lvs轮调的间隔时间太长,总是转发到同一台服务器上,过很久才能转发到另一台服务器 lvs轮调的间隔时间太长,总是转发到同一台服务器上,过很久才能转发到另一台服务器上,配置文件中的persisence_timeout=0已经注释.还是不行,哪位大神帮帮忙解决一下, 解决方案 我也碰到这个问题.不能刷一次交替一次.你解决了吗?