aboutsummaryrefslogtreecommitdiff
path: root/doc/book/src/design
diff options
context:
space:
mode:
Diffstat (limited to 'doc/book/src/design')
-rw-r--r--doc/book/src/design/index.md29
-rw-r--r--doc/book/src/design/related_work.md23
2 files changed, 51 insertions, 1 deletions
diff --git a/doc/book/src/design/index.md b/doc/book/src/design/index.md
index d09a6008..305f0501 100644
--- a/doc/book/src/design/index.md
+++ b/doc/book/src/design/index.md
@@ -3,3 +3,32 @@
The design section helps you to see Garage from a "big picture" perspective.
It will allow you to understand if Garage is a good fit for you,
how to better use it, how to contribute to it, what can Garage could and could not do, etc.
+
+## Goals and non-goals
+
+Garage is an opinionated object storage solutoin, we focus on the following **desirable properties**:
+
+ - **Self-contained & lightweight**: works everywhere and integrates well in existing environments to target [hyperconverged infrastructures](https://en.wikipedia.org/wiki/Hyper-converged_infrastructure).
+ - **Highly resilient**: highly resilient to network failures, network latency, disk failures, sysadmin failures.
+ - **Simple**: simple to understand, simple to operate, simple to debug.
+ - **Internet enabled**: made for multi-sites (eg. datacenters, offices, households, etc.) interconnected through regular Internet connections.
+
+We also noted that the pursuit of some other goals are detrimental to our initial goals.
+The following has been identified as **non-goals** (if these points matter to you, you should not use Garage):
+
+ - **Extreme performances**: high performances constrain a lot the design and the infrastructure; we seek performances through minimalism only.
+ - **Feature extensiveness**: we do not plan to add additional features compared to the ones provided by the S3 API.
+ - **Storage optimizations**: erasure coding or any other coding technique both increase the difficulty of placing data and synchronizing; we limit ourselves to duplication.
+ - **POSIX/Filesystem compatibility**: we do not aim at being POSIX compatible or to emulate any kind of filesystem. Indeed, in a distributed environment, such synchronizations are translated in network messages that impose severe constraints on the deployment.
+
+## Talks
+
+We love to talk and hear about Garage, that's why we keep a log here:
+
+ - [(en, 2021-04-28) Distributed object storage is centralised](https://git.deuxfleurs.fr/Deuxfleurs/garage/raw/commit/b1f60579a13d3c5eba7f74b1775c84639ea9b51a/doc/talks/2021-04-28_spirals-team/talk.pdf)
+
+ - [(fr, 2020-12-02) Garage : jouer dans la cour des grands quand on est un hébergeur associatif](https://git.deuxfleurs.fr/Deuxfleurs/garage/raw/commit/b1f60579a13d3c5eba7f74b1775c84639ea9b51a/doc/talks/2020-12-02_wide-team/talk.pdf)
+
+*Did you write or talk about Garage? [Open a pull request](https://git.deuxfleurs.fr/Deuxfleurs/garage/) to add a link here!*
+
+
diff --git a/doc/book/src/design/related_work.md b/doc/book/src/design/related_work.md
index bae4691c..aaf10d7b 100644
--- a/doc/book/src/design/related_work.md
+++ b/doc/book/src/design/related_work.md
@@ -41,13 +41,34 @@ There were many attempts in research too. I am only thinking to [LBFS](https://p
## Existing software
-**[Pithos](https://github.com/exoscale/pithos) :**
+**[MinIO](https://min.io/):** MinIO shares our *Self-contained & lightweight* goal but selected two of our non-goals: *Storage optimizations* through erasure coding and *POSIX/Filesystem compatibility* through strong consistency.
+However, by pursuing these two non-goals, MinIO do not reach our desirable properties.
+Firstly, it fails on the *Simple* property: due to the erasure coding, MinIO has severe limitations on how drives can be added or deleted from a cluster.
+Secondly, it fails on the *Internet enabled* property: due to its strong consistency, MinIO is latency sensitive.
+Furthermore, MinIO has no knowledge of "sites" and thus can not distribute data to minimize the failure of a given site.
+
+**[Openstack Swift](https://docs.openstack.org/swift/latest/):**
+OpenStack Swift at least fails on the *Self-contained & lightweight* goal.
+Starting it requires around 8GB of RAM, which is too much especially in an hyperconverged infrastructure.
+We also do not classify Swift as *Simple*.
+
+**[Ceph](https://ceph.io/ceph-storage/object-storage/):**
+This review holds for the whole Ceph stack, including the RADOS paper, Ceph Object Storage module, the RADOS Gateway, etc.
+At its core, Ceph has been designed to provide *POSIX/Filesystem compatibility* which requires strong consistency, which in turn
+makes Ceph latency-sensitive and fails our *Internet enabled* goal.
+Due to its industry oriented design, Ceph is also far from being *Simple* to operate and from being *Self-contained & lightweight* which makes it hard to integrate it in an hyperconverged infrastructure.
+In a certain way, Ceph and MinIO are closer together than they are from Garage or OpenStack Swift.
+
+**[Pithos](https://github.com/exoscale/pithos)**
Pithos has been abandonned and should probably not used yet, in the following we explain why we did not pick their design.
Pithos was relying as a S3 proxy in front of Cassandra (and was working with Scylla DB too).
From its designers' mouth, storing data in Cassandra has shown its limitations justifying the project abandonment.
They built a closed-source version 2 that does not store blobs in the database (only metadata) but did not communicate further on it.
We considered there v2's design but concluded that it does not fit both our *Self-contained & lightweight* and *Simple* properties. It makes the development, the deployment and the operations more complicated while reducing the flexibility.
+**[Riak CS](https://docs.riak.com/riak/cs/2.1.1/index.html)**
+*Not written yet*
+
**[IPFS](https://ipfs.io/) :**
*Not written yet*