Twitter一直沒有自己的圖片存儲系統(tǒng),此前系統(tǒng)從2011年6月開始內(nèi)置采用Photobucket的服務(wù),另外,也支持Instagram等第三方圖片應(yīng)用上傳到Twitter系統(tǒng)中。隨著Twitter整體由開放轉(zhuǎn)向封閉,切斷第三方圖片上傳,同時自行提供圖片系統(tǒng)是勢所必然的。
12月11日,Twitter工程博客發(fā)表文章,介紹了9月份已經(jīng)上線使用的圖片存儲系統(tǒng)Blobstore的底層架構(gòu)。其中比較引人注目的是,Blobstore支持多數(shù)據(jù)中心同步。GigaOM的文章指出,這與Google Spanner是異曲同工的。
文章如下:
Blobstore的設(shè)計目標(biāo)
Blobstore是由Twitter開發(fā)的一個低成本和可擴展的的存儲系統(tǒng),可以用來存儲圖片以及其他的二進制對象(稱為“blob”)。在開始構(gòu)建Blobstore時,Twitter有三個設(shè)計目標(biāo):
-
低成本:可以大大減少花費在添加圖片到Tweet中的時間和成本。
-
高性能:圖片延遲保持在幾十毫秒之內(nèi),同時保證每秒上千萬張吞吐量的圖片請求。
-
易于操作:隨著Twitter基礎(chǔ)設(shè)施的不斷增長,能夠擴展操作開銷。
Blobstore是如何進行工作的?
當(dāng)用戶推送一張照片,就會把照片發(fā)送到一組Blobstore前端的服務(wù)器。前端服務(wù)器解析后會給該照片一個特定的寫地址,接下來將其轉(zhuǎn)發(fā)到具體的服務(wù)器進行實際的數(shù)據(jù)存儲。其實可以把這些存儲服務(wù)器稱之為存儲節(jié)點,它們把照片信息存儲到一個磁盤上,然后通知元數(shù)據(jù)存儲——圖像已經(jīng)存儲完畢并記錄所需要的信息以便進行照片檢索。元數(shù)據(jù)存儲庫,這是一個非關(guān)系型鍵/值存儲集群,它可以自動的進行多數(shù)據(jù)中心(multi-data-center)的同步功能,更重要的是可以跨所有的Twitter的數(shù)據(jù)中心,進而在Blobstore上提供的一致性的視圖數(shù)據(jù)。
Blobstore核心是Blob Manager,它運行在前端,用于存儲節(jié)點以及索引集群。Blob Manager充當(dāng)系統(tǒng)中心“協(xié)調(diào)員”的角色,對集群進行管理。它是所有前端信息(決定應(yīng)該把文件存儲到哪個地方)的源。不僅如此,它還負(fù)責(zé)更新映射,在增加存儲節(jié)點或者由于添加失敗節(jié)點被移除時,協(xié)調(diào)數(shù)據(jù)的遷移。
還有一點比較重要,就是依靠Kestrel。這是Twitter現(xiàn)有的異步隊列服務(wù)器,主要用來處理任務(wù),比如說復(fù)制圖像以及確保數(shù)據(jù)中心中數(shù)據(jù)的完整性。
Twitter確保一旦圖像上傳成功,用戶就可以立即從數(shù)據(jù)中心中進行讀取,而且絕對是最原始的圖像。而且在如此之短的時間內(nèi),圖像已經(jīng)復(fù)制到Twitter所有其他的數(shù)據(jù)中心之內(nèi),并且可以從這些數(shù)據(jù)中心進行讀取。此功能主要依賴于Blobstore內(nèi)的多數(shù)據(jù)中心元數(shù)據(jù)存儲對文件的中央索引。Twitter高度關(guān)注短時間內(nèi)一個圖像是否被已經(jīng)被寫入它最初的數(shù)據(jù)中心,他們使用路由請求,確保該Kestrel隊列能夠進行數(shù)據(jù)復(fù)制。