簡介前端
MogileFS是一個開源的分佈式文件存儲系統,由LiveJournal旗下的DangaInteractive公司開發。Danga團隊開發了包括 Memcached、MogileFS、Perlbal 等多個知名的開源項目。目前使用MogileFS 的公司很是多,如日本排名先前的幾個互聯公司及國內的yupoo(又拍)、digg、豆瓣、1號店、大衆點評、搜狗和安居客等,分別爲所在的組織或公司管理着海量的圖片。java
MogileFS組成部分node
MogileFS由3個部分組成:python
一、server:主要包括mogilefs和mogstored兩個應用程序。mogilefs實現的是tracker,它經過數據庫來保存元數據信息,包括站點domain、class、hots等;mogstored是存儲節點(storgenode’),它實際上是個WsbDAV服務,默認監聽在7500 端口,接受客戶端的文件存儲請求。在Mogilefs安裝完後,要運行mogadm工具將全部storge node註冊到mogilefs的數據庫裏,mogilefs會對這些節點進行管理和監控。nginx
二、utils(工具集):主要是Mogilefs的一些管理工具,例如mogadm等web
三、客戶端API:mogilefs的客戶端API不少,例如Perl、PHP、java、python等,用這個模塊能夠編寫客戶端程序,實現文件的備份管理功能等;數據庫
MogileFS特性瀏覽器
一、 工做與應用層架構
二、 無單點:三大組件(tracker、mogstore,database)皆可實現高可用;dom
三、 自動完成文件複製:複製的最小單位不是文件,而是class,文件能夠被自動複製到多個有足夠存儲空間的存儲節點上;
四、 傳輸無需特殊協議:能夠經過NFS或HTTP協議進行通訊;
五、 名稱空間:文件經過一個給定的key來肯定,是一個全局的命名空間,沒有目錄基於域實現文件隔離;
六、 不共享任何數據:無需經過昂貴的SAN來共享磁盤,每一個存儲節點只需維護本身所屬的存儲設備(device);
MogileFS原理
術語解釋
tracker:藉助數據庫保存各個節點的元數據信息,便於檢索定位數據位置並監控各個節點,告知客戶端存儲區的位置並指揮storage節點複製數據副本,進程爲mogilefsd
database:爲tracker節點存儲節點文件的元數據信息;
storage:將指定域中的鍵轉換我I特有的文件名存儲與在特定的設備文件中,轉換後文件名爲值,storage自動維護鍵值之間的對應關係,storage節點使用http進行數據傳輸,依賴於perbl,進程爲mogstored,perbal;
Domain:一個域中的鍵值爲惟一的,一個Mogilefs能夠有多個域來存儲不一樣類型的文件;
Class:複製的最小單位,管理文件屬性,定義文件存儲在不一樣設備上的分數;
device:一個存儲節點,能夠有多個device,就是用來存放文件的目錄,每一個設備都有一個設備ID,須要在mogstored配置文件中docroot配置,設備不能刪除,只能將設備的狀態置爲dead,置爲dead以後數據就沒法恢復了,而且設備ID也沒法使用。(建議每一個節點只有一個device,文件存儲多份時,有多餘數據備份在當前節點其餘設備,等於沒有備份,若只備份2份,節點發生故障,數據就會丟失);
Mogilefs架構圖
上圖爲Mogilefs架構圖,下面也描述了圖中體現出一次數據請求過程。
一、 客戶端在發起一次數據請求,假設請求banner.jpg,請求首先到達前端代理perbal(固然此處可利用Nginx實現)
二、 perbal或nginx會將請求代理至Mogilefs client(這裏解釋下,MogileFS自己就是一個Web服務能夠提升返回數據信息,不過普通的瀏覽器或web客戶端是不具有利用獲取的Mogilefs返回的數據位置信息再次請求storage節點獲取數據的,因此此處須要一個特定的客戶端來訪問Mogilefs,而此客戶端在Nginx代理時,是nginx的特定的模塊。)
三、 mogilefs client模塊將請求發往trackers節點,trackers向DB server發起查詢
四、 tracker將以banner.jpg爲key查詢到的vlaue值發給nginx。
五、 Nginx經過Mogilefs API向storage 節點請求數據。
這就是一次完整的數據獲取過程。