2o ΠΑΡΑΔΟΤΕΟ – ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ ΚΑΙ ΒΗΜΑΤΑ
ΠΡΟΟΔΟΥ ΤΗΣ ΕΡΓΑΣΙΑΣ
ΥΛΟΠΟΙΗΣΗ ΤΟΥ ΜΑP REDUCE FRAMEWORK ΜΕΣΩ ΜΙΑΣ ΕΦΑΡΜΟΓΗΣ TRAFFIC MONITORING ΣΤΗΝ ΠΛΑΤΦΟΡΜΑ ANDROID.
Στην εργασία αυτή έχουμε να υλοποιήσουμε μια εφαρμογή που να τρέχει σε κινητά τηλέφωνα με λειτουργικό Android, την traffic monitoring η οποία θα τρέχει στο κινητό κάθε χρήστη και θα αποθηκεύει πληροφορίες ανάλογα με τις μετακινήσεις του, το ιστορικό κάθε μετακίνησης όπως είναι η θέση gps, η ταχύτητα, η ώρα, η απόσταση και ο τρόπος μεταφοράς.
Το πρόβλημα που έχουμε να αντιμετωπίσουμε είναι η εύρεση της συντομότερης διαδρομής όταν θέλουμε να πάμε από ένα σημείο σε ένα άλλο, κινούμενοι είτε με αυτοκίνητο είτε με λεωφορείο. Η εύρεση της συντομότερης διαδρομής στηρίζεται στη καλύτερη σχέση κίνησης στους δρόμους αλλά και απόστασης αφετηρίας - προορισμού.
ΣΧΕΤΙΚΟ ΣΕΝΑΡΙΟ ΧΡΗΣΗΣ:
H εφαρμγογή μας θα επωφελείται από το Map Reduce Framework ώστε να απαντάει σε ερωτήσεις (queries) του χρήστη. Έτσι για την υλοποίηση της Μap Reduce εργασίας θα χρειαστούμε τον χρήστη (user), ο οποίος χρήστης (user) θα είναι αυτός που τρέχει εκείνη τη στιγμή την εφαρμογή και ζητάει πληροφορίες απο αυτήν. Θα χρειαστούμε ένα αντίγραφο του προγράμματος που θα είναι ο αφέντης (master) ένας κεντρικός υπολογιστής server, o οποίος θα έχει έναν ιδιαίτερο ρόλο και θα χρειαστούμε και τους workers που θα είναι όλοι αυτοί που τρέχουν στη συσκευή τους την εφαρμογή και θα υλοποιούν τη map συνάρτηση, αλλά και έναν worker που θα είναι πιο μικρός υπολογιστής και θα υλοποιεί τη reduce συνάρτηση.
Συγκεκριμένα, τα δεδομένα κάθε διαδρομής θα καταγράφονται από τους χρήστες την ώρα που θα κινούνται με το όχημα τους, έτσι κάθε χρήστης που σε κάποια φάση θα είναι και worker, θα έχει αποθηκευμένο ιστορικό μετακίνησης του με τις απαιτούμενες πληροφορίες σε μια δομή δεδομένων (λίστα). Αυτή η δομή δεδομένων (λίστα) θα πρέπει να ανανεώνεται συνεχώς έτσι ώστε να παρέχει τις σωστές πληροφορίες της ζητούμενης διαδρομής για κάθε ώρα.
Ο χρήστης (user) θα στέλνει ένα αίτημα (request) στον master – server, για την εύρεση της συντομότερης διαδρομής με δεδομένη την αφετηρία και τον προορισμό, αλλά και όλες τις πιθανές διαδρομές σε μορφή γράφου (μια χαρτογραφημένη περιοχή θα αναπαριστάται σε μορφή γράφου, κόμβοι = αφετηρία/προορισμός, και ακμές = διαδρομές). Ο server θα στέλνει το κομμάτι του γράφου με τις πιθανές διαδρομές στους workers που είναι υπεύθηνοι για τη map συνάρτηση. Στη συνέχεια ο worker στον οποίο έχει ανατεθεί η map εργασία, διαβάζει το περιεχόμενο του αντίστοιχου τμήματος εισόδου και βρίσκει τις διαδρομές (εάν υπάρχουν) που έχει κάνει και συμπίπτουν με ορισμένες διαδρομές του γράφου. Αυτή είναι η διαδικασια της map συνάρτησης. Στη συνέχεια ο worker στέλνει στο master – server τις κοινές διαδρομές καθώς και τις πληροφορίες όπως ταχύτητα, ώρα, χρόνο, απόσταση αλλά και τρόπο μεταφοράς. Την ίδια διαδικασία ακολουθεί κάθε worker που του έχει ανατεθέι μια map εργασία. Στη συνέχεια ο master – server αφού έχει πάρει τις διαδρομές με τα στοιχεία τους, τις στέλνει στο worker που είναι υπεύθηνος για reduce εργασία για να τις επεξεργαστεί, να βρεί όλες τις κοινές διαρομές και να βγάλει τον μέσο όρο ταχύτητας και απόστασης, για τη διαδικασία αυτή είναι υπεύθυνη η reduce συνάρτηση. Αφού οι reduce συνάρτηση ολοκληρωθεί και βγάλει ως έξοδο τη λίστα με τις πιθανές συντομότερες διαδρομές και τα αντίστοιχα στοιχεία τους, τις αποστέλλει στο master – server, και αυτός με τη σειρά του στο user έτσι ώστε να επιλέξει τη πιο συμφέρουσα διαδρομή.
ΑΡΧΙΤΕΚΤΟΝΙΚΗ
Πιο πάνω φαίνεται η αρχιτεκτονική του συστήματος.
Eπεξήγηση της αρχιτεκτονικής του συστήματος – Εισαγωγή σε δομές του συστήματος
1. Μια κλάση Graph στην οποία θα βρίσκονται αποθηκευμένες οι διαδρομές που έχει ακολουθήσει ο κάθε χρήστης, δηλ. σε μορφή γράφου καθώς και όλες οι σχετικές πληροφορίες όπως ώρα, απόσταση διαδρομής, ταχύτητα, χρόνος και τρόπος μετακίνησης. Στη συγκεκριμένη κλάση θα υπάρχουν και οι λίστες αποθήκευσης των συγκεκριμένων στοιχείων, με συνεχή ανανέωση και οι απαραίτητες συναρτήσεις.
2. Μια κλάση Request στην οποία κλάση ο χρήστης (user), θα κάνει αίτηση στον master για να ξεκινήσει η διαδικασία εύρεσης συντομότερης διαδρομής, όπου ο χρήστης (user) θα πρέπει να να έχει στήλει στον master τις απαραίτητες πληροφορίες και τον σχετικό γράφο με τις διαδρομές.
3. Μια κλάση SendData όπου ο master θα αποστέλλει στους workers τα δεδομένα που έχει πάρει από τον χρήστη (user) που έχει κάνει την αίτηση, έτσι ώστε να προχωρήσει η διαδικασία της map function. Aφού θα έχει ολοκληρωθεί η διαδικασία της map function, θα επιστρέφει τη σχετική λίστα – αποτέλεσμα στοn master.
4. Mια κλάση ResendData όπου ο master θα αποστέλλει τα αποτελέσματα που έχει πάρει από τους workers της map εργασίας, στον worker της reduce εργασίας, εκεί θα υπάρχει ένας ταξινομητής. Ο ταξινομητής θα ταξινομεί της κοινές διαδρομές, αυτές με το κοινό κλειδί και θα τις στέλνει στη reduce function όπου στο τέλος της reduce function θα παράγει μια λίστα με τις προτεινόμενες συντομότερες διαδρομές. Θα την επιστρέφει στον master, αυτός με τη σειρά του στον χρήστη (user) που έκανε την αίτηση και αυτός με τη σειρά του θα επιλέγει την συντομότερη διαδρομή.
**Οποιαδήποτε αλλαγή, κάθε σημαντικό βήμα ή και πρόβλημα θα αναρτάται στο blog αυτό, γι’αυτό ενδέχεται να παρουσιαστούν αλλαγές στο παρόν κείμενο.

