0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

對比SeaweedFS與JuiceFS在設(shè)計(jì)與功能上的差異

OSC開源社區(qū) ? 來源:Juicedata ? 2023-02-16 10:22 ? 次閱讀

SeaweedFS 是一款高效的分布式文件存儲系統(tǒng),最早的設(shè)計(jì)原型參考了 Facebook 的 Haystack,具有快速讀寫小數(shù)據(jù)塊的能力。本文將通過對比 SeaweedFS 與 JuiceFS 在設(shè)計(jì)與功能上的差異,以幫助讀者進(jìn)行更適合自己的選擇。

SeaweedFS 系統(tǒng)結(jié)構(gòu)

SeaweedFS 由 3 部分組成,底層存儲文件的 Volume Server,用于管理集群的 Master Server,以及一個向上提供更多特性的 Filer 可選組件。

67f1a4b4-ad33-11ed-bfe3-dac502259ad0.png

Volume Server 與 Master Server

在系統(tǒng)運(yùn)作上,Volume Server 與 Master Server 一并服務(wù)于文件的存儲。Volume Server 專注于數(shù)據(jù)的寫入與讀取,而 Master Server 則偏向是一個集群與 Volumes 的管理服務(wù)。

在讀寫數(shù)據(jù)時,SeaweedFS 的實(shí)現(xiàn)與 Haystack 相似,用戶創(chuàng)建的一個 Volume 即是一個大磁盤文件(下圖的 Superblock)。在此 Volume 中,用戶寫入的所有文件(下圖的 Needle)都會被合并到該大磁盤文件中。

在開始寫入數(shù)據(jù)之前,調(diào)用者需要向 SeaweedFS(Master Server)進(jìn)行寫入申請,隨后 SeaweedFS 會根據(jù)當(dāng)前的數(shù)據(jù)量返回一個 File ID(由 Volume ID 與 offset 組成),在寫入的過程中,一并被寫入的還有基礎(chǔ)的元數(shù)據(jù)信息(文件長度與 Chunk 等信息);

當(dāng)寫入完成之后,調(diào)用者需要在一個外部系統(tǒng)(例如 MySQL)中對該文件與返回的 File ID 進(jìn)行關(guān)聯(lián)保存。在讀取數(shù)據(jù)時,由于 File ID 已經(jīng)包含了計(jì)算文件位置(偏移)的所有信息,因此可以高效地將文件的內(nèi)容讀取出來。

681ad474-ad33-11ed-bfe3-dac502259ad0.png

Filer

在上述的底層存儲單元之上,SeaweedFS 提供了一個名為 Filer 的組件。通過向下對接 Volume Server 與 Master Server,對外提供豐富的功能與特性(如 POSIX 支持、WebDAV、S3 接口等)。與 JuiceFS 相同,F(xiàn)iler 也需要對接一個外部數(shù)據(jù)庫以保存元數(shù)據(jù)信息。

為了方便闡述,下文中所指的 SeaweedFS,皆包含了 Filer 組件。

JuiceFS 系統(tǒng)結(jié)構(gòu)

6829b336-ad33-11ed-bfe3-dac502259ad0.png

JuiceFS 采用「數(shù)據(jù)」「元數(shù)據(jù)」分離存儲的架構(gòu),文件數(shù)據(jù)本身會被切分保存在對象存儲(如 Amazon S3)當(dāng)中,而元數(shù)據(jù)則是會被保存在用戶自行選擇的數(shù)據(jù)庫里(如 Redis、MySQL)。通過共享同一個份數(shù)據(jù)庫與對象存儲,JuiceFS 實(shí)現(xiàn)了一個強(qiáng)一致性保證的分布式文件系統(tǒng),同時還具有「POSIX 完全兼容」、「高性能」等諸多特性。

元數(shù)據(jù)對比

SeaweedFS 與 JuiceFS 都支持通過外部數(shù)據(jù)庫以存儲文件系統(tǒng)的元數(shù)據(jù)信息。在數(shù)據(jù)庫支持層面,SeaweedFS 支持多達(dá)24 種[1]數(shù)據(jù)庫。JuiceFS 對數(shù)據(jù)庫事務(wù)能力要求高(見下文),當(dāng)前支持了 3 類共 10 種事務(wù)型數(shù)據(jù)庫。

