Panagiotis_Klironomos
3 years ago
1 changed files with 105 additions and 0 deletions
@ -0,0 +1,105 @@ |
|||
= Data Collector Service - README |
|||
Skouris cs161064@uniwa.gr |
|||
Klironomos cs151128@uniwa.gr |
|||
// Metadata: |
|||
:description: Dockerfile instructions |
|||
:keywords: Dockerfile |
|||
ifndef::env-browser[] |
|||
:data-uri: |
|||
endif::[] |
|||
:toc: right |
|||
:toc-title: Table of contents |
|||
:toclevels: 4 |
|||
:source-highlighter: highlight |
|||
:no-header-footer: |
|||
:nofooter: |
|||
:last-update-label!: |
|||
:icons: font |
|||
:sectnums: |
|||
:url_mongodb: https://en.wikipedia.org/wiki/MongoDB |
|||
|
|||
|
|||
|
|||
.Πλέγμα Δικτύου μεταξύ Services και Microservices |
|||
**** |
|||
Σκοπός του project, είναι να δημιουργήσουμε ένα "σμήνος" από *εικονικές μηχανές* (ή αλλιώς *nodes* ή *containers*), οι οποίες θα έχουν την δυνατότητα να επικοινωνούν μεταξύ τους με διάφορους τρόπους επικοινωνίας. |
|||
|
|||
[NOTE] |
|||
==== |
|||
|
|||
Λειτουργικότητα Σμήνους |
|||
|
|||
Σε ένα *σμήνος εικονικών μηχανών*, υπάρχουν μηχανές που *συλλέγουν δεδομένα* (συνήθως έχουν τον ρόλο των *clients*) και μηχανές που "αποκτούν" αυτά τα δεδομένα καθώς στη συνέχεια *επικοινωνούν μεταξύ τους* για διάφορους σκοπούς (συνήθως έχουν τον ρόλο των *servers ή devices*). |
|||
To undertand this better lets look at the picture bellow and imagine that red dots are iot devices that can send and receive and black ones are clients that gather data. |
|||
|
|||
==== |
|||
|
|||
|
|||
*Για το σκοπό του εργαστηρίου, θα χρησιμοποιηθούν τα παρακάτω εργαλεία:* |
|||
|
|||
* Swarmlab |
|||
* Ansible |
|||
* Fluentd |
|||
* MongoDB |
|||
* NodeJS |
|||
|
|||
**** |
|||
|
|||
|
|||
== Πρώτη Ενότητα |
|||
|
|||
=== Δημιουργία Δικτύου: |
|||
|
|||
Για να μπορέσουμε να θέσουμε σε *λειτουργία* τις εικονικές μηχανές αλλά και να τις *διαμορφώσουμε κατάλληλα* έτσι ώστε να *συλλέγουν* και να *μεταφέρουν δεδομένα*, θα χρειαστεί να δημιουργήσουμε ένα *δίκτυο*, πάνω στο οποίο θα γίνουν οι επιθυμητές ενέργειες. |
|||
|
|||
=== Αυτόματη Εγκατάσταση Προγράμματος Σύλλογης Δεδομένων: |
|||
|
|||
Για να μπορέσουμε να συλλέξουμε δεδομένα από ένα σύνολο εικονικών μηχανών και να τα στείλουμε σε διάφορα σημεία, θα πρέπει οι εικονικές μηχανές να έχουν *εγκαταστήσει ορισμένα πακέτα* που θα περιέχουν *ειδικά εργαλεία* για την κάθε διαδικασία που επιθυμούμε να εκτελέσουν. |
|||
|
|||
Χρησιμοποιούμε το *Ansible*, με το οποίο δίνουμε τις διευθύνσεις των εικονικών μηχανών που επιθυμούμε να κάνουν τις απαραίτητες *εγκαταστάσεις πακέτων*, σε ένα αρχείο *Inventory*, καθώς και σε ένα άλλο αρχείο *fluentd.conf.yml* δίνουμε ορισμένα πακέτα που θέλουμε να εγκατασταθούν στις εικονικές μηχανές. |
|||
|
|||
Για την *συλλογή δεδομένων* θα χρησιμοποιήσουμε ένα *ειδικό εργαλείο*, το οποίο έχει την δυνατότητα να συλλέγει δεδομένα από διάφορες πηγές (π.χ. *system logs*, *apache logs*, *web app / mobile logs*, *IoT Sensors logs* κλπ.) και να τα στέλνει σε διάφορα σημεία που επιθυμούμε (π.χ. *AWS*, *Hadoop*, *Βάσεις Δεδοένων*). |
|||
|
|||
Το εργαλείο που θα χρησιμοποιήσουμε ονομάζεται *Fluentd* και θα επιχειρήσουμε την συλλογή δεδομένων από αρχεία *logs* αναφορικά με διάφορα *στατιστικά* της εφαρμογής μας, καθώς και από αρχεία που έχουμε *γράψει* μέσα σε αυτά. |
|||
|
|||
Η αποστολή και αποθήκευση της παραπάνω *συλλογής δεδομένων*, όπως θα δούμε και παρακάτω, θα γίνεται *αρχικά*, σε ένα *αρχείο* μέσα από το οποίο θα μπορούμε να δούμε τι πληροφορίες έχουν συλλεχθεί. Έπειτα, με το κατάλληλο *configuration*, η αποθήκευση των δεδομένων που συλλέχθηκαν θα γίνεται σε ένα *κεντρικό σημείο* και πιο συγκεκριμένα σε μια *Βάση Δεδομένων*. |
|||
Για τους σκοπούς του εργαστηρίου, θα χρησιμοποιήσουμε την *MongoDB replica*. |
|||
|
|||
Στην *Ενότητα 2*, θα γίνει λεπτομερής περιγραφή της αποθήκευσης δεδομένων στην *Βάση Δεδομένων*. |
|||
|
|||
=== onEvent - Τοπική / Προσωρινή Αποθήκευση Δεδομένων: |
|||
|
|||
Όπως αναφέρθηκε στην προηγούμενη υποενότητα, με τη βοήθεια του *εργαλέιου Fluentd* θα ορίσουμε *ποιες* εικονκές μηχανές θα συλλέξουν δεδομένα και από *ποια* αρχεία εισόδου για διάβασμα. |
|||
|
|||
Σε αυτό το σημείο του project, θα ορίσουμε το αρχείο εξόδου στο οποίο θα αποθηκεύονται όλα τα *συμβάντα* σε περίπτωση που υπάρξουν στα αρχεία εισόδου. |
|||
|
|||
|
|||
== Δεύτερη Ενότητα |
|||
|
|||
=== Δημιουργία Βάσης Δεδομένων: |
|||
|
|||
Για να μπορέσουμε να στέλνουμε δεδομένα σε μια *Βάση Δεδομένων*, θα χρειαστεί να την δημιουργήσουμε πρώτα. |
|||
|
|||
Χρησιμοποιώντας το εργαλείο *Mongo* μπορούμε να σηκώσουμε μια *replicated* Βάση Δεδομένων, να ορίσουμε το *username* και το *password* για την πρόσβασή μας σε αυτήν, καθώς και τις πόρτες για την μελλοντική σύνδεση της Βάσης με ένα Websocket, το οποίο θα καλυφθεί στην *Ενότητα 3*. |
|||
|
|||
=== onEvent - Αποθήκευση Δεδομένων στην Βάση: |
|||
|
|||
Αφότου δοκιμάσουμε την αποθήκευση των δεδομένων σε ένα αρχείο εξόδου, μπορούμε έπειτα με την κατάλληλη *διαμόρφωση* στα *configuration* αρχεία του εργαλείου *Fluentd*, να ορίσουμε πλεόν ως έξοδο για αποθήκευση δεδομένων την Βάση Δεδομένων, την οποία δημιουργήσαμε μόλις. |
|||
|
|||
== Τρίτη Ενότητα |
|||
|
|||
=== Δημιουργία Websocket: |
|||
|
|||
Για να μπορέσουμε να έχουμε*άμεση* μεταφορά των δεδομένων, θα χρειαστεί να ενεργοποιήσουμε *Server*, καθώς και την Τεχνολογία των *Sockets*, έτσι ώστε να έχουμε την δυνατότητα να ζητάμε κάποια δεδομένα από τον Server (ως Clients) και να παίρνουμε το αποτέλεσμα. |
|||
|
|||
Αυτό επιτυγχάνεται με την δημιουργία ενός *Websocket*, το οποίο το θέτουμε σε λειτουργία μέσω *Web Browser* αφότου το προγραμματίσουμε κατάλληλα για την *πόρτα* στην οποία θα "ακούει" η σύνδεση. |
|||
|
|||
Για τους σκοπούς του project, θα χρησιμοποιηθεί η Υπηρεσία *RESTful API* μέσω του Πρωτοκόλλου *REST*, για την επιχείρηση σύνδεσης ενός (ή περισσότερων) Client με έναν Server σε μια συγκεκριμένη *διεύθυνση* και σε μια συγκεκριμένη *πόρτα*. |
|||
|
|||
=== Σύνδεση Websocket και Βασικών Υπηρεσιών: |
|||
|
|||
Για να μπορέσουμε να μεταφέρουμε δεδομένα μέσω ενός Websocket, η μια λύση είναι να επιχειρήσουμε την σύνδεση του Websocket που δημιουργήσαμε προηγουμένως, με τις *βασικές υπηρεσίες* που δημιουργήσαμε στην *Ενότητα 1*, μέσω ορίσματος κατάλληλων *ports*. |
|||
|
|||
=== Σύνδεση Websocket και Βάσης Δεδομένων: |
|||
|
|||
Μια άλλη λύση για την μεταφορά δεδομένων μέσω ενός Websocket, είναι να επιχειρήσουμε την σύνδεση του Websocket που δημιουργήσαμε προηγουμένως, με την *Βάση Δεδομένων* που δημιουργήσαμε στην *Ενότητα 2*, μέσω ορίσματος κατάλληλων *ports*. |
Loading…
Reference in new issue