Το σύστημα-αφετηρία είναι το προϊόν «BookOnCloud», το οποίο θα προσφέρει στους πελάτες-ιδιοκτήτες τουριστικών καταλυμάτων του διάφορα πακέτα που θα τους δίνουν τη δυνατότητα να παρακολουθούν ανά πάσα στιγμή τον ανταγωνισμό και τη θέση τους σε αυτόν. Το τελικό αποτέλεσμα θα είναι να εμφανίζονται οι χρήσιμες αυτές πληροφορίες στις διαχειριστικές οθόνες των πελατών.

Ο κάθε πελάτης του «BookOnCloud» ανάλογα με το πακέτο προσφοράς που έχει αγοράσει θα λαμβάνει τις ζητούμενες πληροφορίες ανά το χρονικό διάστημα που καλύπτει το πακέτο που έχει αγοράσει. Το χρονικό διάστημα αυτό μεταφράζεται σε cron expressions και αποθηκεύεται σε έναν πίνακα μίας βάσης postgres μαζί με το μοναδικό id του πελάτη αλλά και το id του στόχου. Με αυτό τον τρόπο έχει πραγματοποιηθεί ένα πλήρες αίτημα του πελάτη.

Ακολουθεί ένα άλλο υποσύστημα, το οποίο υλοποιείται με Apache Kafka. Ένα node.js script αναλαμβάνει να διαβάσει τον πίνακα από τη βάση δεδομένων και να εκτελέσει μια χρονοπρογραμματισμένη διεργασία που θα τρέχει κάθε τόσο χρονικό διάστημα ώστε αυτό να ισούται με το χρονικό διάστημα που ορίζει το cron expression για την κάθε αίτηση του πελάτη. Η διεργασία αυτή ουσιαστικά ενεργοποιεί έναν producer του Apache Kafka, ο οποίος τοποθετεί τις αιτήσεις αυτές σε μία ουρά. Αυτές οι αιτήσεις αποτελούν το πρώτο topic του Apache Kafka.

Το topic αυτό «καταναλώνεται» από ένα γκρουπ από consumers. Χρησιμοποιούμε γκρουπ ώστε να εκμεταλλευτούμε περισσότερους consumers που θα διαβάζουν τα μηνύματα του topic όσο η ουρά ολοένα και αυξάνεται. Με τον τρόπο αυτό το σύστημα γίνεται αποδοτικότερο και ταχύτερο αφού οι διαδικασίες εκτελούνται παράλληλα στους ξεχωριστούς εξυπηρετητές που προσφέρει ο Apache Kafka. Αυτός είναι και ο λόγος που προτιμήθηκε ο Apache Kafka, διότι μπορεί να διαχειριστεί αποδοτικά τις ουρές και να μεταφέρει σε πραγματικό χρόνο τα δεδομένα από τον αποστολέα στον/στους παραλήπτες.

Το μήνυμα λειτουργεί σαν input στο υποσύστημα συλλογής δεδομένων από το στόχο. Η επικοινωνία αυτή επιτυγχάνεται μέσω κάποιων proxies, οι οποίοι μεταβάλλονται σε περίπτωση αποτυχίας. Για παράδειγμα, μία εναλλακτική του proxy είναι ο Tor Browser που συνδέει επιτυχώς διαδικτυακά το υποσύστημα με το στόχο.

Το υποσύστημα συλλογής δεδομένων δίνει ως output τις απαντήσεις στα αιτήματα των πελατών, οι οποίες περιλαμβάνουν τις πληροφορίες που ζητάει ο κάθε πελάτης. Αντιστοίχως με τη διαδικασία που πραγματοποιήθηκε για τις αιτήσεις, έτσι και οι απαντήσεις θεωρούνται μηνύματα ενός Apache Kafka topic και επομένως αποθηκεύονται σε μια ουρά προς κατανάλωση από ένα δεύτερο γκρουπ από consumers. Αν στο μήνυμα εντοπιστεί κάποιο review γίνεται αυτόματα κλήση του api που ανέπτυξε η συνεργαζόμενη πανεπιστημιακή ομάδα με τη χρήση νευρωνικών δικτύων. Το response του api αυτού είναι η τελική απόφαση για την αξιολόγηση της κριτικής σε «θετική» ή «αρνητική» με βάση το περιεχόμενο του κειμένου που προσπελάστηκε και διαφόρων άλλων παραμέτρων.

Αφού διαβαστεί το μήνυμα, ο consumer που διάβασε το μήνυμα αυτό αναλαμβάνει να το αποθηκεύσει σε έναν πίνακα μίας βάσης postgres μαζί πια με την απάντηση του api για τις κριτικές. Αυτό όμως συμβαίνει μόνο στην περίπτωση που δεν έχει προηγηθεί κάποιο σφάλμα.

Σφάλματα μπορούν να συμβούν σε διάφορες περιπτώσεις με πιο συχνή την περίπτωση ο στόχος να έχει τροποποιήσει τη μορφή που αναπαριστά την πληροφορία του και να μη συμπίπτει πλέον με τη μορφή που αναπαρίσταται η ίδια πληροφορία από το μοντέλο που ακολουθεί το σύστημα συλλογής δεδομένων.

Αν επομένως προκύψει κάποιο σφάλμα η απάντηση αντί να αποθηκευτεί στην παραπάνω ουρά, θα αποθηκευτεί σε μία άλλη ουρά που αντιστοιχεί σε ένα διαφορετικό topic του Apache Kafka και αυτό θα αφορά μόνο τα errors που θα εντοπίζει κάθε φορά. Για άμεση ανταπόκριση του συστήματος συλλογής πληροφοριών και λύση των σφαλμάτων που προέκυψαν είναι σημαντικό τα σφάλματα να αναλύονται και να φαίνονται μαζικά σε μία κονσόλα ώστε να διευκολύνει την εργασία του διαχειριστή του συστήματος συλλογής δεδομένων που θα κληθεί να προβεί στις απαραίτητες τροποποιήσεις. Το monitoring των σφαλμάτων θα υλοποιηθεί με τα εργαλεία της Elastic, Elasticsearch-Logstash-Kibana διότι μπορούν να διαχειριστούν σε πραγματικό χρόνο

πολύ μεγάλο όγκο δεδομένων και στη συνέχεια να τα οπτικοποιήσουν σε βοηθητικά γραφήματα, όπως παραδείγματος χάρη σε dashboards.

Τέλος, ανεξάρτητα από τα προηγούμενα υποσυστήματα θα υλοποιηθεί ένα restful api σε node.js (express), το οποίο θα συνδέεται με την βάση δεδομένων που περιλαμβάνει όλη τη χρήσιμη πληροφορία και θα την αναλύει επιστρέφοντας μόνο τα απαραίτητα και κατάλληλα αποτελέσματα ανάλογα με την αίτηση του χρήστη και τα ανάλογα δεδομένα θα οπτικοποιούνται άμεσα στην διαχειριστική οθόνη του πελάτη-ιδιοκτήτη τουριστικού καταλύματος του «BookOnCloud».