幹貨 | 公有雲存儲技術分享
公有雲是PP視頻核心的文件存儲服務,目前正在為蘇寧雲、蘇寧體育等部門提供後臺支撐。本文就 “swift分布式存儲”、“項目架構”、 “文件上傳流程”、“上傳功能”四個方面進行介紹。
一、swift分布式存儲
什麽是swift?
Swift 最初是由 Rackspace 公司開發的高可用分布式對象存儲服務,並於 2010 年貢獻給 OpenStack 開源社區作為其最初的核心子項目之一,為其 Nova 子項目提供虛機鏡像存儲服務。Swift 構築在比較便宜的標準硬件存儲基礎設施之上,無需采用 RAID(磁盤冗余陣列),通過在軟件層面引入一致性散列技術和數據冗余性,犧牲一定程度的數據一致性來達到高可用性和可伸縮性,支持多租戶模式、容器和對象讀寫操作,適合解決互聯網的應用場景下非結構化數據存儲問題。
-官網地址: http://docs.openstack.org/developer/swift/
-Github代碼地址: https://github.com/openstack/swift
下圖是swfit系統架構,細節可參考相關文檔:
swift存儲特點:
分布式對象存儲: 理論上可以存任意大小,任意類型的文件。
極高的數據持久性。Swift具備10個9以上的數據持久性。
完全對稱的系統架構。Swift中各節點可以完全對等,能極大地降低系統維護成本。
可擴展性。因為Swift是完全對稱的架構,擴容只需簡單地新增機器,系統會自動完成數據遷移等工作,使各存儲節點重新達到平衡狀態。
無單點故障。整個Swift集群中,也沒有一個角色是單點的,並且在架構和設計上保證無單點業務是有效的。
簡單、可依賴。SWift架構優美、代碼整潔、實現易懂,不管出現任何問題,都能通過日誌、閱讀代碼迅速解決。
RESTful API: 資源訪問路徑規範, 統一http協議訪問。
功能拓展和二次開發方便: 可以用插件的方式給swift服務添加附屬組件, 方便開發人員對服務進行功能擴展以及二次開發。
技術棧完備:針對用戶管理和鑒權, 有Keystone;針對存儲服務器監控, 有Swift Recon插件;針對客戶端請求監控, 有Swift Informant插件;另外,作為OpenStack項目的旗艦產品之一, Swift和Openstack技術棧的其他產品進行整合和擴展非常容易。
公有雲Swift系統設計
使用lvs做proxy負載均衡和故障轉移
使用udp發送到本機rsyslog收集日誌
依照機櫃劃分zone
使用keystone認證
使用rsync同步ring文件
二、項目架構
公有雲項目主要由 “filecenter, filecenter-tool, filecenter-hash”三個模塊組成:
filecenter
公有雲項目核心模塊。主要功能包括: 文件的創建、上傳、特征值校驗,文件擴展信息管理等。同時它負責管理和調度系統內其它他模塊(filecenter-hash、filecenter-tool)。
filecenter-tool
該模塊主要包含一些定時任務,執行一些邊緣化的任務。例如:
由於文件是分塊上傳,如果文件沒有上傳完成,則刪除一個月之前的分塊記錄。
將文件的審核信息載入redis緩存, 供之後查詢管理。
filecenter-hash
通過MQ接受filecenter派發的任務: 從swift下載文件流計算特征值,並將結果用MQ發送回filecenter。
三、文件上傳流程
1. 獲取上傳令牌: 用於後去上傳操作中校驗請求合法性
2. 獲取文件ID: 用戶提交文件信息, 公有雲生成並返回文件的ID
3. 用戶獲取分段上傳地址
4. 用戶按分段地址上傳分段到swift,swift在接收分段文件的同時驗證每個分段的MD5值, 確保接收到的分段的有效性
5. 每個分段上傳完成, 匯報公有雲
6.公有雲filecenter判斷文件上傳完畢,異步提交文件清單及通知特征值計算
四、上傳功能
基於上述核心上傳流程,公有雲還實現了“秒傳”,“斷點續傳”,“並發上傳”等功能。
秒傳
公有雲利用獨創的ppfeature作為上傳文件的唯一標識, 其特點為客戶端可以快速計算獲取; 當上傳的文件ppfeature和庫文件重疊時, 判定為已存在文件, 走秒傳流程.
斷點續傳
公有雲利用分段緩存的機制實現斷點續傳; 當上傳未完成文件時, 系統返回剩余分段地址給客戶端。
並發上傳
公有雲利用分段緩存的機制實現並發上傳:不同客戶端可以同時上傳同一文件, 並且各自獲取不同的分段地址, 從而實現無重復接力上傳。
幹貨 | 公有雲存儲技術分享