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

目錄

  • 1 背景
    • 1.1 為什么需要分布式文件服務
      • 1.1.1 單機時代
      • 1.1.2 獨立文件服務器
      • 1.1.3 分布式文件系統
    • 1.2 什么是FastDFS
  • 2 系統架構
    • 2.1 Tracker集群
    • 2.2 Storage集群
    • 2.3 Storage狀態收集
    • 2.4 FastDFS的上傳過程
    • 2.5 FastDFS的文件同步
    • 2.6 FastDFS的文件下載
1 背景1.1 為什么需要分布式文件服務1.1.1 單機時代初創時期由于時間緊迫,在各種資源有限的情況下 , 通常就直接在項目目錄下建立靜態文件夾 , 用于用戶存放項目中的文件資源 。如果按不同類型再細分,可以在項目目錄下再建立不同的子目錄來區分 。例如:resources\static\file、resources\static\iamge等 。
  • 優點:這樣做比較便利,項目直接引用就行,實現起來也簡單,無需任何復雜技術 , 保存數據庫記錄和訪問起來也很方便 。
  • 缺點:如果只是后臺系統的使用一般也不會有什么問題,但是作為一個前端網站使用的話就會存在弊端 。一方面,文件和代碼耦合在一起,文件越多存放越混亂;另一方面 , 如果流量比較大 , 靜態文件訪問會占據一定的資源,影響正常業務進行,不利于網站快速發展 。
1.1.2 獨立文件服務器隨著公司業務不斷發展,將代碼和文件放在同一服務器的弊端就會越來越明顯 。為了解決上面的問題引入獨立圖片服務器,工作流程如下:項目上傳文件時,首先通過ftp或者ssh將文件上傳到圖片服務器的某個目錄下,再通過ngnix或者apache來訪問此目錄下的文件,返回一個獨立域名的圖片URL地址,前端使用文件時就通過這個URL地址讀取 。
  • 優點:圖片訪問是很消耗服務器資源的(因為會涉及到操作系統的上下文切換和磁盤I/O操作),分離出來后,Web/App服務器可以更專注發揮動態處理的能力;獨立存儲,更方便做擴容、容災和數據遷移;方便做圖片訪問請求的負載均衡,方便應用各種緩存策略(HTTP Header、Proxy Cache等),也更加方便遷移到CDN 。
  • 缺點:單機存在性能瓶頸,容災、垂直擴展性稍差
1.1.3 分布式文件系統通過獨立文件服務器可以解決一些問題,如果某天存儲文件的那臺服務突然down了怎么辦?可能你會說,定時將文件系統備份,這臺down機的時候 , 迅速切換到另一臺就OK了,但是這樣處理需要人工來干預 。另外,當存儲的文件超過100T的時候怎么辦?單臺服務器的性能問題?這個時候我們就應該考慮分布式文件系統了 。
業務繼續發展,單臺服務器存儲和響應也很快到達了瓶頸,新的業務需要文件訪問具有高響應性、高可用性來支持系統 。分布式文件系統,一般分為三塊內容來配合,服務的存儲、訪問的仲裁系統,文件存儲系統,文件的容災系統來構成,仲裁系統相當于文件服務器的大腦,根據一定的算法來決定文件存儲的位置 , 文件存儲系統負責保存文件,容災系統負責文件系統和自己的相互備份 。
  • 優點:擴展能力: 毫無疑問,擴展能力是一個分布式文件系統最重要的特點;高可用性: 在分布式文件系統中,高可用性包含兩層,一是整個文件系統的可用性,二是數據的完整和一致性;彈性存儲: 可以根據業務需要靈活地增加或縮減數據存儲以及增刪存儲池中的資源,而不需要中斷系統運行
  • 缺點:系統復雜度稍高,需要更多服務器
1.2 什么是FastDFSFastDFS是一個開源的輕量級分布式文件系統 。它解決了大數據量存儲和負載均衡等問題 。特別適合以中小文件(建議范圍:4KB < file_size <500MB)為載體的在線服務,如相冊網站、視頻網站等等 。在UC基于FastDFS開發向用戶提供了:網盤,社區 , 廣告和應用下載等業務的存儲服務 。
FastDFS是一款開源的輕量級分布式文件系統純C實現,支持Linux、FreeBSD等UNIX系統類google FS , 不是通用的文件系統,只能通過專有API訪問,目前提供了C、Java和PHP API為互聯網應用量身定做,解決大容量文件存儲問題,追求高性能和高擴展性FastDFS可以看做是基于文件的key value pair存儲系統,稱作分布式文件存儲服務更為合適 。
FastDFS特性: