https://github.com/aveek-saha/paxos-db
A distributed key value store using multi paxos to achieve consensus
https://github.com/aveek-saha/paxos-db
key-value kv-store kvstore multi-paxos paxos paxos-algorithm paxos-java paxos-protocol
Last synced: 2 months ago
JSON representation
A distributed key value store using multi paxos to achieve consensus
- Host: GitHub
- URL: https://github.com/aveek-saha/paxos-db
- Owner: Aveek-Saha
- License: mit
- Created: 2024-04-26T15:38:53.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-04-26T20:49:22.000Z (over 1 year ago)
- Last Synced: 2025-04-10T17:00:48.345Z (6 months ago)
- Topics: key-value, kv-store, kvstore, multi-paxos, paxos, paxos-algorithm, paxos-java, paxos-protocol
- Language: Java
- Homepage:
- Size: 448 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Paxos Db
A replicated key value store that achieves consensus using multi-paxos.
## Features
- Three types of operations can be performed on the server with the following parameters:
- PUT (key, value)
- GET (key)
- DELETE (key)
- These operations are performed on a key value store.
- Server is multi threaded and can respond to multiple clients at a time.
- Client and servers communicate using RPC.
- The server is replicated across multiple instances.
- Replicas should be fault tolerant.
- Paxos is used for fault tolerant consensus.
- Replicas implement Paxos roles like the Proposers, Acceptors, and Learners.
- Clients can sent requests to any of the replicas.
- Only the replica that receives a client becomes the proposer for that round of paxos.
- A coordinator is present only for facilitating the discovery of all replicas.## Running instructions
The project uses `maven` for building. This project MUST be run with `Docker` or `Docker Compose` which will create a coordinator and the specified number of server replicas.
### Run with Docker
Docker can be used along with the shell scripts.```sh
# This script will build and start the coordinators and servers and then display logs from the coordinator
./deploy.sh# To view logs from any of the 5 servers
docker logs server-<1-5> -f# Run the client
./run_client.sh server-<1-5> <5001-5005>
```### Run with Docker Compose
You can also use docker compose to set it up```sh
# Run the docker compose command
# This will create the network, start the coordinator and the specified number of replicas
docker compose up# Run: 'docker compose down' when you want to remove the resources created above
# Build client image
docker build -f client.Dockerfile -t client-img --target client-build .# Run client container
docker run -it --rm --name client-con-1 --network project4_default client-img java -jar /app/client.jar project4-server-3 5001# If the above command doesnt work (it didn't work for me on windows git bash) try this one
# docker run -it --rm --name client-con-1 --network project4_default client-img java -jar //app//client.jar project4-server-3 5001
```If you want to change the number of replicas edit `compose.yaml` and rerun the commands.
```Dockerfile
replicas : 10
```To change the ports that the servers run on you can also edit `compose.yaml`
```Dockerfile
coordinator:
...
entrypoint: java -jar /app/server.jar c
ports:
- ":"
...server:
...
entrypoint: java -jar /app/server.jar coordinator
ports:
- target:
...
```