1. 程式人生 > >Twitter如何在數千臺服務器上快速部署代碼?

Twitter如何在數千臺服務器上快速部署代碼?

名稱 做出 有效 hit 重要 tor rail git 過程

答案是:用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如何在數千臺服務器上快速部署代碼?