1 回答

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