第2-1-1章 FastDFS分布式文件服務背景及系統架構介紹( 二 )

  • 存儲服務器上可以保存文件屬性(meta-data)V2.0網絡通信采用libevent,支持大并發訪問,整體性能更好
  • 開源地址: https://github.com/happyfish100/fastdfs
    2 系統架構FastDFS服務端有三個角色:跟蹤服務器(tracker server)、存儲服務器(storage server)和客戶端(client) 。
    • tracker server:跟蹤服務器,主要做調度工作,起負載均衡的作用 。在內存中記錄集群中所有存儲組和存儲服務器的狀態信息 , 是客戶端和數據服務器交互的樞紐 。相比GFS中的master更為精簡,不記錄文件索引信息,占用的內存量很少 。
      Tracker是FastDFS的協調者,負責管理所有的storage server和group,每個storage在啟動后會連接Tracker,告知自己所屬的group等信息,并保持周期性的心跳,tracker根據storage的心跳信息 , 建立group==>[storage server list]的映射表 。
      Tracker需要管理的元信息很少,會全部存儲在內存中;另外tracker上的元信息都是由storage匯報的信息生成的 , 本身不需要持久化任何數據 , 這樣使得tracker非常容易擴展,直接增加tracker機器即可擴展為tracker cluster來服務,cluster里每個tracker之間是完全對等的,所有的tracker都接受stroage的心跳信息 , 生成元數據信息來提供讀寫服務 。
    • storage server:存儲服務器(又稱:存儲節點或數據服務器),文件和文件屬性(meta data)都保存到存儲服務器上 。Storage server直接利用OS的文件系統調用管理文件 。
      Storage server(后簡稱storage)以組(卷,group或volume)為單位組織,一個group內包含多臺storage機器,數據互為備份,存儲空間以group內容量最小的storage為準 , 所以建議group內的多個storage盡量配置相同,以免造成存儲空間的浪費 。
      以group為單位組織存儲能方便的進行應用隔離、負載均衡、副本數定制(group內storage server數量即為該group的副本數),比如將不同應用數據存到不同的group就能隔離應用數據,同時還可根據應用的訪問特性來將應用分配到不同的group來做負載均衡;缺點是group的容量受單機存儲容量的限制,同時當group內有機器壞掉時,數據恢復只能依賴group內地其他機器,使得恢復時間會很長 。
      group內每個storage的存儲依賴于本地文件系統 , storage可配置多個數據存儲目錄,比如有10塊磁盤,分別掛載在/data/disk1-/data/disk10 , 則可將這10個目錄都配置為storage的數據存儲目錄 。
      storage接受到寫文件請求時,會根據配置好的規則(后面會介紹),選擇其中一個存儲目錄來存儲文件 。為了避免單個目錄下的文件數太多,在storage第一次啟動時 , 會在每個數據存儲目錄里創建2級子目錄,每級256個,總共65536個文件 , 新寫的文件會以hash的方式被路由到其中某個子目錄下,然后將文件數據直接作為一個本地文件存儲到該目錄中 。
    • client:客戶端,作為業務請求的發起方 , 通過專有接口,使用TCP/IP協議與跟蹤器服務器或存儲節點進行數據交互 。FastDFS向使用者提供基本文件訪問接口,比如upload、download、append、delete等 , 以客戶端庫的方式提供給用戶使用 。
    • group :組, 也可稱為卷 。同組內服務器上的文件是完全相同的,同一組內的storage server之間是對等的, 文件上傳、 刪除等操作可以在任意一臺storage server上進行。
    • meta data :文件相關屬性,鍵值對( Key Value Pair) 方式,如:width=1024,heigth=768。

    第2-1-1章 FastDFS分布式文件服務背景及系統架構介紹

    文章插圖
    2.1 Tracker集群FastDFS集群中的Tracker server可以有多臺 , Trackerserver之間是相互平等關系同時提供服務,Trackerserver不存在單點故障 。客戶端請求Trackerserver采用輪詢方式,如果請求的tracker無法提供服務則換另一個tracker 。
    2.2 Storage集群為了支持大容量 , 存儲節點(服務器)采用了分卷(或分組)的組織方式 。存儲系統由一個或多個卷組成,卷與卷之間的文件是相互獨立的,所有卷的文件容量累加就是整個存儲系統中的文件容量 。一個卷由一臺或多臺存儲服務器組成 , 卷內的Storage server之間是平等關系,不同卷的Storageserver之間不會相互通信 , 同卷內的Storageserver之間會相互連接進行文件同步 , 從而保證同組內每個storage上的文件完全一致的 。一個卷的存儲容量為該組內存儲服務器容量最小的那個 , 由此可見組內存儲服務器的軟硬件配置最好是一致的 。卷中的多臺存儲服務器起到了冗余備份和負載均衡的作用

    推薦閱讀