This project involves the study and implementation of a protocol for distributed systems, the Arrow Distributed Directory Protocol.
The realization of this comprises the topics of programming in Go Language, Data Structures, concurrency, distributed systems and algorithms and their visualization.
The elaboration of this project took place in the end of project unit Degree course in Computer Engineering.
It also includes an essay where I explain the Protocol and the process of implementation I went through.
Check #Explanation
(TODO ;) )
-
Implementation of the Protocol in Go
- Nodes communicate using HTTP.
-
Live Visualization of the System in a Web App
- Implementation of a Visualization Node that receives information from each Node.
-
Event Logging to prove the correction of the System
- Request History - order which the Visualization Node process each update of a request.
- Owner History - order which the Nodes became Owners of the Mobile Object
- Queue History - order which the Nodes got into the "main" queue/queue that directly follows the current Owner.
-
Remotely control the System Nodes through the Visualization
-
Deployment of a whole system (and visualization) with Docker
Cloning/Downloading this project
git clone https://github.com/Gabulhas/projeto-relatorio
Building the Node (Change Directory to "src")
go build -o Node .
Executing one Node
#Arguments:
# -address string (Required)
# Node's Address
#
# -link string (if any)
# address of the Node to which it's connected
#
# -requests
# If this Node, when Idle, preforms Object Requests (default true)
#
# -type int (Required)
# Owner with Request - 0
# Owner Terminal - 1
# Idle - 2
# Waiter with Request - 3
# Waiter Terminal - 4
#
# -visualization string (if any)
# Address of the Visualization Node
# Example, a Node that
# is an Idle Node (2)
# which address is 127.0.0.2
# is connected to 127.0.0.3
# where the visualization Node has the address 127.0.0.10
./Node -type 2 -address 127.0.0.2 -link 127.0.0.2 -visualization 127.0.0.10
Clone the project
- Each Circle in the graph is a different machine, and the arrows between them indicate their connections.
- The current "main" queue and the object owners are displayed on the right.
- The events are logged and displayed at the bottom tables.
These were the topics which I had the opportunity to learn more of/new experiences:
- Distributed Systems
- Concurrency
- Go Programming Language
- Academic Writting/Formal Writting
- Working with Professors/Academicians (which I'm grateful to do so)
- The Arrow Distributed Directory Protocol - The Original Paper of the Algorithm/Protocol which I followed for the implementation.
- Bully Algorithm by @TimTosi - Where I got the inspiration for the Visualization
- Arvy by @Infinisil