Architecture overview
1. Storage
1.1. IPFS Cluster
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
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
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
MongoDB is a document database designed for ease of development and scaling.
Used for labroom and swarmlab services administration and scheduling.
2. Devel
2.1. slim
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
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
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
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
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
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
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
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
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.
4. Deploy
5. Colaboration
6. service access
6.1. noVNC
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.