Open source cloud file system. Posix, HDFS and S3 compatible
juicefs.com
juicefs.com
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.
Also, welcome to make a PR.
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.
If your system handles the data in any way, you must compute and validate checksums.
If you do not have end to end checksums for the data, you do not get to claim your service adopts S3’s Durability guarantees.
S3 has that many 9s because your data is checksumed by the SDK. Every service that touches that data in any way recomputes and validates that (or a bracketed) checksum. Soup de nuts. All the way to when the data gets read out again.
And there is a lot more to Durability than data corruption. Protections against accidental deletions, mutations, or other data loss events come into play too. How good is your durability SLO when you accidentally overwrite one customer’s data with another’s?
Check out some of the talks S3 has on what Durability actually means, then maybe you investigate how durable your service is.
ps: I haven’t looked at the code yet, but plan to. Maybe I’m being presumptuous and your service is fully secured. I’ll let you know if I find anything!
pps: I work for amazon but all my opinions are my own and do not necessarily reflect my employer’s. I don’t speak for Amazon in any way :D
At least it's all in RAID 0, so the data's safe."
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.
https://news.ycombinator.com/item?id=19119991
Is that still the case after this? Or is it tribal knowledge?
One interesting use case is the backup of MySQL [1].
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.
Thanks for confirming this -- I spent a bunch of time reading and was wondering why I couldn't find anything... this answers my question.
I think I misunderstood JuiceFS -- it's more like a better rclone than it is a distributed file system. It's a swiss army knife for mounting remote filesystems.
Assuming you're using a large object service (S3, GCP, Backblaze, etc) then the scale issue is expected to be solved. If you're using filesystem or local minio for example, then you have to solve the problem yourself.
> To serve S3 request, you can setup multiple S3 gateway and put a load director in front of them.
This is exactly the question I had -- it occurred to me that if I make 2 s3 gateways, even if they share the metadata store they might be looking at resources that only one can serve.
So in this situation:
[metadata (redis)]-->[ram]
|
[s3-0]-->[local disk]
|
[s3-1]-->[local disk]
In that situation, then if a request came in to s3-0 for data that was stored @ s3-1, the request would fail, correct? Because s3-0 has no way of redirecting the read request to s3-1.This could work if you had an intelligent router sitting either in front the s3s (so you could send reads/writes to a certain one of them that is known to have the data), but by default, your writes would fail, I'm assuming.
Oh I have one more question -- can you give options to the sshfs module? It seems like you can just append `?SSHOptionHere=x` to `--bucket` but I'm not sure (ex. `--bucket user@box?SshOption=1`)
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.
Useful in container scenarios.
Is this on the roadmap?
Perhaps if your computer/browser's language isn't set to English it defaults to Chinese?
About Juicedata Inc.
Founded in April 2017, Juicedata is a globally oriented innovated distributed file system company. The team consists of senior architects, genius engineers, and consulting experts who have worked in the field of distributed systems for many years. The team members located across Hangzhou, Shanghai, Xiamen, and other cities, used to serve Facebook, Databricks, Tencent, Alibaba, Zhihu, Xiaohongshu, Douban, and other well-known high-tech enterprises around the world.
Juicedata was jointly invested by China Growth Capital and Foothill Ventures.ps, I'm the founder of Juicedata.
Maybe consider also changing the link on the English homepage to the English documentation?