延續了大數據海洋生物的產品系列,海象在海水中靠著流線型的身體、發達的肌肉以及強有力的鰭狀肢,行動自如,大而不笨。就如同我們的海象系統一樣,在承載了成千上萬的文件之後依然可以穩定,高效的運行。我們的目標是秒接入,秒傳!隨著我們部門系統不斷增加,對文件存儲的需求也越來越大。上傳完視頻和圖片之後我們還有實時預覽的需求,所以用傳統的ftp保存就不能滿足我們了。由於我們這邊需要保存大量的圖片和視頻,使用第三方阿里雲,七牛雲,騰訊雲這些存儲服務,要提前走流程審批,提預算,費用較貴,使用第三方的服務也不利於後期我們其他系統的接入和存儲。我們就有了做個自己的分布式存儲系統的想法,海象由此而生。海象可以快速接入,只需管理員後臺開通帳號,對接接口即可。海象目前提供了restful接口上傳和js直連上傳。根據我們的接口文檔要求對接即可享受秒傳服務。目前主流的分布式存儲服務有:
TFS, Ceph, FastDFS, Minio。
TFS :是淘寶開發的一個高可擴展、高可用、高性能、面向網際網路服務的分布式文件系統,主要針對海量的非結構化數據
Ceph: 是加州大學Santa Cruz分校的Sage Weil(DreamHost的聯合創始人)專為博士論文設計的新一代自由軟體分布式文件系統
FastDFS: 是一個輕量級的開源分布式文件系統,主要解決了大容量的文件存儲和高並發訪問問題,文件存取時實現了負載均衡
Minio: 是GlusterFS創始人之一Anand Babu Periasamy發布新的開源項目。Minio兼容Amason的S3分布式對象存儲項目經過對比發現MinIO 對象存儲系統是為
海量數據存儲、人工智慧、大數據分析而設計,基於Apache License v2.0 開源協議的對象存儲系統,它完全兼容 Amazon S3 接口,單個對象的最大可達 5TB,適合存儲海量圖片、視頻、日誌文件、備份數據和容器/虛擬機鏡像等。Minio採用去中心化設計,摒棄複雜的大規模集群調度管理去除對第三方組件zookepper,kafaka等的依賴,減少風險因素與性能瓶頸,打造高可靠的集群、靈活的擴展能力以及超高的性能。Minio集群安裝簡單,監控完善,易於維護,對linux運維要求很低。Minio採用的是建立眾多的中小集群組成集群聯盟,減少集群之間出錯互相影響。
海象系統總體分為兩大部分web端管理系統,底層Minio存儲系統。目前minio集群由兩臺機器構成的,每臺機器創建兩個data目錄。其他系統調用接口上傳文件時,minio會把這個文件平均分成兩份放到兩天不同的機器中。當一臺的某個文件損壞時,minio會自動檢測並恢復此文件。
對象:類似於hash表中的表項:它的名字相當於關鍵字,它的內容相當於「值」。
租戶:用於隔離存儲資源。在租戶之下可以建立桶、存儲對象。
用戶:在租戶下面創建的用於訪問不同桶的帳號。可以使用MinIO提供的mc命令設置不用用戶訪問各個桶的權限。
上傳一個文件後minio會生成兩個文件part.1和xl.josn 其中xl.josn中存放的是這部分文件的詳細信息(文件大小,桶位置,糾刪碼信息等),part.1中會存放糾刪碼或者文件信息。下載一個文件時,minio會根據存儲的糾刪碼和文件部分組合合成一個完整的文件。
Minio中引入了糾刪碼技術,糾刪碼的具體作用是:
糾刪碼是一種恢復丟失和損壞數據的數學算法, Minio採用Reed-Solomon code將對象拆分成N/2數據和N/2 奇偶校驗塊。這就意味著如果是12塊盤,一個對象會被分成6個數據塊、6個奇偶校驗塊,你可以丟失任意6塊盤(不管其是存放的數據塊還是奇偶校驗塊),你仍可以從剩下的盤中的數據進行恢復
糾刪碼的工作原理和RAID或者複製不同,像RAID6可以在損失兩塊盤的情況下不丟數據,而Minio糾刪碼可以在丟失一半的盤的情況下,仍可以保證數據安全。而且Minio糾刪碼是作用在對象級別,可以一次恢復一個對象,而RAID是作用在卷級別,數據恢復時間很長。Minio對每個對象單獨編碼,存儲服務一經部署,通常情況下是不需要更換硬碟或者修復。Minio糾刪碼的設計目標是為了性能和儘可能的使用硬體加速。
MinIO對象存儲系統從設計之初就考慮到修復靜默錯誤,從被修復的目標來說,按照大小可以分為以下三種類型的修復:某個對象、某個桶、整個集群。當文件由磁記錄磨損、磁碟幻象寫(phantom writes)、磁碟指向錯誤導致損壞時,在控制臺上執行mc命令即開始進行數據修復。該命令一方面向minio發送數據修復的HTTP請求,另一方面不斷地接收minio服務進程返回的修復進度信息,而後輸出到控制臺,直到修復工作完畢。如前面所述,每個對象都被分成多個分片,然後存儲於多臺主機的磁碟上。數據修復可以分為正常、深度兩種模式,正常模式下只是簡單地檢查分片狀態信息,深度模式下會使用hash算法來校驗分片的內容,找出比特位錯誤,同時也更耗費資源。
Minio集群不支持對單個集群進行擴展,MinIO對象存儲系統的這種設計,使得系統的很多模塊更加簡單(比如從一個對象轉換到它所在的糾刪組,只用簡單的哈希即可。)降低了整個系統出錯的概率,使得MinIO對象存儲系統更加可靠、穩定。當容量不夠需要擴容時,minio支持聯盟集群的形式,再創建一個minio集群和原來的集群形成聯盟。當有文件上傳到聯盟集群時minio會判斷哪個集群容量大,就向大的集群存儲,以達到容量均衡的目的。
每分鐘上傳文件
https://blog.csdn.net/liuben/article/details/101529892