Distributed Systems 2021 - Miniproject 3

Distributed Systems 2021 -- Miniproject 3

Hand-in Date: 1 December 2021 (at 23:59)

What to submit on learnit:

  • a single zip-compressed file containing: a folder src containing the source code. You are only allowed to submit source code files in this folder.

  • A file report.pdf containing a report (in PDF) with your answers; the file can be at most 5 A4 pages (it can be less), font cannot be smaller than 9pt. The report has to contain 4 sections (see below for a detailed specification of the report format). The report cannot contain source code (except possibly for illustrative code snippets).

  • (Optional) a text file log.txt containing log(s).

A Distributed Auction System

You must implement a distributed auction system using replication: a distributed component which handles auctions, and provides operations for bidding and querying the state of an auction. The component must faithfully implement the semantics of the system described below, and must at least be resilient to one (1) crash failure.

API

Your system must be implemented as some number of nodes, possibly running on distinct hosts. Clients direct API requests to any node they happen to know (it is up to you to decide how many nodes can be known). Nodes must respond to the following API:

Method: bid
Inputs: amount (an int)
Outputs: ack
Comment: given a bid, returns an outcome among {fail, success or exception}

Method: result
Inputs: void
Ouputs: outcome
Comment: if over, it returns the result, else highest bid.

Semantics

Your component must have the following behaviour, for any reasonable sequentialisation/interleaving of requests to it:

  • The first call to "bid" registers the bidder.

  • Bidders can bid several times, but a bid must be higher than the previous one(s).

  • after a specified timeframe, the highest bidder ends up as the winner of the auction.

  • bidders can query the system in order to know the state of the auction.

Faults

  • Assume a network that has reliable, ordered message transport, where transmissions to non-failed nodes complete within a known time-limit.

  • Your component must be resilient to the failure-stop failure of one (1) node.

  • You may assume that crashes only happen “one at a time”; e.g., between a particular client request and the system’s subsequent response, you may assume that at most one crash occurs. However, a second crash may still happen during subsequent requests. For example, the node receiving a request might crash. On the next request, another node in the system might crash.

Report

Write a report of at most 5 pages containing the following structure (exactly create four sections as below):

  • Introduction. A short introduction to what you have done.

  • Protocol. A description of your protocol, including any protocols used internally between nodes of the system.

  • Correctness 1. An argument that your protocol is correct in the absence of failures.

  • Correctness 2. An argument that your protocol is correct in the presence of failures.

Implementation

  • Implement your system in GoLang. We strongly recommend that you reuse the the frameworks and libraries used in the previous mandatory activites.

  • You may submit a log (as a separate file) documenting a correct system run under failures. Your log can be a collection of relevant print statements, that demonstrates the control flow trough the system. It must be clear from the log where crashes occur.

Similar Resources

High performance, distributed and low latency publish-subscribe platform.

High performance, distributed and low latency publish-subscribe platform.

Emitter: Distributed Publish-Subscribe Platform Emitter is a distributed, scalable and fault-tolerant publish-subscribe platform built with MQTT proto

Jan 2, 2023

Fast, efficient, and scalable distributed map/reduce system, DAG execution, in memory or on disk, written in pure Go, runs standalone or distributedly.

Gleam Gleam is a high performance and efficient distributed execution system, and also simple, generic, flexible and easy to customize. Gleam is built

Jan 1, 2023

Simplified distributed locking implementation using Redis

redislock Simplified distributed locking implementation using Redis. For more information, please see examples. Examples import ( "fmt" "time"

Dec 24, 2022

A distributed lock service in Go using etcd

locker A distributed lock service client for etcd. What? Why? A distributed lock service is somewhat self-explanatory. Locking (mutexes) as a service

Sep 27, 2022

Skynet is a framework for distributed services in Go.

Skynet is a framework for distributed services in Go.

##Introduction Skynet is a communication protocol for building massively distributed apps in Go. It is not constrained to Go, so it will lend itself n

Nov 18, 2022

Go Open Source, Distributed, Simple and efficient Search Engine

Go Open Source, Distributed, Simple and efficient full text search engine.

Dec 31, 2022

Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.

Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.

Dapr is a portable, serverless, event-driven runtime that makes it easy for developers to build resilient, stateless and stateful microservices that run on the cloud and edge and embraces the diversity of languages and developer frameworks.

Jan 5, 2023

A distributed, proof of stake blockchain designed for the financial services industry.

Provenance Blockchain Provenance is a distributed, proof of stake blockchain designed for the financial services industry.

Dec 14, 2022
Distributed lock manager. Warning: very hard to use it properly. Not because it's broken, but because distributed systems are hard. If in doubt, do not use this.

What Dlock is a distributed lock manager [1]. It is designed after flock utility but for multiple machines. When client disconnects, all his locks are

Dec 24, 2019
Go Micro is a framework for distributed systems development

Go Micro Go Micro is a framework for distributed systems development. Overview Go Micro provides the core requirements for distributed systems develop

Jan 8, 2023
Go Micro is a standalone framework for distributed systems development

Go Micro Go Micro is a framework for distributed systems development. Overview Go Micro provides the core requirements for distributed systems develop

Dec 31, 2022
Tarmac is a unique framework designed for the next generation of distributed systems
Tarmac is a unique framework designed for the next generation of distributed systems

Framework for building distributed services with Web Assembly

Dec 31, 2022
A distributed systems library for Kubernetes deployments built on top of spindle and Cloud Spanner.

hedge A library built on top of spindle and Cloud Spanner that provides rudimentary distributed computing facilities to Kubernetes deployments. Featur

Nov 9, 2022
MIT 6.824: Distributed Systems

MIT 6.824 is a core 12-unit graduate subject with lectures, readings, programming labs, an optional project, a mid-term exam, and a final exam.

Jul 6, 2022
Labs, solutions and related materials from the MIT 6.824 Distributed Systems course.
Labs, solutions and related materials from the MIT 6.824 Distributed Systems course.

MIT 6.824 Distributed Systems Labs, solutions and related materials from the MIT 6.824 Distributed Systems course. Overview From the official website:

Nov 5, 2022
MIT6.824 Distributed Systems

MIT6.824-Distributed-Systems My Solutions for MIT6.824

Jan 28, 2022
Distributed reliable key-value store for the most critical data of a distributed system

etcd Note: The main branch may be in an unstable or even broken state during development. For stable versions, see releases. etcd is a distributed rel

Dec 30, 2022
distributed data sync with operational transformation/transforms

DOT The DOT project is a blend of operational transformation, CmRDT, persistent/immutable datastructures and reactive stream processing. This is an im

Dec 16, 2022