原子性操作

為了保證所有元數(shù)據(jù)操作的原子性,JuiceFS 在實(shí)現(xiàn)層面需要使用有事務(wù)處理能力的數(shù)據(jù)庫。而 SeaweedFS僅在執(zhí)行 rename 操作時啟用了部分?jǐn)?shù)據(jù)庫(SQL、ArangoDB 和 TiKV)的事務(wù), 對于數(shù)據(jù)庫的事務(wù)能力要求較低。同時,由于Seaweed FS 在 rename 操作中拷貝元數(shù)據(jù)時,未對原目錄或文件進(jìn)行加鎖,可能會導(dǎo)致過程中更新的數(shù)據(jù)丟失。

變更日志(changelog)

SeaweedFS 會為所有的元數(shù)據(jù)操作生成變更日志,此日志可被進(jìn)一步用于數(shù)據(jù)復(fù)制(見下文)、操作審計(jì)等功能,而 JuiceFS 則暫未實(shí)現(xiàn)此特性。

存儲對比

如前文所述,SeaweedFS 的數(shù)據(jù)存儲由 Volume Server + Master Server 實(shí)現(xiàn),支持小數(shù)據(jù)塊的「合并存儲」、「糾刪碼」等特性。而 JuiceFS 的數(shù)據(jù)存儲則是依托于對象存儲服務(wù)服務(wù),相關(guān)的特性也都由用戶選擇的對象存儲提供。

文件拆分

在存儲數(shù)據(jù)時,SeaweedFS 與 JuiceFS 都會將文件拆分成若干個小塊再持久化到底層的數(shù)據(jù)系統(tǒng)中。

SeaweedFS 將文件拆分成 8MB 的塊,對于超大文件(超過 8GB),它會將 Chunk 索引也保存到底層的數(shù)據(jù)系統(tǒng)中。

JuiceFS 則是先拆成 64MB 的 Chunk,再拆成 4MB 的 Object,通過內(nèi)部一個 Slice 的概念對隨機(jī)寫、順序讀、重復(fù)寫等性能進(jìn)行了優(yōu)化。(詳情見讀取清求處理流程[2])

分層存儲

對于新創(chuàng)建的 Volume,SeaweedFS 會把數(shù)據(jù)存儲在本地,而對于較舊的 Volume,SeaweedFS 支持將他們上傳至云端以達(dá)到冷熱數(shù)據(jù)的分離[3]。在此方面,JuiceFS 則需要依賴外部的服務(wù)。

數(shù)據(jù)壓縮

JuiceFS 支持使用 LZ4 或者 ZStandard 來為所有寫入的數(shù)據(jù)進(jìn)行壓縮,而 SeaweedFS 則是根據(jù)寫入文件的擴(kuò)展名、文件類型等信息來選擇是否進(jìn)行壓縮。

存儲加密

JuiceFS 支持傳輸中加密(encryption in transit)及靜態(tài)加密(encryption at rest),在用戶開啟了靜態(tài)加密時,需要用戶傳遞一個自行管理的密鑰,所有寫入的數(shù)據(jù)都會基于此密鑰進(jìn)行數(shù)據(jù)的加密。詳情見 《數(shù)據(jù)加密[4]》。

SeaweedFS 同樣支持傳輸中加密與靜態(tài)加密。在開啟了數(shù)據(jù)加密后,所有寫入 Volume Server 的數(shù)據(jù)都會使用隨機(jī)的密鑰進(jìn)行加密,而這些對應(yīng)的隨機(jī)密鑰信息則由維護(hù)「metadata」「Filer」進(jìn)行管理。

訪問協(xié)議

POSIX 兼容性

JuiceFS完全兼容 POSIX[5], 而 SeaweedFS 目前只實(shí)現(xiàn)了部分的 POSIX 兼容(「Issue 1558」[6]與Wiki[7]),功能還持續(xù)完善中。

