LeoFS: a highly available, distributed, eventually consistent object/blob store
github.com
github.com
Advantages of LeoFS over Swift seem to be NFS support (I think there were some efforts to expose Swift containers as filesystems, but I didn't see anything becoming stable) and regional replication (which is tedious with Swift).
I quickly skimmed through the docs for LeoFS, and I'm a bit confused: They talk about master nodes and slave nodes, while at the same moment claiming that there is no SPOF. So I would guess that there is some sort of leader election going on. Swift doesn't do anything like that; the cluster shares a ring file that determines where each file goes, and if you have N replicas, there are at most 2N locations where these replicas can be stored (N regular locations and N fallback locations).
Another thing that concerns me is that the documentation implies that the servers need to come up in the correct order (see [2], section "Method of server launch"). One thing that I like about Swift is that individual nodes and even individual services on each node can be operated completely independently, which keeps my Kubernetes setup and Helm charts simple.
[1] http://docs.openstack.org/developer/swift/
[2] http://leo-project.net/leofs/docs/getting_started/getting_st...
If I remember right (its been a while), the master and slave nodes mentioned are just in the manager which is control of the ring. Every other component can operate with nodes failing all over the place without failures.
I had been using Skylable's sx server for this but unfortunately it looks like they're ceasing operations, I'm in the market for a decent replacement.
If you upload by hash then you need your own ref counting for deletes (or just don't support delete ... storage is cheap after all!)
Serious answer though in that instance it comes down to already having a naming system in place that uses hashids to generate the filename. I could re-write the whole thing but it's not really a project that grasps my attention for long bursts. As it stands I've just moved the whole lot to s3 for now, even with it's larger footprint it's not much more in terms of cost - Mainly I use the image storage project as a way to test new object storage.
As an example off the top of my head I'm thinking block level de-duplication would be good for storing backup tars from multiple machines. In my previous post I was more hinting at file-level dedupe but that probably wouldn't do as much.
second, deduplication feature is great, for minio and S3 usuage. if the users decided to attach same file to multiple comments (in my case) deduplication would save me a lot.
Leo is a large, distributed, no-SPOF thing, only makes sense if you have multiple boxes and want high reliability at the cost of some redundancy.
Both happen to talk S3, but that's it.
I would position LeoFS as a in-house S3 compatible storage so you can access them quickly within your environment.
One of the strengths of LeoFS is handling small objects (e.g. Images, Logs, ...) you can find more at the benchmark report page.
https://github.com/leo-project/notes/tree/master/leofs/bench...
Over the past few months, we focused on improving the stability and performance of LeoFS.
Please feel free to test it, report any issues you encountered on GitHub, we highly appreciate users' voice.
* S3 compatibility
* NFS support (this is really neat)
* Proper distribution and fault tolerance built in
I like the benchmark numbers:
https://github.com/leo-project/notes/tree/master/leofs/bench...
Seems to be used in production at Rakuten
Eg, i want a single point of contact - my local node (laptop/etc) - which can behave normally whether it is connected to the network, part of the network, or none of the network. The availability of the data at large is obviously dependent on how much of it you're connected to, but that's fine for me.
This gives me the UX of being able to write to the filestore everywhere, rather than losing connection to a self-hosted s3 when i'm out of cell signal range or w/e. Then later, when i'm back and connected to the network, different nodes who are configured to own all portions of data can pull the data as needed.
Are there other distributed offline-able filesystems like this?
If your system is distributed without full replication (and no overlap between nodes), then having offline nodes is easy - you just access to your local data, and the rest of the network can't access it.
If you want to support full replication, or even partial, you'll want to detect (and maybe resolve) conflicts, and depending on how long you think a node can be offline, you'll need different mechanisms. If you expect nodes to be offline for really long periods of time, then you'll need to keep a lot of state around to be able to detect conflicts later - therefore making it perform worse (bigger latency while replicating data).
[1] http://ceph.com/
But 56% of the code is "Shell code". What's up with that?
So in the end, an "object/blob" is the same as a "file". The different term emphasizes that the user does not know (or care) which disk actually holds the file, or how many replicas exist. That's abstracted away by the cluster.
[1] http://leo-project.net/leofs/docs/installation/install_2.htm...
[1] https://www.usenix.org/legacy/event/osdi10/tech/full_papers/...
[2] https://code.facebook.com/posts/685565858139515/needle-in-a-...
For example, if you're a defense contractor that handles FOUO information, you can't just throw that on somebody else's cloud. You have to keep it entirely in-house.
If it came down to it, you can lease dx lines from AWS to your datacenter switch and get 10 Gbs to S3 for pretty cheap.