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

标签: twitter 伺服 | 发表时间:2010-08-09 21:59 | 作者:(author unknown) Isis
出处:http://bullog.org/
Shared by Suave
awesome innovation

image

答案是:用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 伺服] 推荐:

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

- Isis - 牛博山寨 编辑推荐
答案是:用BT,也就是你我應該都很熟悉的BitTorrent. 對於網站經營者、創業者來說,延展性的問題是在網站流量成長過程中勢必會面對的問題,如何建立一個具有延展性的架構(scalable architecture)便是在規劃網站事業過程中不可或缺的專業知識. 如果服務本身的功能性合乎使用者需求,卻因為架構、程式效能、資料庫效能的問題導致服務成長出現瓶頸,如何評估、分析網站效能瓶頸.

Twitter 中文版

- 幻幽 or A書 - Gea-Suan Lin's BLOG
前幾天 Twitter 推出了中文版 (包括繁體與簡體):「Five new languages」. 對岸的市場可能還是進不去,但在台灣會加速 Plurk 的死亡… 從 Google+ 的出現以後就愈來愈明顯了,現在 Microblogging 的大魔頭再加入戰局,應該會更快….

Twitter和Facebook合作

- Woooon - cnBeta.COM
很重磅的新闻,两大社交网络巨头开始有合作了. Twitter 今天在用户的个人档案页面添加「Post Tweets to Facebook」按钮,让用户快速将自己的 Tweets 同步到 Facebook 状态中去.

twitter-mysql改进点

- - CSDN博客推荐文章
目前最新的twitter-mysql版本基于mysql5.5.22,以下总结了一些比较明显的改进点,大部分已经亲自证实,其他一些诸如修复的比较次要的问题(例如编译问题)这里暂不列出,可以详细参阅 https://github.com/twitter/mysql/wiki/Change-History .

Tribalfish = Twitter + 博客 + 论坛

- Kofai - 36氪
在网络上讨论流行话题有多重选择,你可以在Twitter上追踪话题或名人,也可以在博客上分享经验,更可以在论坛上你来我往,不过,Twitter上的讨论不够深入,博客讨论足够深入又不够及时,Tribalfish 就是集以上讨论工具的大成. 注册登陆后,你会看到好像论坛的界面,只是,不同于一般的论坛界面必须前后查找不同的话题,开启一页又一页的分布,Tribalfish让你可以仪在原页,直接点选感兴趣的内容,并在右方预览,也可以点选分享人的名字后追踪该使用者,这些设计也很像Twitter.

回顾 Twitter 的演变史

- tiansiyuan - 爱范儿 · Beats of Bits
2011 年 3 月后,Twitter 度过了五岁生日. 这只小鸟的飞行速度没有减缓,事实上,Twitter 在 4 月份的动作还挺多. Twitter  推出了新的网页版本,更加时尚的设计,主动推荐潜在关注对象;. “本地趋势”功能拓展到了 70 多个城市和国家;. 新的搜索工具,帮助人们更方便地去寻找新用户.

修改Hosts访问Twitter/Facebook

- cheng - 启光博客
  以前没感觉Facebook多么特别,最近又玩了一些日子,感觉还不错. 因为关注Facebook所以对最新Hosts比较关注,今天发现一个网友整理的,测试可直接使用. 虽然一直在文章中说以后不再发布类似的文章,不过没忍住,网友低调点使用吧,希望对经常访问Twitter与Facebook的网友有此帮助.

Twitter API中文文档

- Jacob - 月光博客
  目前的国内的微博客很多,不少微博客都提供Open API,然而,很多微博提供的API和Twitter的API有一些或多或少的差别,调用格式上并不完全相同.   我建议所有提供API的微博客系统,都将各自的API统一为Twitter的API调用格式,例如目前较有影响的开源微博系统StatusNet(Laconica)的API格式就完全兼容Twitter,这种统一API对于开发者和用户都有很大的好处.

Twitter估值84亿美元

- vieplivee - Solidot
《华尔街日报》报导(中文),Twitter宣布获得俄罗斯风投公司Digital Sky Technologies牵头的一笔融资,这笔约8亿美元的投资将Twitter估值推高至84亿美元. 报导引用消息人士的话称,此轮融资将部分用于收购现有股东的持股:一半的投资将用于Twitter,而另一半4亿美元将被用来收购现有股东持有的股份.

向Twitter Bootstrap 学习什么?

- junyu - 知乎的博客
什么是 Twitter Bootstrap. Twitter 有一位风格清新的设计师 Mark Otto(此人之前在 Zurb)[1],他负责了很多 Twitter 非前台的页面设计,比如 Dev、Support 和 Promoted Products 的设计. 去年,Mark 在自己网站发布了一套基于 Less [2] 框架的工具合集(mixins)—— Bootstrap.less [3],方便前端开发(静态部分).