EDIT: There is a whole comparison section in the docs that I missed: https://juicefs.com/docs/community/comparison/juicefs_vs_cep...
The difference is that SeaweedFS has its own blob store ("volume server") while JuiceFS uses S3 (or some other protocols). SeaweedFS also decouples the server ("filer server") from the client ("mount" command or client libraries) while JuiceFS only has a single process, so the machine where you mount the filesystem talks to the metadata and data backends directly; this means you can't mount a filesystem on an untrusted machine if I understand correctly (you need full R+W access to the backends from the machine where you mount).
You can see it as similar to `rclone mount`, which allows you to mount a remote S3 bucket locally. The difference is that JuiceFS is much faster and filesystem-like, by storing the metadata in a separate faster database and by chunking your files in the backend rather than storing files unchanged in the bucket.
- have "hot" blocks on local storage (SSD cache) - "cold" blocks are stored on S3 - POSIX semantics on top
Having worked with NetApp technology for >10 years this is a welcome addition on the Open-Source side of things.
https://ozone.apache.org/docs/current/feature/prefixfso.html
The MinIO S3 Gateway was deprecated: https://blog.min.io/deprecation-of-the-minio-gateway/
I don't know if JuiceFS is treating it like a fork that they are maintaining, or if they have other plans.
Such a poor security choice, makes me question the entire project.
Can someone tell me in practical terms what that means?
1 second of unreliability every 317 years?
JuiceFS uses S3 as the underlying data storage, so S3 provides this durability SLA.
Or should I simply use nginx + filesystem and not overcomplicate?
I hear everywhere S3 but as it's a pet project don't want to go the AWS route, instead maybe a Hetzner VPS with docker-compose to run the whole setup with an external Postgres instance.
Fancy authnz is easy to do with openresty instead of vanilla nginx.
Alternatively just use own cloud/nextcloud
Postgres doesn’t like running on NFS either to be fair.
It's incredibly hard to make a distributed posix compatible filesystem since you run into CAP. I believe (but am not certain) you are caching locally in violation of Posix or you are signing up for arbitrarily long stalls and a ton of latency on every read/write. (I'm not certain because I'm not sure what Posix specifies wrt stale reads and other cache consistency requirements between sync's)
It would be interesting to hear what the tradeoffs are here, but assuming they are explicit and can be designed around this seems very useful.
As you say there is no free lunch with distributed filesystems. Application programmers have to program their way around the fact that something like posix atomic writes with multiple writers is never going to work, and that the only way to get reasonable efficiency out of the thing is to defer work until the file is closed.
Per CAP, it's addressed by different meta engines (CP system, Redis, MySQL, TiKV) and also different object stores (AP system). When the meta engine is not available, the operation to JuiceFS will be blocked for a while and finally it returns EIO. When object store returns 404 (object not found), which means it's not consistent with the meta engine, it will be retried for a while, may return EIO if it's not recovered.
The file format is carefully designed to workaround the consistency issue from object store and local cache. Any part of data is written into object store and local cache with unique ID, so you will not go stale data once the metadata is correct [1].
Within a mount point, JuiceFS provides read-after-write consistency. Across clusters, JuiceFS provides open-after-close consistency, which should be enough for most of the applications, also provide good balance between consistency and performance.
[1] https://juicefs.com/docs/community/architecture/#how-juicefs...
Edit: For some reason my phone defaulted to Chinese but on my laptop it's fine. User error I guess!
[EDIT] looks like there's an issue -- https://github.com/juicedata/juicefs/issues/345
But this still doesn't really answer it -- if I run JuiceFS S3 Gateway in 2 places, is there any way to redirect reads?
To serve S3 request, you can setup multiple S3 gateway and put a load director in front of them.
Currently I use ext4 image + LUKS + NBD over SSH tunel, it works but is extremely slow.
* POSIX implies a whole lot of guarantees, like atomic file renames/moves, that definitely don't seem to be included here.
Perhaps if your computer/browser's language isn't set to English it defaults to Chinese?