浅析 GlusterFS 与 JuiceFS 的架构异同
在进行分布式文件存储解决方案的选型时,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:支持,且默认打开。
对比清单
| GlusterFS | JuiceFS | |
|---|---|---|
| 元数据 | 纯分布式 | 独立数据库服务 |
| 数据存储 | 自主管理 | 依赖对象存储服务 |
| 大文件拆分 | 不拆分 | 拆分 |
| 冗余保护 | 副本、纠删码 | 依赖对象存储服务 |
| 数据压缩 | 部分支持 | 支持 |
| 数据加密 | 部分支持 | 支持 |
| POSIX 兼容性 | 完整 | 完整 |
| NFS 协议 | 不直接支持 | 不直接支持 |
| CIFS 协议 | 不直接支持 | 不直接支持 |
| S3 协议 | 支持(久未更新) | 支持 |
| HDFS 兼容性 | 支持(久未更新) | 支持 |
| CSI 驱动 | 支持 | 支持 |
| POSIX ACLs | 支持 | 不支持 |
| 跨域复制 | 支持 | 依赖外部服务 |
| 目录配额 | 支持 | 支持 |
| 快照 | 支持 | 不支持(但支持克隆) |
| 回收站 | 支持 | 支持 |
| 主要维护者 | Red Hat, Inc | Juicedata, Inc |
| 开发语言 | C | Go |
| 开源协议 | GPLV2 and LGPLV3+ | Apache License 2.0 |
更多阅读
-
浅析 SeaweedFS 与 JuiceFS 架构异同
-
云上大数据存储:探究 JuiceFS 与 HDFS 的异同
-
浅析三款大规模分布式文件系统架构设计:GFS、Tectonic、JuiceFS
相关文章:
浅析 GlusterFS 与 JuiceFS 的架构异同
在进行分布式文件存储解决方案的选型时,GlusterFS 无疑是一个不可忽视的考虑对象。作为一款开源的软件定义分布式存储解决方案,GlusterFS 能够在单个集群中支持高达 PiB 级别的数据存储。自从首次发布以来,已经有超过十年的发展历程。目前&am…...
ARM开发,stm32mp157a-A7核PWM实验(驱动蜂鸣器,风扇,马达工作)
1.分析框图; 2.比较捕获寄存器(产生PWM方波); 工作原理: 1、系统提供一个时钟源209MHZ,需要通过分频器进行分频,设置分频器值为209分频; 2、当定时器启动之后,自动重载…...
群狼调研(长沙眼镜店神秘顾客)|消费者需求研究方案
本文由群狼调研(长沙品牌调研)出品,欢迎转载,请注明出处。消费者需求研究方案是在开展研究之前制定的计划,用于指导研究的设计、实施和分析。以下是一个可能的消费者需求研究方案的大致框架: 1. 研究目标和问题: • …...
电脑入门:宽带路由器常见故障排除技巧
宽带路由器在企业网络中的应用是相当广泛的,在运行的过程中出现故障是在所难免的,虽然故障现象多种多样,引起故障发生的原因也不尽相同,但从大体上可以把这些故障分为硬件故障和软件故障,具体来说就是一些网络连接性问题、配置文件选项问题以及网络协议问题等。 由于路由器…...
基于云原生网关的流量防护实践
作者:涂鸦 背景 在分布式系统架构中,每个请求都会经过很多层处理,比如从入口网关再到 Web Server 再到服务之间的调用,再到服务访问缓存或 DB 等存储。在下图流量防护体系中,我们通常遵循流量漏斗原则进行流量防护。…...
开源与云计算:新的合作模式
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
前端需要理解的跨平台知识
混合开发是指使用多种开发模开发App的一种开发模式,涉及到两大类技术:原生 Native、Web H5。原生 Native 主要指 iOS(Objective C)、Android(Java),原生开发效率较低,开发完成需要重…...
《基于 Vue 组件库 的 Webpack5 配置》3.将 CSS 提取到单独的文件
使用 webpack 插件 mini-css-extract-plugin 需要额外安装 npm i mini-css-extract-pluginlatest -D; 同时打包 js 和 css 文件时,可参考 entry 高级用法; package.json 的配置如下 const { VueLoaderPlugin } require(vue-loader); // 可…...
2023CCF图形学启明星计划夏令营感想记录
这篇就是纯日记了,想记录一下参加这个夏令营的感想,中间的一些过程,毕竟这对我来说算是一段难忘的经历。 一、了解到的渠道 我个人是比较喜欢图形渲染的,之前也学过GAMES的课程,然后偶然的一天,GAMES101里…...
如何解决“缺失msvcp110.dll”错误,msvcp110.dll丢失要怎样才能修复
今天,我将为大家分享关于电脑提示msvcp110.dll丢失的3种修复方法。希望这些方法能帮助到正在遇到这个问题的朋友们。 首先,我们来了解一下msvcp110.dll文件的作用。msvcp110.dll是Microsoft Visual C 2010 Redistributable Package的一部分,…...
激活函数总结(二十):激活函数补充(SQNL、PLU)
激活函数总结(二十):激活函数补充 1 引言2 激活函数2.1 Square nonlinearity (SQNL)激活函数2.2 Piecewise Linear Unit (PLU)激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PR…...
Docker【部署 04】Docker Compose下载安装及实例Milvus Docker compose(CPU)使用说明分享
Docker Compose 下载安装使用说明 1.Compose说明1.1 Overview of installing Docker Compose1.2 Installation scenarios1.2.1 Scenario one: Install Docker Desktop1.2.2 Scenario two: Install the Compose plugin1.2.3 Scenario three: Install the Compose standalone 2.C…...
23种设计模式-7种结构模式
结构型模式简述 把类或对象结合在一起形成一个更大的结构。 装饰器模式:动态的给对象添加新的功能。 代理模式:为其它对象提供一个代理以便控制这个对象的访问。 桥接模式:将抽象部分和它的实现部分分离,使它们都可以独立的变…...
大数据Flink(六十七):SQL Table 简介及运行环境
文章目录 SQL & Table 简介及运行环境 一、简介 二、案例...
WPF使用依赖注入
现在依赖注入在.Net里面已经普及,自己常写一些简单的demo倒是无所谓,但偶尔写一点正式的工程,也免不了要使用一下,于是总结了一下在WPF里面使用依赖注入。 在写简单Demo时候,通常是在MainWindow的构造函数里面直接做初…...
玩转科技|了解AI平台桌面客户端—ChatBox
目录 前言 特性 编辑 为什么需要 ChatBox? ChatGPT Plus 平替? 下载 支持系统 功能图 使用教程 感受 展示 前言 今天小编又来了,推荐给大家一款开源的OpenAI API桌面客户端ChatBox,它支持 Windows、Mac 和 Linux。…...
visual studio 2022.NET Core 3.1 未显示在目标框架下拉列表中
问题描述 在Visual Studio 2022我已经安装了 .NET core 3.1 并验证可以运行 .NET core 3.1 应用程序,但当创建一个新项目时,目标框架的下拉列表只允许 .NET 6.0和7.0。而我在之前用的 Visual Studio 2019,可以正确地添加 .NET 核心项目。 …...
人工智能项目集合推荐(数据集 模型训练 C++和Android部署)
人工智能项目集合推荐(数据集 模型训练 C和Android部署) 目录 人工智能项目集合推荐(数据集 模型训练 C和Android部署) 1.三维重建项目集合 ★双目三维重建 ★结构光三维重建 2.AI CV项目集合 ★人脸检测和人体检测 ★人体姿态估计(人体关键点检测) ★头部朝向估计 …...
C# 服务HTTPS 对 请求被中止: 未能创建 SSL/TLS 安全通道报错
1.如果windows支持HTTPS的TLS协议,则可以直接跳过 (Tls12) [WebMethod(Description "获取HttpsPost加密服务.")] public string HTTPSPOST(String input,String sUrl) { Log.Add("ReceiveNotice", &qu…...
二级MySQL(七)——表格数据修改
1、修改表格中部分数据 将表格某一行的数据修改,这里用的UPDATE语句: UPDATE tb_student SET studentName 黄涛,native湖北,nation汉 WHERE studentNo 2014210103; 结果: 2、修改表格某一列全部数据 比如性别全部设置为‘女’ UPDATE…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
