Panagiotis_Klironomos
3 years ago
1 changed files with 0 additions and 248 deletions
@ -1,248 +0,0 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|||
<meta name="generator" content="Asciidoctor 1.5.4"> |
|||
<meta name="description" content="Dockerfile instructions"> |
|||
<meta name="keywords" content="Dockerfile"> |
|||
<meta name="author" content="Skouris cs161064@uniwa.gr"> |
|||
<title>Data Collector Service - README</title> |
|||
<link rel="stylesheet" href="https://asciidoclive.com/assets/asciidoctor.js/css/asciidoctor.css"> |
|||
</head> |
|||
|
|||
<body class="article toc2 toc-right"> |
|||
<div id="header"> |
|||
<h1>Data Collector Service - README</h1> |
|||
<div class="details"> |
|||
<span id="author" class="author">Skouris cs161064@uniwa.gr</span><br> |
|||
<span id="revdate">Klironomos cs151128@uniwa.gr</span> |
|||
</div> |
|||
<div id="toc" class="toc2"> |
|||
<div id="toctitle">Table of contents</div> |
|||
<ul class="sectlevel1"> |
|||
<li><a href="#__">1. Πρώτη Ενότητα</a> |
|||
<ul class="sectlevel2"> |
|||
<li><a href="#___2">1.1. Δημιουργία Δικτύου:</a></li> |
|||
<li><a href="#___3">1.2. Αυτόματη Εγκατάσταση Προγράμματος Σύλλογης Δεδομένων:</a></li> |
|||
<li><a href="#_onevent">1.3. onEvent - Τοπική / Προσωρινή Αποθήκευση Δεδομένων:</a></li> |
|||
</ul> |
|||
</li> |
|||
<li><a href="#___4">2. Δεύτερη Ενότητα</a> |
|||
<ul class="sectlevel2"> |
|||
<li><a href="#___5">2.1. Δημιουργία Βάσης Δεδομένων:</a></li> |
|||
<li><a href="#_onevent_2">2.2. onEvent - Αποθήκευση Δεδομένων στην Βάση:</a></li> |
|||
</ul> |
|||
</li> |
|||
<li><a href="#___6">3. Τρίτη Ενότητα</a> |
|||
<ul class="sectlevel2"> |
|||
<li><a href="#__websocket">3.1. Δημιουργία Websocket:</a></li> |
|||
<li><a href="#__websocket_2">3.2. Σύνδεση Websocket και Βασικών Υπηρεσιών:</a></li> |
|||
<li><a href="#__websocket_3">3.3. Σύνδεση Websocket και Βάσης Δεδομένων:</a></li> |
|||
</ul> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
<div id="content"> |
|||
<div id="preamble"> |
|||
<div class="sectionbody"> |
|||
<div class="sidebarblock"> |
|||
<div class="content"> |
|||
<div class="title">Πλέγμα Δικτύου μεταξύ Services και Microservices</div> |
|||
<div class="paragraph"> |
|||
<p>Σκοπός του project, είναι να δημιουργήσουμε ένα "σμήνος" από <strong>εικονικές μηχανές</strong> (ή αλλιώς <strong>nodes</strong> ή <strong>containers</strong>), |
|||
οι οποίες θα έχουν την δυνατότητα να επικοινωνούν μεταξύ τους με |
|||
διάφορους τρόπους επικοινωνίας.</p> |
|||
</div> |
|||
<div class="admonitionblock note"> |
|||
<table> |
|||
<tr> |
|||
<td class="icon"> |
|||
<div class="title">Note</div> |
|||
</td> |
|||
<td class="content"> |
|||
<div class="paragraph"> |
|||
<p>Λειτουργικότητα Σμήνους</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Σε ένα <strong>σμήνος εικονικών μηχανών</strong>, υπάρχουν |
|||
μηχανές που <strong>συλλέγουν δεδομένα</strong> (συνήθως |
|||
έχουν τον ρόλο των <strong>clients</strong>) και μηχανές |
|||
που "αποκτούν" αυτά τα δεδομένα καθώς στη συνέχεια <strong>επικοινωνούν μεταξύ τους</strong> για διάφορους σκοπούς (συνήθως έχουν τον ρόλο των <strong>servers ή devices</strong>). |
|||
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.</p> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
</table> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p><strong>Για το σκοπό του εργαστηρίου, θα χρησιμοποιηθούν τα παρακάτω εργαλεία:</strong></p> |
|||
</div> |
|||
<div class="ulist"> |
|||
<ul> |
|||
<li> |
|||
<p>Swarmlab</p> |
|||
</li> |
|||
<li> |
|||
<p>Ansible</p> |
|||
</li> |
|||
<li> |
|||
<p>Fluentd</p> |
|||
</li> |
|||
<li> |
|||
<p>MongoDB</p> |
|||
</li> |
|||
<li> |
|||
<p>NodeJS</p> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="sect1"> |
|||
<h2 id="__">1. Πρώτη Ενότητα</h2> |
|||
<div class="sectionbody"> |
|||
<div class="sect2"> |
|||
<h3 id="___2">1.1. Δημιουργία Δικτύου:</h3> |
|||
<div class="paragraph"> |
|||
<p>Για να μπορέσουμε να θέσουμε σε <strong>λειτουργία</strong> τις εικονικές |
|||
μηχανές αλλά και να τις <strong>διαμορφώσουμε κατάλληλα</strong> έτσι |
|||
ώστε να <strong>συλλέγουν</strong> και να <strong>μεταφέρουν δεδομένα</strong>, |
|||
θα χρειαστεί να δημιουργήσουμε ένα <strong>δίκτυο</strong>, πάνω στο |
|||
οποίο θα γίνουν οι επιθυμητές ενέργειες.</p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="___3">1.2. Αυτόματη Εγκατάσταση Προγράμματος Σύλλογης Δεδομένων:</h3> |
|||
<div class="paragraph"> |
|||
<p>Για να μπορέσουμε να συλλέξουμε δεδομένα από ένα σύνολο εικονικών μηχανών |
|||
και να τα στείλουμε σε διάφορα σημεία, θα πρέπει οι εικονικές μηχανές |
|||
να έχουν <strong>εγκαταστήσει ορισμένα πακέτα</strong> που θα περιέχουν |
|||
<strong>ειδικά εργαλεία</strong> για την κάθε διαδικασία που επιθυμούμε |
|||
να εκτελέσουν.</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Χρησιμοποιούμε το <strong>Ansible</strong>, με το οποίο δίνουμε τις διευθύνσεις |
|||
των εικονικών μηχανών που επιθυμούμε να κάνουν τις απαραίτητες <strong>εγκαταστάσεις πακέτων</strong>, |
|||
σε ένα αρχείο <strong>Inventory</strong>, καθώς και σε ένα άλλο αρχείο |
|||
<strong>fluentd.conf.yml</strong> δίνουμε ορισμένα πακέτα που θέλουμε |
|||
να εγκατασταθούν στις εικονικές μηχανές.</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Για την <strong>συλλογή δεδομένων</strong> θα χρησιμοποιήσουμε ένα <strong>ειδικό εργαλείο</strong>, |
|||
το οποίο έχει την δυνατότητα να συλλέγει δεδομένα από διάφορες πηγές |
|||
(π.χ. <strong>system logs</strong>, <strong>apache logs</strong>, <strong>web app / mobile logs</strong>, |
|||
<strong>IoT Sensors logs</strong> κλπ.) και να τα στέλνει σε διάφορα |
|||
σημεία που επιθυμούμε (π.χ. <strong>AWS</strong>, <strong>Hadoop</strong>, |
|||
<strong>Βάσεις Δεδοένων</strong>).</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Το εργαλείο που θα χρησιμοποιήσουμε ονομάζεται <strong>Fluentd</strong> και θα επιχειρήσουμε την συλλογή δεδομένων από αρχεία <strong>logs</strong> αναφορικά με διάφορα <strong>στατιστικά</strong> της εφαρμογής μας, |
|||
καθώς και από αρχεία που έχουμε <strong>γράψει</strong> μέσα σε αυτά.</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Η αποστολή και αποθήκευση της παραπάνω <strong>συλλογής δεδομένων</strong>, |
|||
όπως θα δούμε και παρακάτω, θα γίνεται <strong>αρχικά</strong>, σε |
|||
ένα <strong>αρχείο</strong> μέσα από το οποίο θα μπορούμε να δούμε |
|||
τι πληροφορίες έχουν συλλεχθεί. Έπειτα, με το κατάλληλο <strong>configuration</strong>, |
|||
η αποθήκευση των δεδομένων που συλλέχθηκαν θα γίνεται σε ένα <strong>κεντρικό σημείο</strong> και πιο συγκεκριμένα σε μια <strong>Βάση Δεδομένων</strong>. Για τους |
|||
σκοπούς του εργαστηρίου, θα χρησιμοποιήσουμε την <strong>MongoDB replica</strong>.</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Στην <strong>Ενότητα 2</strong>, θα γίνει λεπτομερής περιγραφή της αποθήκευσης |
|||
δεδομένων στην <strong>Βάση Δεδομένων</strong>.</p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="_onevent">1.3. onEvent - Τοπική / Προσωρινή Αποθήκευση Δεδομένων:</h3> |
|||
<div class="paragraph"> |
|||
<p>Όπως αναφέρθηκε στην προηγούμενη υποενότητα, με τη βοήθεια του <strong>εργαλέιου Fluentd</strong> θα ορίσουμε <strong>ποιες</strong> εικονκές μηχανές θα συλλέξουν δεδομένα |
|||
και από <strong>ποια</strong> αρχεία εισόδου για διάβασμα.</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Σε αυτό το σημείο του project, θα ορίσουμε το αρχείο εξόδου στο οποίο |
|||
θα αποθηκεύονται όλα τα <strong>συμβάντα</strong> σε περίπτωση που |
|||
υπάρξουν στα αρχεία εισόδου.</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="sect1"> |
|||
<h2 id="___4">2. Δεύτερη Ενότητα</h2> |
|||
<div class="sectionbody"> |
|||
<div class="sect2"> |
|||
<h3 id="___5">2.1. Δημιουργία Βάσης Δεδομένων:</h3> |
|||
<div class="paragraph"> |
|||
<p>Για να μπορέσουμε να στέλνουμε δεδομένα σε μια <strong>Βάση Δεδομένων</strong>, |
|||
θα χρειαστεί να την δημιουργήσουμε πρώτα.</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Χρησιμοποιώντας το εργαλείο <strong>Mongo</strong> μπορούμε να σηκώσουμε |
|||
μια <strong>replicated</strong> Βάση Δεδομένων, να ορίσουμε το <strong>username</strong> και το <strong>password</strong> για την πρόσβασή μας σε αυτήν, καθώς |
|||
και τις πόρτες για την μελλοντική σύνδεση της Βάσης με ένα Websocket, |
|||
το οποίο θα καλυφθεί στην <strong>Ενότητα 3</strong>.</p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="_onevent_2">2.2. onEvent - Αποθήκευση Δεδομένων στην Βάση:</h3> |
|||
<div class="paragraph"> |
|||
<p>Αφότου δοκιμάσουμε την αποθήκευση των δεδομένων σε ένα αρχείο εξόδου, |
|||
μπορούμε έπειτα με την κατάλληλη <strong>διαμόρφωση</strong> στα <strong>configuration</strong> αρχεία του εργαλείου <strong>Fluentd</strong>, να ορίσουμε πλεόν ως |
|||
έξοδο για αποθήκευση δεδομένων την Βάση Δεδομένων, την οποία δημιουργήσαμε |
|||
μόλις.</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="sect1"> |
|||
<h2 id="___6">3. Τρίτη Ενότητα</h2> |
|||
<div class="sectionbody"> |
|||
<div class="sect2"> |
|||
<h3 id="__websocket">3.1. Δημιουργία Websocket:</h3> |
|||
<div class="paragraph"> |
|||
<p>Για να μπορέσουμε να έχουμε<strong>άμεση</strong> μεταφορά των δεδομένων, |
|||
θα χρειαστεί να ενεργοποιήσουμε <strong>Server</strong>, καθώς και |
|||
την Τεχνολογία των <strong>Sockets</strong>, έτσι ώστε να έχουμε την |
|||
δυνατότητα να ζητάμε κάποια δεδομένα από τον Server (ως Clients) και |
|||
να παίρνουμε το αποτέλεσμα.</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Αυτό επιτυγχάνεται με την δημιουργία ενός <strong>Websocket</strong>, |
|||
το οποίο το θέτουμε σε λειτουργία μέσω <strong>Web Browser</strong> αφότου το προγραμματίσουμε κατάλληλα για την <strong>πόρτα</strong> στην οποία θα "ακούει" η σύνδεση.</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Για τους σκοπούς του project, θα χρησιμοποιηθεί η Υπηρεσία <strong>RESTful API</strong> μέσω του Πρωτοκόλλου <strong>REST</strong>, για την επιχείρηση σύνδεσης |
|||
ενός (ή περισσότερων) Client με έναν Server σε μια συγκεκριμένη <strong>διεύθυνση</strong> και σε μια συγκεκριμένη <strong>πόρτα</strong>.</p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="__websocket_2">3.2. Σύνδεση Websocket και Βασικών Υπηρεσιών:</h3> |
|||
<div class="paragraph"> |
|||
<p>Για να μπορέσουμε να μεταφέρουμε δεδομένα μέσω ενός Websocket, η μια |
|||
λύση είναι να επιχειρήσουμε την σύνδεση του Websocket που δημιουργήσαμε |
|||
προηγουμένως, με τις <strong>βασικές υπηρεσίες</strong> που δημιουργήσαμε |
|||
στην <strong>Ενότητα 1</strong>, μέσω ορίσματος κατάλληλων <strong>ports</strong>.</p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="__websocket_3">3.3. Σύνδεση Websocket και Βάσης Δεδομένων:</h3> |
|||
<div class="paragraph"> |
|||
<p>Μια άλλη λύση για την μεταφορά δεδομένων μέσω ενός Websocket, είναι να |
|||
επιχειρήσουμε την σύνδεση του Websocket που δημιουργήσαμε προηγουμένως, |
|||
με την <strong>Βάση Δεδομένων</strong> που δημιουργήσαμε στην <strong>Ενότητα 2</strong>, |
|||
μέσω ορίσματος κατάλληλων <strong>ports</strong>.</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</body> |
|||
|
|||
</html> |
Loading…
Reference in new issue