S3 協(xié)議

JuiceFS 通過 MinIO S3 網(wǎng)關(guān)實(shí)現(xiàn)了S3 網(wǎng)關(guān)[8]的功能。它為 JuiceFS 中的文件提供跟 S3 兼容的 RESTful API,在不方便掛載的情況下能夠用 s3cmd、AWS CLI、MinIO Client(mc)等工具管理 JuiceFS 上存儲的文件。

SeaweedFS 當(dāng)前支持了約 20 個 S3 API,覆蓋了常用的讀寫查刪等請求,對一些特定的請求(如 Read)還做了功能上的擴(kuò)展,詳細(xì)見Amazon-S3-API[9]。

WebDAV 協(xié)議

JuiceFS 與 SeaweedFS 皆支持 WebDAV 協(xié)議。

HDFS 兼容性

JuiceFS完整兼容 HDFS API[10]。不僅兼容 Hadoop 2.x 和 Hadoop 3.x,還兼容 Hadoop 生態(tài)系統(tǒng)中的各種組件。SeaweedFS 則是提供了對 HDFS API 的基礎(chǔ)兼容[11],對于部分操作(如 turncate、concat、checksum 和擴(kuò)展屬性等)則尚未支持。

CSI 驅(qū)動

JuiceFS[12]與SeaweedFS[13]皆提供了 「Kubernetes CSI Driver」 以幫助用戶在 Kubernetes 生態(tài)中使用對應(yīng)的文件系統(tǒng)。

擴(kuò)展功能

客戶端緩存

JuiceFS 有著多種客戶端緩存策略,涵蓋從元數(shù)據(jù)到數(shù)據(jù)緩存的各個部分,允許用戶根據(jù)自己的應(yīng)用場景進(jìn)行調(diào)優(yōu)(詳情[14]),而 SeaweedFS 不具備客戶端緩存能力。

集群數(shù)據(jù)復(fù)制

對于多個集群之間的數(shù)據(jù)復(fù)制,SeaweedFS 支持「Active-Active」與「Active-Passive」兩種異步的復(fù)制模式,2 種模式都是通過傳遞 changelog 再應(yīng)用的機(jī)制實(shí)現(xiàn)了不同集群數(shù)據(jù)間的一致性,對于每一條 changelog,其中會有一個簽名信息以保證同一個修改不會被循環(huán)多次。在集群節(jié)點(diǎn)數(shù)量超過 2 個節(jié)點(diǎn)的 Active-Active 模式下,SeaweedFS 的一些操作(如重命名目錄)會受到一些限制。

JuiceFS 尚未原生支持集群之間的數(shù)據(jù)同步功能,需要依賴元數(shù)據(jù)引擎和對象存儲自身的數(shù)據(jù)復(fù)制能力。

云上數(shù)據(jù)緩存

SeaweedFS 可以作為云上對象存儲的緩存來使用,支持通過命令手動預(yù)熱數(shù)據(jù)。對于緩存數(shù)據(jù)的修改,會異步同步到對象存儲中。JuiceFS 需要將文件分塊存儲到對象存儲中,尚不支持為對象存儲中已有的數(shù)據(jù)提供緩存加速。

回收站

JuiceFS 默認(rèn)開啟回收站[15]功能,會自動將用戶刪除的文件移動到 JuiceFS 根目錄下的 .trash 目錄內(nèi),保留指定時間后才將數(shù)據(jù)真正清理。SeaweedFS 暫不支持此功能。

運(yùn)維工具

JuiceFS 提供了 juciefs stats 以及 juicefs profile 兩種子命令,允許用戶實(shí)時查看當(dāng)前或回放某一時間段的性能指標(biāo)。同時,JuiceFS 還對外開發(fā)metrics[16]接口,用戶能夠方便地將監(jiān)控?cái)?shù)據(jù)接入到 Prometheus 與 Grafana 中。

SeaweedFS 則同時實(shí)現(xiàn)了Push 與 Pull[17]2種方式對接 Prometheus 與Grafana ,同時提供了weed shell[18]的交互式工具方便使用者進(jìn)行一系列運(yùn)維工作(如查看當(dāng)前集群狀態(tài)、列舉文件列表等)。

其它

?在發(fā)布時間上,SeaweedFS 于 2015 年 4 月發(fā)布,目前累計(jì) stars 為 16.4K,而 JuiceFS 于 2021 年 1 月發(fā)布,截止目前累計(jì) 7.3K stars。

?在項(xiàng)目上,JuiceFS 與 SeaweedFS 皆采用了對商用更友好的 Apache License 2.0,SeaweedFS 主要由 Chris Lu 個人進(jìn)行維護(hù),而 JuiceFS 則主要由 Juicedata 公司進(jìn)行維護(hù)。

? JuiceFS 與 SeaweedFS 皆采用 Go 語言進(jìn)行編寫。

對比清單

SeaweedFS JuiceFS
元數(shù)據(jù) 多引擎 多引擎
元數(shù)據(jù)操作原子性 未保證 通過數(shù)據(jù)庫事務(wù)保證
變更日志
數(shù)據(jù)存儲 包含 外部服務(wù)
糾刪碼 支持 依賴外部服務(wù)
數(shù)據(jù)合并 支持 依賴外部服務(wù)
文件拆分 8MB 64MB + 4MB
分層存儲 支持 依賴外部服務(wù)
數(shù)據(jù)壓縮 支持(基于擴(kuò)展名) 支持(全局設(shè)置)
存儲加密 支持 支持
POSIX 兼容性 基本 完整
S3 協(xié)議 基本 基本
WebDAV 協(xié)議 支持 支持
HDFS 兼容性 基本 完整
CSI 驅(qū)動 支持 支持
客戶端緩存 不支持 支持
集群數(shù)據(jù)復(fù)制 雙向異步、多模式 不支持
云上數(shù)據(jù)緩存 支持(手動同步) 不支持
回收站 不支持 支持
運(yùn)維工具 提供 提供
發(fā)布時間 2015.4 2021.1
主要維護(hù)者 個人(Chris Lu) 公司(Juicedata Inc)
語言 Go Go
開源協(xié)議 Apache License 2.0 Apache License 2.0





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲系統(tǒng)
    +關(guān)注

    關(guān)注

    2

    文章

    400

    瀏覽量

    40808
  • volume
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    7828
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    793

    瀏覽量

    26353
  • Posix
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    9476

原文標(biāo)題:淺析SeaweedFS與JuiceFS架構(gòu)異同

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    三極管和MOS管功能上有什么區(qū)別?

    MOS管和三極管功能上有什么區(qū)別?這兩種元件本身就可以看作一個基本單元,一個獨(dú)立的器件,就算拆開外殼,用肉眼也找不出什么差別,從工作原理上理解又謷牙詰屈,這次從一個簡單的觸摸燈電路來感受一下二者功能上的區(qū)別。
    發(fā)表于 02-21 09:00 ?538次閱讀

    No Output是什么意思? Generation與Compare功能上有什么區(qū)別?

    No Output是什么意思? Generation 與 Compare功能上有什么區(qū)別?
    發(fā)表于 04-07 07:19

    哪里可找到智能門鎖功能上開發(fā)的公司

    本帖最后由 gk320830 于 2015-3-4 22:59 編輯 那里可找到智能門鎖功能上開發(fā)的公司
    發(fā)表于 09-01 23:10

    LG可卷曲電視畫質(zhì)以及功能上有什么改變嗎?

    柔性屏能做什么?LG可卷曲電視有什么特點(diǎn)?LG可卷曲電視畫質(zhì)以及功能上有什么改變嗎?
    發(fā)表于 06-17 11:54

    請問交流伺服電機(jī)和無刷直流伺服電機(jī)功能上有什么區(qū)別?

    伺服系統(tǒng)是什么?伺服系統(tǒng)的主要作用有哪些?伺服系統(tǒng)主要分為哪幾類?對伺服系統(tǒng)的基本要求有哪些? 交流伺服電機(jī)和無刷直流伺服電機(jī)功能上有什么區(qū)別?
    發(fā)表于 07-13 08:15

    請問交流伺服電機(jī)和無刷直流伺服電機(jī)功能上有什么區(qū)別?

    伺服電機(jī)和步進(jìn)電機(jī)的區(qū)別是什么?請問交流伺服電機(jī)和無刷直流伺服電機(jī)功能上有什么區(qū)別?
    發(fā)表于 10-08 08:40

    請問交流伺服電機(jī)和無刷直流伺服電機(jī)功能上有什么區(qū)別?

    什么是伺服電機(jī)?有幾種類型?工作特點(diǎn)是什么?請問交流伺服電機(jī)和無刷直流伺服電機(jī)功能上有什么區(qū)別?
    發(fā)表于 10-13 06:01

    怎樣基于單片機(jī)的計(jì)算器功能上加入時鐘模式呢

    怎樣基于單片機(jī)的計(jì)算器功能上加入時鐘模式呢?
    發(fā)表于 02-24 07:05

    請問一下proteus和protel軟件仿真功能上的差別在什么地方?

    請問一下proteus和protel軟件仿真功能上的差別在什么地方?就是說他們仿真上有沒有各自的什么側(cè)重點(diǎn)?哪個的功能強(qiáng)些?
    發(fā)表于 04-26 15:43

    RS232與RS485功能上的區(qū)別

    RS232與RS485功能上的區(qū)別介紹。
    發(fā)表于 11-15 11:19 ?1395次閱讀

    8位和32位MCU功能上有什么區(qū)別?如何選擇?

    該如何對8位以及32位的MCU進(jìn)行選擇?8位和32位MCU功能上仍是互為輔助、各有千秋,這其中的訣竅就在于,需先了解什么樣的應(yīng)用適合什么樣的MCU架構(gòu)。
    的頭像 發(fā)表于 08-16 17:37 ?2.2w次閱讀

    汽車 LED 前燈形式和功能上的演變

    汽車 LED 前燈形式和功能上的演變
    發(fā)表于 03-20 08:04 ?9次下載
    汽車 LED 前燈<b class='flag-5'>在</b>形式和<b class='flag-5'>功能上</b>的演變

    負(fù)載常見的三種形式屬性和功能上有什么不同?

    負(fù)載常見的三種形式屬性和功能上有什么不同?負(fù)載常見的三種形式:阻性負(fù)載、感性負(fù)載、容性負(fù)載,三者在其屬性、電壓/電流關(guān)系和功能上有所不同,下面進(jìn)行詳細(xì)分析。1、不同的屬性:直流和交流純阻性負(fù)載產(chǎn)生
    的頭像 發(fā)表于 10-11 18:10 ?3444次閱讀
    負(fù)載常見的三種形式<b class='flag-5'>在</b>屬性和<b class='flag-5'>功能上</b>有什么不同?

    負(fù)載常見的三種形式屬性和功能上有什么不同?

    負(fù)載常見的三種形式屬性和功能上有什么不同? 計(jì)算機(jī)科學(xué)中,負(fù)載(Load)是指一個系統(tǒng)或設(shè)備正在承受的工作量或任務(wù)量。常見的負(fù)載形式主要包括計(jì)算負(fù)載、網(wǎng)絡(luò)負(fù)載和存儲負(fù)載。這三種形式
    的頭像 發(fā)表于 11-13 16:04 ?1283次閱讀

    6芯M16公頭汽車功能上的應(yīng)用

      德索工程師說道6芯M16公頭汽車功能上的應(yīng)用非常廣泛,其多芯設(shè)計(jì)和優(yōu)良的電氣性能使得它能夠滿足汽車系統(tǒng)中對多通道、多參數(shù)監(jiān)測的需求,提高系統(tǒng)的集成度和工作效率。以下是關(guān)于6芯M16公頭汽車
    的頭像 發(fā)表于 06-21 13:49 ?216次閱讀
    6芯M16公頭<b class='flag-5'>在</b>汽車<b class='flag-5'>功能上</b>的應(yīng)用