This repository contains all the three machine problems that were part of CS425: Distributed Systems course at UIUC, Spring 2017. The three machine problems are as following:
- Totally-ordered fault-tolerant group chat application.
- Fault-tolerant in-memory key value store.
- Distributed transactions system with serial equivalence and deadlock detection.
- Detailed problem statements, design documents and instructions to run code are in directory Problem Statements and Design documents.
- Rest of the directory structure is in accordance with gradle/maven default directory structure.
All the algorithms listed below were built from scratch directly on top of TCP and without use of any of the distributed systems frameworks/abstractions like RPC etc. Even though you would use frameworks in practical systems, it made sense to not use when main aim was learning.
- ISIS totally ordered multicast.
- SWIM failure detector.
- Cassandra/Chord based ring partitioned key-value store which tolerates certain number of failures by making those many extra copies. These copies were made when SWIM failure detector detected failures.
- Two-phase locking for serial equivalence in distributed transactions.
- Deadlock detection by constructing wait for graph between transactions.