Skip to content

mpraski/cloud-db-assignment

Repository files navigation

Repository Overview

The submission of the report and slides are located in _submissions.

Implementation of the project for the course Cloud Data Bases. We extended our project with the implementation of a slopy quorum and hinted handoff inspired by Amazon's Dynamo database (Link to paper). This extension is capable of handling temporary failures and provides better availability and durability guarantees.

Project structure

ms5/
├── _submissions/    -- slides & report
├── cmd/             -- where we keep the executable files
│   ├── benchmark/
│   ├── client/
│   ├── ecs/
│   ├── quorum-client/
│   └── server/
├── ecs/             -- our External Configuration Service (ECS)
├── protocol/        -- TCP based communication protocols
├── server/
│   ├── data/
│   ├── ecs/         -- contains state machine for the synchronizatoin with ECS
│   ├── log/         -- append-only log
│   ├── memtable/    -- memtable for LSM tree (in-memory data structure)
│   ├── replication/ -- replication manager to handle scheduling & reconcilitation for replicas
│   ├── sstable/     -- sstable for LSM tree (on-disk data structure)
│   ├── store/
│   ├── util/
│   └── web/         -- TCP server for the database
└── tcp/

Building

Make sure to install the Go toolchain and set the Go path. Also install golangci-lint (See instructions).

go get ./...
make

Client

docker build --platform linux/amd64 --tag gitlab.lrz.de:5005/cdb-23/gr3/ms5/kv-client --file Dockerfile.client .
&& docker push gitlab.lrz.de:5005/cdb-23/gr3/ms5/kv-client

Server

docker build --platform linux/amd64 --tag gitlab.lrz.de:5005/cdb-23/gr3/ms5/kv-server --file Dockerfile.server .
&& docker push gitlab.lrz.de:5005/cdb-23/gr3/ms5/kv-server

ECS

docker build --platform linux/amd64 --tag gitlab.lrz.de:5005/cdb-23/gr3/ms5/ecs-server --file Dockerfile.ecs .
&& docker push gitlab.lrz.de:5005/cdb-23/gr3/ms5/ecs-server

Testing

To test the system with one ECS and two KVStore, please run following commands in three different terminal tabs:

  1. make run-ecs to start the ECS
  2. make run-server to start the first server
  3. make run-server-2 to start the second server
  4. optional: make run-server-i to run the third and fourth server

Releases

No releases published

Packages

No packages published