Architecture overview

swarmlab

1. Storage

1.1. IPFS Cluster emblem web

Automated data availability and redundancy on IPFS.

IPFS Cluster provides data orchestration across a swarm of IPFS daemons by allocating, replicating and tracking a global pinset distributed among multiple peers.

It is being used for both tutors and students to publish content on a decentralized manner!
Information will be auto-deleted after approximatelly 24 hours of not being used.

1.2. minio cluster emblem web

High Performance, cloud Native Object Storage.

Amazon’s S3 API is the defacto standard in the object storage world.
MinIO is the defacto standard for S3 compatibility and was one of the first to adopt the API and the first to add support for S3 Select.
More than 750 organizations, including Microsoft Azure, use MinIO’s S3 Gateway - more than the rest of the industry combined.

It is being used for both tutors and students to save content on a centralized manner!
Information storage is permanent.

1.3. MariaDB Galera Cluster emblem web

MariaDB Galera Cluster is a virtually synchronous multi-master cluster for MariaDB.
Provide Active-active multi-master topology.

Used for user/admin authorization and authentication.

1.4. A replica set in MongoDB emblem web

MongoDB is a document database designed for ease of development and scaling.

Used for labroom and swarmlab services administration and scheduling.

1.5. ShareDB emblem web

ShareDB is a realtime database backend based on Operational Transformation (OT) of JSON documents

2. Devel

2.1. slim emblem web

Slim is a PHP micro framework that helps you quickly write powerful APIs.

Used for main api of swarmlab.io
Slim was used for a fast and powerful router that maps route callbacks to specific HTTP request methods and URIs.

2.2. nodejs emblem web

Nodejs is an asynchronous event-driven JavaScript runtime, Node.js is designed to build scalable network applications.

Used for event-driven programming and for Sockets and WebSockets.

2.3. vue.js emblem web

Vue is a progressive JavaScript framework for building user interfaces.
It is designed from the ground up to be incrementally adoptable, and can easily scale between a library and a framework depending on different use cases.
It consists of an approachable core library that focuses on the view layer only, and an ecosystem of supporting libraries that helps you tackle complexity in large Single-Page Applications.
Used for the main user interface of swarmlab.io.

2.4. python emblem web

Python is an interpreted, high-level, general-purpose programming language.
Python’s design philosophy emphasizes code readability with its notable use of significant whitespace.
Its language constructs and object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects.
Used along with ansible for maintenance and administration of the machines making up the cluster of swarmlab.io.
se sinrgasia me tin ansible gia tin diachirissi ton michanon

2.5. php emblem web

PHP is a popular general-purpose scripting language that is especially suited to web development.
Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world.

Used with slim for creation of the main API.

2.6. codemirror emblem web

CodeMirror is a versatile text editor implemented in JavaScript for the browser.

Used for the online editors for interraction with tutors and students.

2.7. oauth2 emblem web

OAuth 2.0 is the industry-standard protocol for authorization.
OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices.
This specification and its extensions are being developed within the IETF OAuth Working Group.

This protocol is being used for the connection of users and services.

3. System admin and devel

3.1. docker emblem web

Docker provides the ability to package and run an application in a loosely isolated environment called a container.

Used for all the services implementations.

3.2. docker-compose emblem web

Compose is a tool for defining and running multi-container Docker applications.
Used for development, configuration and testing of the services before deployment to the swarm.

3.3. Bash emblem web

A lot of bash scripting was used (low-level) tasks concerning the Linux operating system.

3.4. ansible emblem web

Ansible is an open-source software provisioning, configuration management, and application-deployment tool.

Used for administration of the machines of the general cluster of swarmlab.io as well as its subclusters.

3.5. keycloak emblem web

Open Source Identity and Access Management

Used as backend for authentication to provide secure services in our sso implementation.

4. Deploy

4.1. Docker swarm emblem web

Docker swarm is a container orchestration tool, its allow to manage multiple containers deployed across a cluster.

Used for orchestration of swarmlab.io services.

5. Colaboration

5.1. gittea emblem web

A self-hosted Git service used for the git-repo management used by students and tutors.

5.2. jitsi emblem web

A secure, flexible, and completely free video conferencing.

Used for the online virtual meetings attended by students and tutors.

6. service access

6.1. noVNC emblem web

A open source VNC client - it’s is both a VNC client JavaScript library as well as an application built on top of that library.
noVNC runs in any modern browser including mobile browsers (iOS and Android).

Used to access a unix graphic environment for the services provided through a normal browser.

6.2. ttyd emblem web

Terminal over the web.

Used to access a unix command line for the services provided through a normal browser.