答案是:用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

项目地址: https://github.com/lg/murder

参考:

https://kb.cnblogs.com/page/70905/

https://www.douban.com/note/77977338/

Twitter如何在数千台服务器上快速部署代码?的更多相关文章

  1. 【Jboss】一台服务器上如何部署多个jboss

    一台服务器上如何部署多个jboss呢?直接把整个部署环境copy一份到相应的目录下? 这样只是前提,但是启动复制后的jboss就会发现,有很多端口被占用 3873,8080,8009,8443,808 ...

  2. 【 Linux 】单台服务器上并发TCP连接数

    单台服务器上并发TCP连接数    问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制:    对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完,新的 ...

  3. 【 Linux 】单台服务器上并发TCP连接数(转)

    单台服务器上并发TCP连接数    问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制:    对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完,新的 ...

  4. 网络编程释疑之:单台服务器上的并发TCP连接数可以有多少

    曾几何时我们还在寻求网络编程中C10K问题的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了.我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应用来 ...

  5. TOP100summit 2017:微博如何做到1小时增加一千台服务器应对鹿晗恋情带来的流量暴增

    10月8日中午12点,鹿晗和关晓彤宣布恋情,年近30的我并不关心小鲜肉们的分分合合,但是作为壹佰案例这个软件研发行业自媒体的小编,我更关注因此引发的微博宕机事件. 鹿晗公布恋情的微博获得462884次 ...

  6. Linux课程---16、apache虚拟主机设置(如何在一台服务器上配置三个域名)

    Linux课程---16.apache虚拟主机设置(如何在一台服务器上配置三个域名) 一.总结 一句话总结:有三个网站www.lampym.com,bbs.lampym.com,mysql.lampy ...

  7. 如何在一台服务器上安装两个mysql或者更多

    如何在一台服务器上安装两个mysql 1       前言 上篇写了在一台机器上源码编译安装一个mysql,那么如何在一台机器上源码编译安装两个mysql或者更多呢? 2       环境 mysql ...

  8. 在同一台服务器上配置多个Tomcat

    如果要在一台服务器上配置多个Tomcat,主要就是要避免Tomcat服务器的端口冲突的问题.只需要修改CATALINA_HOME\conf\server.xml中的启动端口和连接端口就OK了! 下面我 ...

  9. 在多台服务器上简单实现Redis的数据主从复制(3)(转载)

    转载地址:http://www.cnblogs.com/liping13599168/archive/2011/04/14/2016226.html Redis的主从复制功能非常强大,一个master ...

随机推荐

  1. C#自增运算符(++)

    一.C#自增运算符(++) 自增运算符(++)是将操作数加1. 1. 前缀自增运算符 前缀自增运算符是“先加1,后使用”.它的运算结果是操作数加1之后的值. 例如: ++x;  // 前缀自增运算符 ...

  2. 列表与特殊字符,div(新手HTMLL基础)

    1.无序列表 -项目符号:实心圆(disc).方框(square).空心圆(circle) -列表<ul>---- 列表项<li>--- </li></ul& ...

  3. 初尝微信小程序2-Swiper组件、导航栏标题配置

    swiper 滑块视图容器. 很多网页的首页都会有一个滚动的图片模块,比如天猫超市首页,滚动着很多优惠活动的图片,用来介绍优惠内容,以及供用户点击快速跳转到相应页面. Swiper不仅可以滚动图片,也 ...

  4. 零基础快速入门SpringBoot2.0教程 (三)

    一.SpringBoot Starter讲解 简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-boot/doc ...

  5. iOS 反射函数: performSelector, NSInvocation, objc_msgSend

    当我们有方法名和参数列表,想要动态地给对象发送消息,可用通过反射函数机制来实现,有两种常用的做法: 一.performSelector - (id)performSelector:(SEL)aSele ...

  6. git提交时报错 permission denied

    git push 时报错:permission denied xxx 目前很多解决办法是生成公钥和秘钥,这种方法安全可靠,比较适用于一台电脑对应一个git账户,但是多个账户在同一台电脑上提交使用git ...

  7. dijkstra与他的优化!!!

    目录 SPFA已死,有事烧纸 Dijkstra 配对堆 引言 讲解 合并 修改 弹出堆顶pop 代码 结合! 1 2 @ SPFA已死,有事烧纸 其实我本人也是一个SPFA的忠诚用户,至少我的最少费用 ...

  8. CMSIS-DAP仿真器_学习(转载)

    先给大家普及一下,哈哈.CMSIS-DAP仿真器,是ARM官方做的开源仿真器,没有版权,自由制作.官方给的源代码,使用的是NXP的单片机LPC4320做的.这个源代码,只要你安装了KEIL5,就可以找 ...

  9. B1023 组个最小数 (20分)

    B1023 组个最小数 (20分) 给定数字 0-9各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 ...

  10. vim 命令总结

    命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim ...