MogileFS原理介紹

 



簡介前端

    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架構圖

wKioL1i2xiOyg0ucAAXPSW_jOLI988.png

上圖爲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 節點請求數據。

這就是一次完整的數據獲取過程。

相關文章
相關標籤/搜索