浅析 GlusterFS 与 JuiceFS 的架构异同

news2025/1/18 5:11:08

在进行分布式文件存储解决方案的选型时,GlusterFS 无疑是一个不可忽视的考虑对象。作为一款开源的软件定义分布式存储解决方案,GlusterFS 能够在单个集群中支持高达 PiB 级别的数据存储。自从首次发布以来,已经有超过十年的发展历程。目前,该项目主要由 Red Hat 负责维护,并且在全球范围内拥有庞大的用户群体。本文旨在通过对比分析的方式,介绍 GlusterFS 与 JuiceFS 的区别,为您的团队在技术选型过程中提供一些参考。

系统架构对比

GlusterFS

GlusterFS 采用的是全分布式的架构,没有中心化节点。GlusterFS 集群主要由服务端和客户端两大部分组成。其中服务端负责管理和存储数据,通常被称为可信存储池(Trusted Storage Pool)。这个存储池由一系列对等的 Server 节点组成,一般会运行两类进程:

  • glusterd:每个节点一个,负责配置管理和分发等。
  • glusterfsd:每个 Brick 一个,负责处理数据请求和对接底层文件系统。

每个 Brick 上的所有文件可以看成是 GlusterFS 的一个子集,就文件内容而言,通过 Brick 直接访问和通过 GlusterFS 客户端访问看到的结果通常是一致的。因此,在 GlusterFS 异常情况下,用户通过整合多个 Bricks 内容就能一定程度上恢复出原有数据。另外在部署时,为了确保某台机器故障时,整个文件系统的访问不受影响,通常会对数据做冗余保护。在 GlusterFS 中,多个 Bricks 会组成一个冗余组,互相之间通过副本纠删码的方式实现数据保护。当某个节点故障时,只能在冗余组内做恢复,恢复的时间会比较长。在 GlusterFS 集群扩容时,需要以冗余组为单位整体扩容。

客户端是挂载了 GlusterFS 的节点,负责对应用程序展示统一的命名空间。其架构图如下(来自 https://docs.gluster.org/en/latest/Quick-Start-Guide/Architecture/):

JuiceFS

JuiceFS 采用「数据」与「元数据」分离存储的架构,文件数据本身会被切分保存在对象存储(如 Amazon S3)当中,而元数据则是会被保存在用户自行选择的数据库里(如 Redis、MySQL)。通过共享同一个份数据库与对象存储,JuiceFS 实现了一个强一致性保证的分布式文件系统,同时还具有「POSIX 完全兼容」、「高性能」等诸多特性。JuiceFS 的架构,在其文档有更详细的介绍。

元数据管理对比

GlusterFS 元数据是纯分布式的,没有集中的元数据服务。客户端通过对文件名哈希确定其所属的 Brick;当请求需要跨多个 Bricks 访问(如 mv,ls 等)时,由客户端负责协调。这种设计架构上比较简单,但当系统规模扩大时,往往会带来性能瓶颈。比如,ls 一个大目录时可能会需要访问多个 Bricks 来获得完整的结果,其中任何一个的卡顿都会导致整个请求变慢。另外,跨 Bricks 修改操作在途中遇到故障时,元数据一致性也比较难保证。在严重故障时,还可能出现脑裂,需要手动恢复数据到统一版本。

JuiceFS 的元数据存储在一个独立的数据库(称为元数据引擎)中,客户端会将文件元数据操作转换成此数据库的一个事务,借助数据库的事务能力来保证操作的原子性。这种设计使得 JuiceFS 的实现变得简单,但对元数据引擎提出了较高的要求。目前 JuiceFS 支持三大类 10 种事务型数据库,具体可参见元数据引擎文档。

数据管理对比

GlusterFS 通过整合多个服务端节点的 Bricks(一般构建在本地文件系统之上,如 XFS)来存储数据。因此,它本身提供了一定的数据管理功能,如分布管理、冗余保护、故障切换、静默错误检测等。JuiceFS 则不直接使用硬盘,而是通过对接各种对象存储来管理数据,大部分特性都依赖于对象存储自身的实现。

大文件拆分

在分布式系统中,将大文件拆分成多个小块散列存储在不同节点中是一种常见的优化手段。这往往能让应用在访问此文件时有更高的并发度和整体带宽。

  • GlusterFS:不拆分(曾有过 Striped Volume 会拆分大文件,现已不再支持)。
  • JuiceFS:文件先按大小拆成 64 MiB 的 Chunks,每个 Chunk 再根据写入模式进一步拆成默认 4 MiB 的 Blocks;具体可参见架构文档。

冗余保护

  • GlusterFS:支持**副本(Replicated Volume)纠删码(Dispersed Volume)**两种类型。
  • JuiceFS:依赖于使用的对象存储。

数据压缩

  • GlusterFS:

    • 仅支持传输层压缩,文件由客户端执行压缩,传输到服务端后再由 Brick 负责解压缩。
    • 不直接实现存储层压缩,而是依赖于 Brick 使用的底层文件系统,如 ZFS。
  • JuiceFS:同时支持传输层压缩存储层压缩,数据的压缩和解压缩都在客户端执行。

数据加密

  • GlusterFS:

    • 仅支持传输层加密,依赖于 SSL/TLS。
    • 曾支持过存储层加密,但现已不再支持。
  • JuiceFS:同时支持传输层加密存储层加密,数据的加密和解密都在客户端进行。

访问协议

POSIX 兼容性

  • GlusterFS:兼容。
  • JuiceFS:兼容。

NFS 协议

  • GlusterFS:曾有内嵌服务来支持 NFSv3,但现已不再推荐使用,而是建议用 NFS server 将挂载点导出。
  • JuiceFS:不直接支持,需要挂载后通过其他 NFS server 导出。

CIFS 协议

  • GlusterFS:内嵌支持 Windows,Linux Samba client 和 macOS 的 CLI 访问,不支持 macOS Finder。然而,文档中建议用通过 Samba 将挂载点导出的方式使用。
  • JuiceFS:不直接支持,需要挂载后通过 Samba 导出。

S3 协议

  • GlusterFS:通过 gluster-swift 项目支持,但其最近更新停留在 2017年11月。
  • JuiceFS:通过结合 MinIO S3 网关支持。

HDFS 兼容性

  • GlusterFS:通过 glusterfs-hadoop 项目支持,但其最近更新停留在 2015 年 5月。
  • JuiceFS:完整兼容 HDFS API。

CSI 驱动

  • GlusterFS:曾支持过,但最近版本发布于 2018 年 11 月,且仓库已被标记 DEPRECATED。
  • JuiceFS:支持,具体可参见 JuiceFS CSI 驱动文档。

扩展功能

POSIX ACLs

Linux 下对文件的访问权限控制一般有三类实体,即文件拥有者(owner)、拥有组(group)和其他(other)。当我们有更复杂的需求,比如要给本属于 other 的某个特定用户单独赋予权限时,这套机制就做不到了。POSIX Access Control Lists (ACLs) 提供增强的权限管理功能,可用来为任意用户/用户组指定权限。

  • GlusterFS:支持,且支持 access ACLs 和 default ACLs。
  • JuiceFS:不支持。

跨域复制

跨域复制是指在两套独立的集群间进行数据复制,一般被用来实现异地灾备。

  • GlusterFS:支持单向的异步增量复制,但需要两边是同版本的 Gluster 集群。
  • JuiceFS:依赖元数据引擎和对象存储自身的复制能力,可以做单向复制。

目录配额

  • GlusterFS:支持,且支持限制容量和/或文件数。
  • JuiceFS:支持,且支持限制容量和/或文件数。

快照

  • GlusterFS:仅支持存储卷级别的快照,而且需要所有 Bricks 部署在 LVM 精简卷(Thinly-Provisioned LVM)上。
  • JuiceFS:不支持快照,但支持目录级别的克隆。

回收站

  • GlusterFS:支持,且默认关闭。
  • JuiceFS:支持,且默认打开。

对比清单

GlusterFSJuiceFS
元数据纯分布式独立数据库服务
数据存储自主管理依赖对象存储服务
大文件拆分不拆分拆分
冗余保护副本、纠删码依赖对象存储服务
数据压缩部分支持支持
数据加密部分支持支持
POSIX 兼容性完整完整
NFS 协议不直接支持不直接支持
CIFS 协议不直接支持不直接支持
S3 协议支持(久未更新)支持
HDFS 兼容性支持(久未更新)支持
CSI 驱动支持支持
POSIX ACLs支持不支持
跨域复制支持依赖外部服务
目录配额支持支持
快照支持不支持(但支持克隆)
回收站支持支持
主要维护者Red Hat, IncJuicedata, Inc
开发语言CGo
开源协议GPLV2 and LGPLV3+Apache License 2.0

更多阅读

  • 浅析 SeaweedFS 与 JuiceFS 架构异同

  • 云上大数据存储:探究 JuiceFS 与 HDFS 的异同

  • 浅析三款大规模分布式文件系统架构设计:GFS、Tectonic、JuiceFS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/926294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ebay账号关联怎么办?如何防关联?店铺多开干货

Ebay是明确不允许一个卖家有多个ebay账户的,做跨境电商的朋友为了“不在一颗树上吊死”,大家都想多注册几个账号开几个店铺来拦截更多流量和分摊风险。但是eBay平台规定是只允许一个卖家一个账号的,一旦检测到多开账户的情况,eBay…

微信录屏怎么录?2种方法教会你

“微信怎么录屏呀,奶奶不会用微信,打电话跟她讲,怎么也说不清楚,老人家年纪大了,耳朵不好使,就想录一个微信使用教程给她,可是不懂怎么录屏,有人知道微信怎么录屏吗,感谢…

YOLO目标检测——天气检测数据集下载分享

天气检测数据集可以用于训练天气预报模型,帮助预测未来的天气情况,包含了晴天、雨天、雾天、雪天 数据集点击下载:YOLO天气检测数据集2300图片4类别.rar

vue3+ts+uniapp小程序端自定义日期选择器基于内置组件picker-view + 扩展组件 Popup 实现自定义日期选择及其他选择

vue3ts 基于内置组件picker-view 扩展组件 Popup 实现自定义日期选择及其他选择 vue3tsuniapp小程序端自定义日期选择器 1.先上效果图2.代码展示2.1 组件2.2 公共方法处理日期2.3 使用组件 3.注意事项3.1refSelectDialog3.1 backgroundColor"#fff" 自我记录 1.先上…

Little Kernel代码学习笔记

目录 虚拟地址转换为物理地址内核启动Multiboot头部结构启动时的寄存器状态real_start段选择子初始化BSS段 页表转换设置CR4、CR3、EFER寄存器设置页表映射 初始化IDT,执行lk_main 虚拟地址转换为物理地址 // start.S#define PHYS_LOAD_ADDRESS (MEMBASE KERNEL_L…

Docker去除sudo权限

Docker去除sudo权限 使用docker命令时,每次都要sudo提权,否则就会报错提示无权限。 1.查看docker用户组及成员 sudo cat /etc/group | grep docker2.添加docker用户组 sudo groupadd docker3.添加用户到docker组 sudo gpasswd -a ${USER} docker4.增…

“超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2、中文Bloom、Dolly_v2_3b助您实现更智能的应用!”

“超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2、中文Bloom、Dolly_v2_3b助您实现更智能的应用!” 1.简介 目标:基于pytorch、transformers做中文领域的nlp开箱即用…

【android12-linux-5.1】【ST芯片】驱动移植后编译不通过

ST传感器芯片驱动移植后,编译报错timespec_to_ns未定义,这应该是内核版本的差异引起的。驱动的适配版本是4.19y,我实际使用的内核linux版本是5.1。 处理方法是使用timespec64_to_ns,如下图: 新代码如下: s…

制造执行系统(MES)在汽车行业中的应用

汽车行业在不断发展中仍然面临一些挑战和痛点。以下是一些当前汽车行业可能面临的问题: 1.电动化和可持续性转型:汽车行业正逐渐向电动化和可持续性转型,但这需要投入大量资金和资源,包括电池技术、充电基础设施等,同时…

如何判断光模块的收发端

随着光纤通信技术的快速发展,光模块作为光纤通信系统中至关重要的组件,扮演着光信号收发转换器的关键角色,它能够实现光信号的发射和接收功能。为了正确使用光模块并满足通信需求,了解如何准确判断光模块的发射端和接收端显得十分…

SDMMC/SDIO的PCB设计要求

RK3588集成了1个SDMMC控制器和1个SDIO控制器,均可支持SDIO3.0协议, 以及MMC V4.51协议。4线的数据总线宽度;支持SDR104 模式,速率达到150MHz。 SD/MMC或者SDMMC是数字安全记忆卡(Secure Digital Memory Card&#xff…

员工矩阵号短视频saas管理系统---开发工具

一、短视频矩阵号系统源码开发层面如何来解决? 1.短视频矩阵号系统源码搭建中,首先开发者需要保证api接口的稳定性 ,保证权限应用场景满足官方平台的开发预期。api---待发布、用户管理与授权绑定、私信回复与评论管理等是非常重要的权限接口…

Hutool:WeakCache导致的内存泄漏

闲聊 感谢各位居然有生之年上了一次榜单。没想到一次bug定位这么火,身为电商网站的后台开发,别的不敢说,jvm调优啊,bug定位啊,sql调优啊简直是家(ri)常(chang)便&#xf…

LeetCode——二叉树篇(九)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 目录 669. 修剪二叉搜索树 108. 将有序数组转换为二叉搜索树 538. 把二叉搜索树转换为累加树 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界…

用好「留存」,闭环小程序运营链路

如何通过线上小程序获取用户线索,提高企业抗风险能力,建立有效的营销数字化系统一直是困扰每一个小程序开发者与运营者的问题。 当我们选择使用小程序设计自己的运营流程时,从「推广」到「转化」,再到最终的「留存」都是运营过程…

leetcode 1035. 不相交的线

2023.8.25 本题可以转化为&#xff1a;求两数组的最长公共子序列。 进而可以用dp算法解决。 方法类似于这题最长公共子序列 。 代码如下&#xff1a; class Solution { public:int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {vector<…

汽车电子笔记之:AUTOSA架构下的多核OS操作系统

目录 1、AUTOSAR多核操作系统 1.1、OS Application 1.2、多核OS的软件分区 1.3、任务调度 1.4、核间任务同步 1.5、计数器、报警器、调度表 1.6、自旋锁与共享资源 1.7、核间通信IOC 1.8、OS Object中元素交互 1.9、多核OS的启动与关闭 2、多核OS注意事项 2.1、最小…

Classic AUTOSAR专题| 诊断模块(上)

往期小怿向各位小伙伴介绍了Classic AUTOSAR专题之I/O模块&#xff0c;相信看过的小伙伴对Classic AUTOSAR的I/O模块已经有基本的认知了&#xff0c;本期为大家介绍《AUTOSAR模块之诊断模块》&#xff0c;内容超丰富&#xff0c;将分两期推出哦。 目录 1.概述 2.DCM 3.DEM …

upgrade pip报错:def read(rel_path: str) -> str: syntaxerror

命令行执行以下命令就可以大功告成! wget https://bootstrap.pypa.io/pip/2.7/get-pip.py python get-pip.py pip install --upgrade setuptools最后大功告成:

微信小程序基于移动端的个人博客系统的设计与实现

博客系统是能够让网民记录分享和学习的一个网站&#xff0c;在博客中我们可以发表文章对感兴趣的事情进行讨论。而基于移动端的个人博客系统的设计是就为了迎合广大用户需求创建的一个界面简洁、有定向内容、业务逻辑简单易操作的博客系统。本文以博客系统的设计与实现为例&…