Twitter工程團隊近期提供了Twitter核心技術的演進和擴展的詳細資料,這些核心技術支撐了Twitter自營數據中心的系統架構,用於提供社會媒體服務。他們分享的關鍵經驗包括:超越原始規格和需求進行系統架構,並在流量趨向設計容量上限時迅速作出大刀闊斧的改進;不存在所謂的「臨時更改或變通方案」,由於變通方案會成爲技術債務;聚焦於爲任務提供適合的工具,但這意味合理領會全部可能的用例;對內部的和社區最佳實踐的文檔工做已成爲一種「力量倍增器」。html
根據近期Twitter工程博客上的一篇博文,Twitter做爲社會網絡和在線新聞服務建立於2006年,在那個時期,「統治數據中心」的是企業級實體廠商所提供的硬件。在Twitter運行的頭十年中,快速增加的用戶羣已對硬件層提出了不少工程上的挑戰。雖然Twitter在公共雲上「運行良好」,可是他們已經開始重點投資自身的私營架構。至2010年,Twitter已從第三方的主機託管服務遷移到自身私營的數據中心架構,該數據中心架構在隨後六年中「持續地設計和更新……有效地利用了技術和硬件的最新開放標準」。git
至2010底,Twitter最終完成了首個內部網絡架構,從設計上解決了在第三方主機託管架構中所遇到的擴展性和服務問題。最初,深度緩衝(Deep Buffer)機櫃頂部(ToR,Top of Rack)交換機和電信級核心網絡交換機的使用,使Twitter支持了2014年世界盃這樣的全球事件所產生的史無前例的每秒交易(TPS,Transaction Per Second)量。在隨後數年中,Twitter架構團隊在五大洲部署了網絡服務提供點 (PoPs,point-of-presence)。2015年,Twitter從傳統的層次數據中心網絡拓撲結構遷移到使用邊界網關協議(BGP,Border Gateway Protocol)路由的Clos網絡。Clos方法的顯著優勢包括:更小的設備單點故障的「波及範圍」、更好的水平帶寬擴展能力,以及由更低的CPU開銷致使的更高路由性能。github
在Twitter網絡架構擴展的過程當中,Twitter的工程團隊汲取到一些重要的經驗教訓:數據庫
在Twitter架構中,45%的規模用於存儲和消息。架構團隊爲內部用戶提供了多種服務,包括:Hadoop集羣、Twitter的Manhattan (Apache Cassandra-esque)分佈式數據庫集羣、FlockDB圖存儲集羣(使用了Gizzard和共享MySQL)、Blobstore集羣、Twemcache及「Nighthawk」共享Redis緩存集羣、DistributedLog消息集羣(用於Heron的處理)以及關係存儲(MySQL、PostgreSQL和Vertica)。在2010年曾使用Cassandra做爲度量數據存儲的解決方案,可是在2015年4月啓用Manhattan後,就禁用了Cassandra。apache
幾乎所有的Twitter主緩存已從「裸機」遷移到大規模部署的開源集羣管理系統Apache Mesos上(Twitter也是Mesos代碼庫的主要貢獻者之一)。推文的時間線緩存Haplo是還沒有部署到Mesos的最重要組件。Haplo使用定製版的Redis實現。對於該緩存,最嚴峻的挑戰在於可擴展性和性能,由於Twitter運行上百個集羣,合計包速率可達3.2億包/每秒,每秒爲客戶提供120GB的內容。爲達到高吞吐量和低延遲的服務水平目標(SLO,Service Level Objective),工程師要持續測量系統的性能,尋找優化效率的方法。例如,Twitter工程師建立了一個測試緩存性能的開源工具rpc-perf,使用它能夠更好地瞭解各類負載場景下緩存系統的運行狀況。緩存
存儲和緩存實現中的主要經驗教訓包括:網絡
Twitter使用Puppet實現全部的系統配置管理和kickstart後的軟件包安裝,Puppet的代碼有500多個模塊,1000多個角色,每月都有100多位提交者。Puppet有三個被其稱爲環境的分支,分別容許實現受控測試、金絲雀測試(Canarying)以及最終推進變動到生產環節。對於不斷增加中的Pupper代碼庫,到目前爲止影響最大的更改是代碼查錯(Code Linting)、代碼模式檢查鉤(Style Check Hook)、最佳實踐的文檔化以及正常辦公時間保持:架構
更多擴展Twitter平臺架構的相關信息,參見Twitter工程博客帖子「Twitter後臺架構:擴展」。前期補充的博客帖子「Twitter後臺架構:效率和優化」內容聚焦於Twitter私有平臺即服務(PaaS)的演進。分佈式