Skip to content

badbubble/distgo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

distgo

A Distributed Go Compiler.

This is a Lab project in Distributed Systems Course authored by Hanjun Liu and Sebastiaan Gerritsen, under the supervision of Sacheendra Talluri.

You can read more details from the report arch

Architecture

  • Master: responsible for generating all the commands required for compilation on the head node. It organizes these commands into various dependency-based groups. Within each group, commands are independent of each other and can be run simultaneously on multiple nodes on DAS-5. Once organized, the master node dispatches these groups to the asynchronous task queue named Compile_Group.
  • Coordinator: to extract groups from the Compile_Group task queue and break them down into single command tasks and send them to the Compile_Job task queue. These tasks are then executed across multiple worker nodes. It manages the compilation process in a sequential manner, extracting each group one after the other. Additionally, the coordinator node is responsible for synchronizing the build result files across the worker nodes, ensuring a cohesive and efficient compilation process.
  • Worker: operates on a DAS-5 node. Its ongoing function is to continuously retrieve jobs from the Compile_Job task queue and execute them.

Installation and Usage on DAS-5

1. Build this project

git clone https://github.com/badbubble/distgo && cd distgo/
make

2. Configuring the System

Update all configurations in the configs/ directory for Redis and Asynq.

redis:
  host: ""
  port: 6379
  password: ""
  db: 0
  pool_size: 100

asynq:
  host: ""
  port: 6379
  password: ""
  concurrency: 1

3. Loading the DAS-5 Module

module load prun

4. Deploying Worker Nodes

prun -v -NUMBER_OF_WORKERS -np NUMBER_OF_NODES ./worker

5. Configuring the Coordinator

Update the configs/coordinator.yaml file to include the IP addresses of the nodes. These IP addresses can be obtained from the initial output lines in step 4.

cluster:
  hosts:
    - "10.141.0.54"
    - "10.141.0.55"
    - "10.141.0.56"
    - "10.141.0.68"
    - "10.141.0.59"
    - "10.141.0.60"
    - "10.141.0.62"
    - "10.141.0.63"

6. Running Coordinator Nodes

./coordinator

7. Compiling

./master -p PATH_TO_THE_PROJECT -m PATH_TO_THE_MAIN_FILE

Performance Analysis

alist

Compilation Time Exchange Dependencies Time Distribute Commands Time
Compilation Time Exchange Dependencies Time Distribute Commands Time

osmedeus

Compilation Time Exchange Dependencies Time Distribute Commands Time
Compilation Time Exchange Dependencies Time Distribute Commands Time

go-redis

Compilation Time Exchange Dependencies Time Distribute Commands Time
Compilation Time Exchange Dependencies Time Distribute Commands Time

go-cycle

Compilation Time Exchange Dependencies Time Distribute Commands Time
Compilation Time Exchange Dependencies Time Distribute Commands Time

BubblePL-Go

Compilation Time Exchange Dependencies Time Distribute Commands Time
Compilation Time Exchange Dependencies Time Distribute Commands Time

tdl

Compilation Time Exchange Dependencies Time Distribute Commands Time
Compilation Time Exchange Dependencies Time Distribute Commands Time

wego

Compilation Time Exchange Dependencies Time Distribute Commands Time
Compilation Time Exchange Dependencies Time Distribute Commands Time

simplebank

Compilation Time Exchange Dependencies Time Distribute Commands Time
Compilation Time Exchange Dependencies Time Distribute Commands Time

gg

Compilation Time Exchange Dependencies Time Distribute Commands Time
Compilation Time Exchange Dependencies Time Distribute Commands Time

go-gin-example

Compilation Time Exchange Dependencies Time Distribute Commands Time
Compilation Time Exchange Dependencies Time Distribute Commands Time

Tests