3 releases (breaking)

0.2.0 Jun 20, 2020
0.1.0 May 23, 2019
0.0.0 Jan 14, 2019

#840 in Filesystem

Apache-2.0

290KB
7K SLoC

FleetFS

Build Status Crates Documentation dependency status

FleetFS distributed filesystem

Development

Status

Very very alpha. Expect FleetFS to eat your data :)

Design decisions

  • Clients only need to talk to a single node
    • Context: There is significant overhead in opening TCP connections, so we want the client to keep its connections open. Therefore, the client shouldn't make on-demand connections to every storage node in the cluster.
    • Cons: doubles network traffic inside FleetFS cluster, as nodes have to proxy traffic reading/writing to other nodes
    • Pros: better scalability, as client connection is handled by a single node. Also simplifies client code
  • Clients are trusted to make permission checks
    • Context: FleetFS has no access to a central user store, so has to trust the user ids sent by the client
    • Cons: security relies on the client
    • Pros: client doesn't have to send exhaustive list of groups that user is part of to make permission checks
  • Sharding design:
    • "Raft group" (or rgroup): a subset of storage nodes participating in a raft consensus group. The cluster consists of multiple Raft groups, and a single node may be part of multiple groups.
    • An inode is stored on a single Raft group, and inodes are sharded among groups, by id.
    • (TODO) "Redundant block" (or rblock) is a block of data stored in a single Raft group. A file's contents is composed of multiple rblocks, on one or more Raft groups.

License

Licensed under

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be licensed as above, without any additional terms or conditions.

Dependencies

~14–23MB
~323K SLoC