1 回答

TA貢獻1982條經驗 獲得超2個贊
以下是Twitter所使用的開源項目,簡要瀏覽之后,我覺得是一個很好的關于分布式架構,大數據,異步網絡傳輸(客戶端,服務端)學習的list,做個備份,以便后用。
1. 分析和搜索服務
Twitter的搜索服務每天支持超過10億次的查詢,其背后的開源項目包括:
Apache Cassandra:一套分布式NoSQL數據庫系統,以Amazon專有的完全分布式的Dynamo為基礎,結合了Google BigTable基于列族(Column Family)的數據模型,是一個網絡社交云計算方面理想的數據庫。該項目最初由Facebook開發,于2008開源并捐贈給Apache基金會。
Apache Hadoop:由Apache基金會所開發的分布式系統基礎架構,可使應用程序充分利用集群的威力高速運算和存儲,用戶可以在不了解分布式底層細節的情況下,開發分布式程序。
Apache Lucene:一個全文檢索引擎工具包,目的是為軟件開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者是以此為基礎建立起完整的全文檢索引擎。
Apache Pig:一個基于Hadoop的大規模數據分析平臺,它提供的類SQL語言稱為Pig Latin,該語言的編譯器會把類SQL的數據分析請求轉換為一系列經過優化處理的MapReduce運算。Pig為復雜的海量數據并行計算提供了一個簡單的操作和編程接口。
2. 服務器和存儲
Twitter需要將每天用戶發送的推文存儲到數據庫,并推送給其他相關的用戶。該過程用到的開源項目包括:
Linux:主要用于Twitter服務器。
Memcached:主要用于Twitter的緩存基礎設施,作用是加速動態Web應用程序,減輕數據庫負載。
Mysql:流行的開源關系型數據庫,被Twitter大量用于存儲Twitter消息。
Node.js:一套用來編寫高性能網絡服務器的JavaScript工具包,在Twitter中用于隊列處理(接收推文并寫入數據庫),使服務器能處理每個連接而不會阻塞通道。
3. Twitter工程師的工具箱
Apache Subversion:開源的版本控制系統
Git:一個分布式的版本控制系統
Eclipse:大名鼎鼎的Java IDE。
Gerrit:一個基于Web的代碼評審和項目管理的工具,主要面向基于Git版本控制系統的項目
Jenkins:一個持續集成引擎,主要用于持續、自動地構建/測試軟件項目,以及監控一些定時執行的任務
RSpec:一個BDD 測試工具
4. Twitter背后的編程語言和框架
OpenJDK:Java的開源版本。Twitter陸續將一些項目從Rails遷移到了Java。
Python:一種高效的動態解釋型Web編程語言。
Ruby和Ruby on Rails:Twitter最初主要由Ruby和Rails開發。
Scala:Twitter使用的主要應用編程語言之一,很多Twitter的基礎架構都是用Scala編寫。
Clojure:Clojure是一種運行在Java平臺上的Lisp方言,在任何具備Java虛擬機的地方,都可以利用Lisp的強大功能。Twitter的大數據處理系統Storm就是基于Clojure。
Drupal:使用PHP語言編寫的開源內容管理框架(CMF),由內容管理系統(CMS)和PHP開發框架共同構成。Twitter的開發者社區基于Drupal構建。
Sinatra:一個輕量、快速的Ruby開發框架。
5. Twitter的前端解決方案
jQuery:全球使用最廣泛的JavaScript框架。
Less:一個使用廣泛的CSS預處理器,通過簡單的語法和變量對CSS進行擴展,可減少很多CSS的代碼量。
MooTools:一個簡潔、模塊化、面向對象的開源JavaScript框架,為開發者提供了一個跨瀏覽器的JS解決方案
Zepto.js:一個輕量級的Javascript框架,主要用于移動開發
6. Twitter服務開發框架
TwistedMatrix:一個Python 框架,用來開發非阻塞異步的網絡服務和應用程序。
Netty:一個異步的、事件驅動的Web應用框架和工具,用于快速開發高性能、高可靠性的網絡服務器和客戶端程序。Netty目前作為Twitter的核心隊列Kestrel的通信模塊。
Apache Thrift:一個由Facebook開源的遠程服務調用框架,采用接口描述語言定義并創建服務,支持可擴展的跨語言服務開發,所包含的代碼生成引擎可以在多種語言中創建高效的、無縫的服務。
Important remarks: Thrift 這篇文章對Thrift做了綜合性的介紹,值得我思考的是這篇文章:“Thrift與其他框架的比較”,以前對于分布式系統中的服務開發框架,我一直在想為什么不用rest或者webservice來進行通訊?而主流的卻是選擇RPC? 文章用圖表來展示了Thrift在網絡傳輸性能上與rest-jason,xml的優勢。所以,是不是可以這樣理解:Thrift從協議的定義上就使用了高效壓縮數據格式TCompactProtocol(就算不用壓縮,只用TBinaryProtocol 二進制流的數據格式,其傳輸性能也高于jason和xml),從而避免了傳輸,序列化jason或者xml 造成的代價。
Twitter公司所開源的項目
Twitter從開源社區中獲得了大量的好處,而Twitter也在不斷地回饋社區,開源了大量基礎設施和工具,使得其他企業和開發者不必重新發明輪子,在這些開源項目的基礎上更加快速地實現自己所需。
1. 大數據處理
scalding:一個用于Cascading的Scala API。Cascading是一個構建于Hadoop上的API,用來創建復雜和容錯數據處理工作流,它抽象了集群拓撲結構和配置,允許開發者快速開發復雜分布式的應用,而不用考慮背后的MapReduce。
summingbird:允許開發者以類似于本地Scala或Java的方式編寫MapReduce程序,并在大部分著名的分布式MapReduce平臺(包括Storm和Scalding)中執行它們。
2. 前端項目
Bootstrap:一個用于前端開發的工具包,包含了基本的CSS、HTML組件,包括排版、表單、按鈕、表格、網格、導航等。
TwUI:針對Mac平臺的、支持硬件加速的UI框架,受到了UIKit的啟發。
typeahead.js:一個快速、全功能的自動完成庫
hogan.js:一個Mustache模板語言的編譯器
3. 后端服務
Twitter Mysql:Twitter的MySQL分支
Parquet:一種Twitter內部供Hadoop使用的列式存儲格式,為Hadoop生態系統中的所有項目提供支持高效率壓縮的列式數據表達,而且與數據處理框架、數據模型或編程語言無關。
Finagle:一個允許開發者使用Java、Scala或其他JVM語言來構建異步RPC服務器和客戶端的庫,主要用于Twitter的后端服務。
iago:一個負載生成器,用來在產品正式發布前做流量負載測試。
twemproxy:一個快速、輕量級的memcached和redis代理服務器
zipkin:一個分布式的跟蹤系統。在Twitter中用于收集各個服務上的監控數據,并提供查詢接口。
4. Twitter基礎設施通用庫
commons:Twitter的Python、JVM公共庫
util:Twitter的一些可重用的代碼庫
cassovary:一個基于JVM的簡單的大圖形處理庫
- 1 回答
- 0 關注
- 688 瀏覽
添加回答
舉報