Skip to content

Commit

Permalink
Docs: fix JuiceFS vs. GlusterFS doc (#5144)
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaogaozi authored Sep 6, 2024
1 parent 364d9ec commit 4a8e0a3
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 103 deletions.
82 changes: 41 additions & 41 deletions docs/en/introduction/comparison/juicefs_vs_glusterfs.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ description: This document compares the design and features of GlusterFS and Jui

[GlusterFS](https://github.com/gluster/glusterfs) is an open-source software-defined distributed storage solution. It can support data storage of PiB levels within a single cluster.

[JuiceFS](https://github.com/juicedata/juicefs) is an open-source, high-performance distributed file system designed for the cloud. It delivers massive, elastic, and high-performance storage at low cost.
JuiceFS is an open-source, high-performance distributed file system designed for the cloud. It delivers massive, elastic, and high-performance storage at low cost.

This document compares the key attributes of JuiceFS and GlusterFS in a table and then explores them in detail, offering insights to aid your team in the technology selection process. You can easily see their main differences in the table below and delve into specific topics you're interested in within this article.

## A quick summary of GlusterFS vs. JuiceFS
## A quick summary of GlusterFS vs. JuiceFS {#a-quick-summary-of-glusterfs-vs-juicefs}

The table below provides a quick overview of the differences between GlusterFS and JuiceFS:

Expand All @@ -35,11 +35,11 @@ The table below provides a quick overview of the differences between GlusterFS a
| Trash | Supported | Supported |
| Primary maintainer | Red Hat, Inc | Juicedata, Inc |
| Development language | C | Go |
| Open source license | GPLV2 and LGPLV3+ | Apache License 2.0 |
| Open source license | GPLv2 and LGPLv3+ | Apache License 2.0 |

## System architecture comparison
## System architecture comparison {#system-architecture-comparison}

### GlusterFS' architecture
### GlusterFS' architecture {#glusterfs-architectire}

GlusterFS employs a fully distributed architecture without centralized nodes. A GlusterFS cluster consists of the server and the client. The server side manages and stores data, often referred to as the Trusted Storage Pool. This pool comprises a set of server nodes, each running two types of processes:

Expand All @@ -52,42 +52,42 @@ The client side, which mounts GlusterFS, presents a unified namespace to applica

![GlusterFS architecture](../../images/glusterfs-architecture.jpg)

### JuiceFS' architecture
### JuiceFS' architecture {#juicefs-architecture}

JuiceFS adopts an architecture that separates its data and metadata storage. File data is split and stored in object storage systems like Amazon S3, while metadata is stored in a user-selected database like Redis or MySQL. By sharing the same database and object storage, JuiceFS achieves a strongly consistent distributed file system with features like full POSIX compatibility and high performance. For details about JuiceFS architecture, see its [document](https://juicefs.com/docs/community/architecture).
JuiceFS adopts an architecture that separates its data and metadata storage. File data is split and stored in object storage systems like Amazon S3, while metadata is stored in a user-selected database like Redis or MySQL. By sharing the same database and object storage, JuiceFS achieves a strongly consistent distributed file system with features like full POSIX compatibility and high performance. For a more detailed introduction, see [the documentation](../architecture.md).

![JuiceFS architecture](../../images/juicefs-arch-new.png)

## Metadata management comparison
## Metadata management comparison {#metadata-management-comparison}

**GlusterFS:**
### GlusterFS {#glusterfs}

Metadata in GlusterFS is purely distributed, lacking a centralized metadata service. Clients use file name hashing to determine the associated brick. When requests require access across multiple bricks, for example, `mv` and `ls`, the client is responsible for coordination. While this design is simple, it can lead to performance bottlenecks as the system scales. For instance, listing a large directory might require accessing multiple bricks, and any latency in one brick can slow down the entire request. Additionally, ensuring metadata consistency when performing cross-brick modifications in the event of failures can be challenging, and severe failures may lead to split-brain scenarios, requiring [manual data recovery](https://docs.gluster.org/en/latest/Troubleshooting/resolving-splitbrain) to achieve a consistent version.

**JuiceFS:**
### JuiceFS {#juicefs}

JuiceFS metadata is stored in an independent database, which is called the metadata engine. Clients transform file metadata operations into transactions within this database, leveraging its transactional capabilities to ensure operation atomicity. This design simplifies JuiceFS implementation but places higher demands on the metadata engine. JuiceFS currently supports three categories of transactional databases. For details, see the [metadata engine document](https://juicefs.com/docs/community/databases_for_metadata).
JuiceFS metadata is stored in an independent database, which is called the metadata engine. Clients transform file metadata operations into transactions within this database, leveraging its transactional capabilities to ensure operation atomicity. This design simplifies JuiceFS implementation but places higher demands on the metadata engine. JuiceFS currently supports three categories of transactional databases. For details, see the [metadata engine document](../../reference/how_to_set_up_metadata_engine.md).

## Data management comparison
## Data management comparison {#data-management-comparison}

GlusterFS stores data by integrating multiple server nodes' bricks (typically built on local file systems like XFS). Therefore, it provides certain data management features, including distribution management, redundancy protection, fault switching, and silent error detection.

JuiceFS, on the other hand, does not use physical disks directly but manages data through integration with various object storage systems. Most of its features rely on the capabilities of its object storage.

### Large file splitting
### Large file splitting {#large-file-splitting}

In distributed systems, splitting large files into smaller chunks and storing them on different nodes is a common optimization technique. This often leads to higher concurrency and bandwidth when applications access such files.

* GlusterFS does not split large files (although it used to support Striped Volumes for large files, this feature is no longer supported).
* JuiceFS splits files into 64 MiB chunks by default, and each chunk is further divided into 4 MiB blocks based on the write pattern. For details, see [How JuiceFS stores files](https://juicefs.com/docs/community/architecture/#how-juicefs-store-files).
* JuiceFS splits files into 64 MiB chunks by default, and each chunk is further divided into 4 MiB blocks based on the write pattern. For details, see [How JuiceFS stores files](../architecture.md#how-juicefs-store-files).

### Redundancy protection
### Redundancy protection {#redundancy-protection}

GlusterFS supports both replication (Replicated Volume) and erasure coding (Dispersed Volume).

JuiceFS relies on the redundancy capabilities of the underlying object storage it uses.

### Data compression
### Data compression {#data-compression}

GlusterFS:

Expand All @@ -96,81 +96,81 @@ GlusterFS:

JuiceFS supports both transport-layer and storage-layer compression. Data compression and decompression are performed on the client side.

### Data encryption
### Data encryption {#data-encryption}

GlusterFS:

* Supports only [transport-layer encryption](https://docs.gluster.org/en/latest/Administrator-Guide/SSL), relying on SSL/TLS.
* Previously supported [storage-layer encryption](https://github.com/gluster/glusterfs-specs/blob/master/done/GlusterFS%203.5/Disk%20Encryption.md), but it is no longer supported.

JuiceFS supports both [transport-layer and storage-layer encryption](https://juicefs.com/docs/community/security/encryption). Data encryption and decryption are performed on the client side.
JuiceFS supports both [transport-layer and storage-layer encryption](../../security/encryption.md). Data encryption and decryption are performed on the client side.

## Access protocols
## Access protocols {#access-protocols}

### POSIX compatibility
### POSIX compatibility {#posix-compatibility}

Both [GlusterFS](https://docs.gluster.org/en/latest/glossary/#posix) and [JuiceFS](https://juicefs.com/docs/community/posix_compatibility) offer POSIX compatibility.
Both [GlusterFS](https://docs.gluster.org/en/latest/glossary) and [JuiceFS](../../reference/posix_compatibility.md) offer POSIX compatibility.

### NFS protocol
### NFS protocol {#nfs-protocol}

GlusterFS previously had embedded support for NFSv3 but now it is [no longer recommended](https://github.com/gluster/glusterfs-specs/blob/master/done/GlusterFS%203.8/gluster-nfs-off.md). Instead, it is suggested to export the mount point using an NFS server.

JuiceFS does not provide direct support for NFS and requires mounting followed by [export via another NFS server](https://juicefs.com/docs/community/deployment/nfs).
JuiceFS does not provide direct support for NFS and requires mounting followed by [export via another NFS server](../../deployment/nfs.md).

### CIFS protocol
### CIFS protocol {#cifs-protocol}

GlusterFS embeds support for Windows, Linux Samba clients, and macOS CLI access (excluding macOS Finder). However, it is recommended to [use Samba for exporting mount points](https://docs.gluster.org/en/latest/Administrator-Guide/Setting-Up-Clients/#testing-mounted-volumes).

JuiceFS does not offer direct support for CIFS and requires mounting followed by [export via Samba](https://juicefs.com/docs/community/deployment/samba).
JuiceFS does not offer direct support for CIFS and requires mounting followed by [export via Samba](../../deployment/samba.md).

### S3 protocol
### S3 protocol {#s3-protocol}

GlusterFS supports S3 through the [gluster-swift](https://github.com/gluster/gluster-swift) project, but the project hasn't seen recent updates since November 2017.
GlusterFS supports S3 through the [`gluster-swift`](https://github.com/gluster/gluster-swift) project, but the project hasn't seen recent updates since November 2017.

JuiceFS [supports S3 through integration with the MinIO S3 gateway](https://juicefs.com/docs/community/s3_gateway).
JuiceFS supports S3 through the [S3 gateway](../../deployment/s3_gateway.md).

### HDFS compatibility
### HDFS compatibility {#hdfs-compatibility}

GlusterFS offers HDFS compatibility through the [`glusterfs-hadoop`](https://github.com/gluster/glusterfs-hadoop) project, but the project hasn't seen recent updates since May 2015.

JuiceFS provides [full compatibility with the HDFS API](https://juicefs.com/docs/community/hadoop_java_sdk).
JuiceFS provides [full compatibility with the HDFS API](../../deployment/hadoop_java_sdk.md).

### CSI Driver
### CSI Driver {#csi-driver}

GlusterFS [previously supported CSI Driver](https://github.com/gluster/gluster-csi-driver) but the latest version was released in November 2018, and the repository is marked as DEPRECATED.

JuiceFS supports CSI Driver. For details, see the [document](https://juicefs.com/docs/csi/introduction).

## Extended features
## Extended features {#extended-features}

### POSIX ACLs
### POSIX ACLs {#posix-acls}

In Linux, file access permissions are typically controlled by three entities: the file owner, the group owner, and others. However, when more complex requirements arise, such as the need to assign specific permissions to a particular user within the others category, this standard mechanism does not work. POSIX Access Control Lists (ACLs) offer enhanced permission management capabilities, allowing you to assign permissions to any user or user group as needed.

GlusterFS [supports ACLs](https://docs.gluster.org/en/main/Administrator-Guide/Access-Control-Lists), including access ACLs and default ACLs.

JuiceFS does not support POSIX ACLs.
JuiceFS supports the [POSIX ACLs](../../security/posix_acl.md) feature starting from v1.2.

### Cross-cluster replication
### Cross-cluster replication {#cross-cluster-replication}

Cross-cluster replication indicates replicating data between two independent clusters, often used for geographically distributed disaster recovery.

GlusterFS [supports one-way asynchronous incremental replication](https://docs.gluster.org/en/main/Administrator-Guide/Geo-Replication) but requires both sides to use the same version of Gluster cluster.

JuiceFS depends on the capabilities of the metadata engine and the object storage, allowing one-way replication.

### Directory quotas
### Directory quotas {#directory-quotas}

Both [GlusterFS](https://docs.gluster.org/en/main/Administrator-Guide/Directory-Quota) and [JuiceFS](https://juicefs.com/docs/community/guide/quota) support directory quotas, including capacity and/or file count limits.
Both [GlusterFS](https://docs.gluster.org/en/main/Administrator-Guide/Directory-Quota) and [JuiceFS](../../guide/quota.md#directory-quota) support directory quotas, including capacity and/or file count limits.

### Snapshots
### Snapshots {#snapshots}

GlusterFS supports [volume-level snapshots](https://docs.gluster.org/en/main/Administrator-Guide/Managing-Snapshots) and requires all bricks to be deployed on LVM thinly provisioned volumes.

JuiceFS does not support snapshots but offers directory-level cloning.
JuiceFS does not support snapshots but offers [directory-level cloning](../../guide/clone.md).

### Trash
### Trash {#trash}

GlusterFS [supports the trash functionality](https://docs.gluster.org/en/main/Administrator-Guide/Trash), which is disabled by default.

JuiceFS [supports the trash functionality](https://juicefs.com/docs/community/security/trash), which is enabled by default.
JuiceFS [supports the trash functionality](../../security/trash.md), which is enabled by default.
Loading

0 comments on commit 4a8e0a3

Please sign in to comment.