在現代信息世界中,我們有許多照片、文件、視頻等需要存儲。我相信幾乎所有人都嘗試過使用 google Drive 或 Dropbox。
功能需求
1.用戶可以從任何設備上傳和下載文件。2.用戶可以通過替換相同的文件名來更新文件。3.用戶可以通過電子郵件鏈接將文件和文件夾分享給其他人。4.用戶可以隨時從任何設備刪除文件和文件夾。5.刪除的文件和文件夾將在回收站中存儲 15 天。6.系統應該支持離線編輯。用戶可以在離線狀態下添加/修改文件和文件夾名稱,一旦網絡恢復,更改將與遠程服務器同步。7.用戶可以進行文件版本管理,以恢復文件的先前版本。(系統可以支持多次更改的同一文件的多個版本,帶寬和所需空間將顯著增加)8.系統可以支持跨設備的文件和文件夾同步。9.系統允許每個用戶免費上傳高達 10 GB 的文件。10.系統將為不同存儲大小提供不同的市場計劃。
非功能需求
1.系統必須高度可靠。任何上傳的文件都不得丟失。用戶可以恢復其重要文件。2.系統可以支持每周 7 天 24 小時。3.用戶可以隨時升級其計劃,并立即使用系統。4.用戶必須能夠輕松地將其系統與其他應用程序集成。例如,系統支持通過其他應用程序共享文檔。5.系統可以提供延遲或并發利用(這意味著以高效的方法從云中反復上傳和下載完整文件)。
存儲估算
1.用戶數量 = 5 億2.活躍用戶數量 = 1 億3.用戶平均存儲的文件數量 = 3004.每個文件的平均大小 = 200 KB5.總文件數量 = 5 億 * 300 = 1500 億6.需要的總存儲空間 = 1500 億 * 200 KB = 30 PB
系統組件
1.客戶端(安裝在您的桌面或移動應用程序中,用于訪問與存儲相關的應用程序)•監視用戶機器上的工作區文件夾,并通過與遠程服務器同步文件來維護一致性。因此,它必須由 4 個基本組件組成,即監視器、分塊器、索引器和內部數據庫。•監視器將監視本地工作區文件夾,并通知索引器用戶執行的任何操作(添加、刪除、替換和更新文件或文件夾),并追蹤來自其他設備的任何更改,這些更改由同步服務廣播。•分塊器將文件分成更小的塊,并從這些塊中重建文件,以便完整的文件可以在沒有任何丟失塊的情況下傳輸。分塊算法將檢測用戶修改的文件部分,并僅將已修改的部分傳輸到云存儲,從而節省帶寬和同步時間。•索引器將處理來自監視器的事件,并更新內部元數據數據庫。一旦成功從云存儲下載或上傳了塊,索引器將與遠程同步服務通信,廣播更改給其他客戶端,并更新遠程元數據數據庫。•內部元數據數據庫將跟蹤所有文件、塊、任何已更新的版本以及其在文件系統中的位置。•客戶端應用程序將通過請求上傳、下載和編輯 API 與后端云存儲服務器進行通信。客戶端還與遠程同步服務進行交互,以處理任何文件元數據更新,例如文件名、大小、修改日期等。2.元數據數據庫•保持有關文件、塊、用戶、設備、工作區和存儲位置的版本和元數據信息。•元數據數據庫可以是關系數據庫,如 MySQL,也可以是 NoSQL 數據庫服務,如 DynamoDB。•同步服務在多個用戶同時處理同一文件時,提供文件的一致視圖。•由于 NoSQL 數據存儲不支持 ACID 屬性,編程代碼會將 ACID 屬性與 NoSQL 數據庫結合在一起,用于同步服務的邏輯。3.同步服務•更新客戶端創建的文件或文件夾。•將客戶端的本地數據庫與存儲在遠程元數據數據庫中的信息同步。•使用 HTTP 長輪詢從云存儲獲取響應,或在脫機一段時間后將文件和更新發送到云存儲,一旦重新脫機,將向所有設備或用戶發送通知。•同步服務還嘗試在客戶端和云存儲之間傳輸更少的數據,以實現更快的響應時間,因此使用差異化算法來減少需要同步的數據量。不再將整個文件從客戶端傳輸到服務器,而是傳輸兩個版本文件之間的差異。僅傳輸已更改的部分(塊)。這減少了終端用戶的帶寬消耗和
云數據存儲。服務器和客戶端將計算哈希值,以查看是否更新修改的塊。該過程稱為數據去重。
1.消息隊列服務•這是一個處理讀寫請求數量的消息中間件。•一個可擴展的消息隊列服務,支持客戶端和同步服務之間的異步通信。•可用性和可靠性必須被設計得最適合消息隊列服務。•請求隊列:此隊列將在所有客戶端之間共享。當客戶端執行任何更新和請求時,此請求將發送到消息隊列服務,然后由同步服務進一步處理,最后更新元數據數據庫。•響應隊列:每個客戶端都有一個相關的響應隊列,因為每個客戶端都有一個單獨的響應隊列。•一旦文件更新,同步服務將通知所有響應隊列有關更改的信息,然后響應隊列將通知每個客戶端進行的更改。2.云/塊存儲•存儲文件的塊•使用 Amazon S3 服務•客戶端將使用 API 服務與云存儲進行交互
•文件處理工作流程:客戶端 A 將塊上傳到云存儲,然后更新元數據并提交更改,然后獲得確認。服務器將通知客戶端 B 和 C 有關更改的信息。客戶端 B 和 C 接收元數據更改并下載更新的塊。•數據去重:消除數據的重復副本。這還可以減少相同數據傳輸(發送的字節數)以提高傳輸速率。對于每個傳入的塊,都會打上一個哈希標簽,然后計算并將該哈希與現有塊的所有其他哈希進行比較。 a) 后處理去重:新塊存儲在存儲設備上,并且將分析塊以了解它們是否是重復的。優點是,客戶端不需要等待哈希計算或查找完成,然后再存儲數據,這會提高存儲性能。缺點是短時間內會存儲不必要的重復數據,并且會傳輸和消耗帶寬。 b) 內聯去重:去重哈希計算可以實時執行,以便系統可以識別重復塊,然后僅存儲不存在的塊。優點是優化網絡和存儲使用。缺點是消耗用戶的時間并降低存儲性能。
1.緩存•在 Google Drive / Dropbox 系統設計中有兩種類型的緩存•用于塊存儲的緩存•使用像 Memcache 這樣的現成解決方案的緩存,可以存儲帶有其相應 ID/哈希的整個塊和塊服務器•可以采用最近最少使用(LRU)緩存策略。2.負載均衡器(LB)•在客戶端和塊服務器之間•在客戶端和元數據服務器之間•在后端服務器之間平均分配傳入的請求3.安全性/權限和文件共享•上傳/下載的文件將與遠程服務器同步•不允許對單個文件進行多個操作(并發問題)•如果在某個過程中出現了某些連接問題,客戶端必須重新上傳或下載整個文件,或者恢復下載或上傳塊。
系統 API
1.Upload(string uploadToken, fileInfo file, userInfo user)2.Edit(string authToken, fileInfo file, userInfo user)3.Delete(string authToken, fileInfo file, userInfo user)4.Download(string authToken, fileInfo file, userInfo user)5.GenerateToken (string userName, string password)
高級系統架構
詳細系統架構