From e23536e74b0fb09b93dba825b339df611075cfe8 Mon Sep 17 00:00:00 2001 From: flowerinthenight Date: Fri, 5 Jul 2024 03:02:43 +0900 Subject: [PATCH] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c2f8d5e..0c2afd6 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ A library built on top of [`spindle`](https://github.com/flowerinthenight/spindl

## Why? -In a nutshell, I wanted something much simpler than using [Raft](https://raft.github.io/) (my [progress](https://github.com/flowerinthenight/testqrm) on that front is quite slow), or worse, [Paxos](https://en.wikipedia.org/wiki/Paxos_(computer_science)) (Raft maybe as the long-term goal, although I also have an ongoing trial using multi-Paxos [here](https://github.com/alphauslabs/juno)). And I wanted an easily-accessible storage that is a bit decoupled from the code (easier to query, edit, debug, backup, etc). We are already a heavy Spanner user, and `spindle` has been in our production for quite a while now: these two should be able to do it, preferably on a k8s Deployment; StatefulSets or DaemonSets shouldn't be a requirement. Since then, additional features have been added, such as the `Send()` API. +First, I wanted a fleet coordinator that can work within k8s [Deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) as a library, not as an external service (like [ZooKeeper](https://zookeeper.apache.org/)). So far, our efforts in making [Raft](https://raft.github.io/) play well with bursty, frequently scaling up/down deployments as a library is not that reliable yet. We also have an ongoing multi-[Paxos](https://en.wikipedia.org/wiki/Paxos_(computer_science))-based experiment [here](https://github.com/alphauslabs/juno)). Also, I wanted an easily-accessible storage that is a bit decoupled from the code (easier to query, edit, debug, backup, etc). We are already a heavy Spanner user, and `spindle` has been in our production for quite a while now: these two should be able to do it, preferably on a k8s Deployment; StatefulSets or DaemonSets shouldn't be a requirement. Since then, additional features have been added, such as the `Send()` API. ## What does it do? Leader election is handled by [`spindle`](https://github.com/flowerinthenight/spindle). Two APIs are provided for storage: `Put()` and `Get()`. All pods can serve the `Get()` calls, while only the leader handles the `Put()` API. If a non-leader pod calls `Put()`, that call is forwarded to the leader, who will do the actual write. All `Put()`'s are append-only.