= Υπολογιστική Νέφους και Υπηρεσίες 
:description: ΑΣΚΗΣΗ 2020
:keywords: Cloud, swarm
:data-uri:
:toc: right
:toc-title: Πίνακας περιεχομένων
:toclevels: 4
:source-highlighter: coderay
:icons: font
:sectnums: 


.ΕΡΓΑΣΤΗΡΙΟ ΜΑΘΗΜΑΤΟΣ
[NOTE]
****
[.text-center]
*«Υπολογιστική Νέφους και Υπηρεσίες»*

[.text-center]
_ΑΣΚΗΣΗ 2021_
****

[.lead]
 Η άσκηση περιλαμβάνει τη δημιουργία ενός εικονικού εργαστηρίου(vlab) σε περιβάλλον *docker-compose* που θα εκτελεί αυτόματα τις λειτουργίες που διαθέτει.

== Δημιουργία εικονικού εργαστηρίου
*Κάθε vlab θα διαθέτει:* 

* [*] δικό του δίκτυο
* [*] περιβάλλον _(GUI/CLI)_ για προβολή των αποτελεσμάτων
* [*] χώρο αποθήκευσης!footnote:disclaimer[Σχετικά με την υποστήριξη 'χώρου αποθήκευσης', μπορείτε να χρησιμοποιήσετε την υπηρεσία storage-mongo-replica του swarmlab.io (https://git.swarmlab.io:3000/swarmlab/storage-mongo-replica[git^]) ή όποια άλλη βάση επιθυμείτε  ]  
* [*] Αυτόματη διαδικασία εκτέλεσης των υπηρεσιών (https://git.swarmlab.io:3000/swarmlab/examples-mpi/src/branch/master/swarmlab[π.χ. μέσω make - Παράδειγμα])
* [*] μία υπηρεσία ανά container!footnote:disclaimer[Γενικά διαχωρίζουμε τους τομείς χρησιμοποιώντας μία υπηρεσία ανά container. Αυτή η υπηρεσία μπορεί, σε διάφορες περιπτώσεις, να εκτελεστεί σε πολλές διεργασίες (για παράδειγμα, ο διακομιστής web Apache ξεκινά πολλές διεργασίες).]
* [*] resource config για Out Of Memory Exceptions https://docs.docker.com/config/containers/resource_constraints/#understand-the-risks-of-running-out-of-memory[(OOME)],  https://docs.docker.com/compose/compose-file/#resources[Howto]

.Πληροφορία
[NOTE]
====
Για την υλοποίησή σας μπορείτε να στηριχτείτε στη βασική αρχιτεκτονική-σχεδιασμό και παραδείγματα που επιδείχθηκαν στο Εργαστήριο


.Reminder
****
https://docs.docker.com/compose/compose-file/#not-supported-for-docker-stack-deploy[not-supported-for-docker-stack-deploy]
****
====



== Παράδοση εργασίας

*Παράδοση εργασίας:* 

* [*] Το κείμενο  της εργασίας θα είναι σε μορφή *asciidoc* ή markdown 
* [*] Θα περιέχει *Yaml File* για Deploy της υπηρεσίας
* [*] Θα περιέχει *README* file με πληροφορίες σχετικά με το εικονικό εργαστήριο και τις υπηρεσίες/εργαλεία που χρησιμοποιήθηκαν
* [*] Θα περιέχει *INSTALL* file με πληροφορίες σχετικά με την εγκατάσταση του εικονικού εργαστηρίου
* [*] Θα περιέχει *DOC* file/dir με πληροφορίες σχετικά με την χρήση του εικονικού εργαστηρίου
* [*] Θα περιέχει *Demo* για την εκτέλεση των διαθέσιμων υπηρεσιών


.Πληροφορία
[NOTE]
====
Το κείμενα θα είναι *όλα* σε μορφή asciidoc ή markdown (https://asciidoctor.org/docs/asciidoc-writers-guide/[Asccidoc^], https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet[Markdown^])
====


.Git
[NOTE]
====
Ολα τα αρχεία θα πρέπει να "ανέβουν" σε υπηρεσία git 

* https://git.swarmlab.io:3000[ swarmlab - Προτείνεται^]
* https://gitlab.com/explore[gitlab^]
* https://github.com/[github^] 
====



== Projects

Κάθε ομάδα θα πρέπει να επιλέξει προς υλοποίηση ένα από τα κάτωθι προτεινόμενα projects (μπορεί επίσης να προτείνει και κάποιο δικό της αρκεί να τηρούνται οι βασικές κατευθύνσεις αρχιτεκτονικής/σχεδιασμού)

.Επιλογή
[NOTE]
====
Η επιλογή project ανα ομάδα πρέπει να πραγματοποιηθεί μέχρι *21.04*
====

===  Data collector service
*  Swarmlab 
**  Swarmlab-hybrid,  Menou: *hybrid-linux -> courses/fluentd*
**  https://git.swarmlab.io:3000/swarmlab/hybrid-linux/src/branch/master/install/usr/share/swarmlab.io/sec/project/courses/fluentd[git^]
**  https://vimeo.com/525221045[video1 ^]
**  https://www.twitch.tv/videos/973658726[video2 ^]

[NOTE]
====
To project _"Data collector service"_ αποτελεί τη βασική επιλογή για την εξέταση του εργαστηρίου και χωρίζεται σε 3 ενότητες:

* Πρώτη
** Δημιουργία δικτύου
** Αυτόματη εγκατάσταση προγράμματος για την συλλογή των δεδομένων
** onEvent - τοπική/προσωρινή αποθήκευση των δεδομένων
* Δεύτερη
** Δημιουργία βάσης δεδομένων(Database replication)
** onEvent αποθήκευση των δεδομένων στην βάση
* Τρίτη 
** Δημιουργία GUI ή 
** Δημιουργία Websocket σύνδεσης με την βάση ή με τις βασικές υπηρεσίες για άμεση μεταφορά των δεδομένων

====

=== Realtime database backend
* Realtime database backend - https://en.wikipedia.org/wiki/Operational_transformation
**    https://github.com/share/sharedb[git^]


=== Fediverse system 
* Pleroma - https://en.wikipedia.org/wiki/Fediverse[Wikipedia^]
** https://docs.pleroma.social/backend/installation/otp_en/[docs^]


=== Distributed file system.
* IPFS Cluster -  https://en.wikipedia.org/wiki/Fediverse[Wikipedia^]
** https://github.com/ipfs/ipfs-cluster[git^]


=== Object Storage
* Minio s3 (amazon s3) - https://en.wikipedia.org/wiki/Amazon_S3[Wikipedia^]
** https://github.com/minio/minio[git^]


== Q&A
[qanda]
Το project υλοποιείται σε ομάδες?::
  Ναι. 
Εγώ δεν βρήκα ομάδα. Τι κάνω?::
  Προσπάθησε να ενταχθείς σε μία ομάδα και ενημέρωσε μέσω  εμαιλ για την ομάδα που θα συμμετέχεις. 
Μπορώ  να υλοποιήσω κάποιο άλλο project εκτός λίστας?::
  Ναι. Αρκεί *να μην είναι "stand alone application".* To project πρέπει να υλοποιηθεί σύμφωνα με τις προδιαγραφές που περιγράφονται και για τα υπόλοιπα. 
Δεν γνωρίζω asciidoc θα χρειαστεί χρόνο για να το μάθω?::
  Οχι είναι απλό. Δεν θα χρειαστείς πάνω από 5 λεπτά και σε περίπτωση που θέλεις κάτι ακόμη πιο απλό γράψε σε markdown - online Editor: https://stackedit.io/app[markdown], https://asciidoclive.com/edit/scratch/1[asciidoc]  
Δεν γνωρίζω git θα χρειαστεί χρόνο για να το μάθω?::
  Οχι είναι απλό. Δεν θα χρειαστείς πάνω από 10 λεπτά - Βοήθεια: http://docs.swarmlab.io/SwarmLab-HowTos/HowTo-gitea.adoc.html[Gitea], https://classic.scottr.org/presentations/git-in-5-minutes/[Git In Five Minutes]