ΕΛ/ΛΑΚ | creativecommons.gr | mycontent.ellak.gr |
freedom

Παρουσιάσεις από την φετινή Fosdem 2017: Metrics & logging και Transform your monolith into a nice SOA app

Η FOSDEM είναι η μεγαλύτερη συνάντηση των κοινοτήτων Ελεύθερου και Ανοικτού Λογισμικού, από την Ευρώπη αλλά και από όλο τον κόσμο. Μέσα στο διήμερο της εκδήλωσης διεξάγονται πάνω από 600 παρουσιάσεις και ομιλίες σε δεκάδες διαφορετικές αίθουσες.  Αυτό είναι το τρίτο άρθρο της σειράς, όπου παρουσιάζουμε μερικές από τις σημαντικές παρουσιάσεις και ομιλίες τις οποίες παρακολουθήσαμε.


Metrics and logging

Ο Michael Heap παρουσίασε τη σημασία της διαδικασίας καταγραφής των συμβάντων (logging), εργαλεία που υποστηρίζουν αυτή την υπηρεσία, καθώς και τις καλές πρακτικές στις οποίες αυτός έχει καταλήξει.

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

Αναφέρθηκε στη φύση του application log, ποιες προϋποθέσεις θα πρέπει να πληροί, καθώς και ποιους ρόλους εξυπηρετεί. Τα αρχεία καταγραφής χρησιμεύουν και ως ενδεικτικές τιμές για διάφορες παραμέτρους προς παρακολούθηση για ύστερη αξιολόγηση (metrics).

Στη συνέχεια αναφέρθηκε στο τετράπτυχο των W όπως το ανέφερε, και εξήγησε ότι ένα αρχειο καταγραφής θα πρέπει να απαντάει σε τέσσερα ερωτήματα: when-πότε έλαβε χώρα το συμβάν, who-σε ποιον συνέβη, where-πού να αποσταλούν οι συγκεκριμένες ενημερώσεις, και το πιο σημαντικό, why-γιατί ακριβώς έλαβε χώρα αυτό το συμβάν.

Επέδειξε τη συνάρτηση της php error_log ως μία περιορισμένων δυνατοτήτων και εύρους εφαρμογών επιλογή. Της καταλόγισε αδυναμία σημασιολογικού διαχωρισμού ανάμεσα σε error events και informational events.

Παρουσίασε το logging framework monolog ως το εργαλείο επιλογής του και αναφέρθηκε στις βασικές λειτουργίες του.

Αναφέρθηκε εκτενώς στο ELK stack : Elastic-Logstash-Kibana ως την πλέον καθιερωμένη προσέγγιση για συλλογή, καταγραφή, φιλτράρισμα και απεικόνιση συμβάντων που βασίζονται σε αρχεία καταγραφής.

Μίλησε για τις δυνατότητες συλλογής, επεξεργασίας-φιλτραρίσματος, εξόδων του Logstash. Το Logstash μπορεί να συλλέξει δεδομένα από πενήντα διαφορετικές πηγές αρχείων καταγραφής.

Πέρα από το ELK stack το οποίο παρουσίασε ως λύση για εταιρική μεγάλης κλίμακας χρήση, αναφέρθηκε και σε πιο ελαφρών απαιτήσεων και μικρότερης πολυπλοκότητας εναλλακτικές όπως το Beats.

Το Elasticsearch δέχεται και αποθηκεύει τα αποτελέσματα του Logstash και εφαρμόζει τις δυνατότητές του ως μηχανή αναζήτησης κειμένου ιδανικά στα συγκεκριμένα datasets.

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

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

Ο προγραμματιστής θα πρέπει να διαχειριστεί τις ριπές δεδομένων, όποτε υπάρχουν πυκνά συμβάντα, έχοντας πάντα κατά νου παραμέτρους όπως τη χωρητικότητα δίσκου, τη λεξικογράφηση (indexing)-ενώ λόγω της αρχιτεκτονικής του circular buffer στην οποία βασίζεται το Elasticsearch, ιδιαίτερη προσοχή πρέπει να δωθεία στις επανεγγραφές δεδομένων.

Επίσης αναφέρθηκε σε κάποιες καλές πρακτικές όπως τη σημασία της επισήμανσης των log events με μοναδικό αναγνωριστικό για system-wide αναγνώριση, το timestamping να βασίζεται σε UTC ημερομηνία και όχι σε τοπική ώρα, καθώς και σε υποστηρικτικά εργαλεία.

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

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

 

Δείτε το βίντεο της παρουσίασης από την φετινή FOSDEM


Transform your monolith into a nice SOA app

 

Ο Mathieu Gillot παρουσίασε πρακτικές που εφαρμόζει κατά τη μετάπτωση μίας εν-παραγωγή εφαρμογής.

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

Αναφέρθηκε στις βασικές αρχές της Service Oriented Architecture, όπου γενικά δίνεται προτεραιότητα στην παραγωγικότητα έναντι της απόλυτης ορθότητας της υλοποίησης.

Η λογική της μίας ευθύνης ανά δομικό στοιχείο της εφαρμογής, οδηγεί στην παραγωγή ανεξάρτητων υπηρεσιών (agnostic services). Το design pattern αυτό, κατά την αναβάθμιση της εφαρμογής, απαιτεί πλέον την επέκταση ή ενημέρωση μόνο του ζητούμενου service component και όχι όλης της εφαρμογής.

Αναφέρθηκε στις αρχές που εξυπηρετούνται από τις ανεξάρτητες υπηρεσίες (agnostic services). Σημασία της τήρησης των αρχών των agnostic services καθώς και τη σημασία του dependency injection pattern και composability για τη χαλαρή αλληλεπίδραση (loose coupling) ανάμεσα σε δομικά στοιχεία κώδικα.

Μετά τον κατά Fowler ορισμό της αναδόμησης (refactoring) κάποιου τμήματος κώδικα, αναφέρθηκε στη σημαντικότητα του να μην προσπαθούμε παράλληλα να επέμβουμε σε δύο διακριτά επίπεδα στο λογισμικό, λ.χ. ανάπτυξη ενός feature και την ταυτόχρονη αναδόμηση. Σε αυτή την πρακτική ανέφερε τη συμβολή της ανάπτυξης με έγχυση εξαρτήσεων (dependency injection).

Ανέφερε ως πρακτική προτίμησής του την ανάπτυξη λογισμικού μέσω δοκιμών με επακόλουθη διακριτή φάση αναδόμησης. Ανέφερε επίσης και άλλες πρακτικές για αναδόμηση του κώδικα, μαζί με το γιατί ο ίδιος προτιμάει την Test Driven Development (TDD) πρακτική αντί αυτών.

Διαχώρισε τις περιπτώσεις αναδόμησης με κριτήριο το μέγεθος του έργου και υπέδειξε τεχνικές κατάλληλες για την αντιμετώπιση κάθε τέτοιας περίπτωσης. Ιδιαίτερο ενδιαφέρον είχε η περίπτωση της αναδόμησης μεγάλου εύρους όπου, όταν χρειάζεται να εκτελεστεί έργο αναδόμησης που θα διαρκέσει πολύ χρόνο, χρησιμοποιείται η τεχνική branch by abstraction, μία προσαρμογή του adaptor design pattern που χρησιμοποιείται παροδικά έως ότου ολοκληρωθεί η διαδικασία αναδόμησης.

Στη συνέχεια εξήγησε πρακτικές και μεθόδους για την αναβάθμιση της αποσύσφιξης (decoupling) ανάμεσα στα τμήματα κώδικα. Αναφορικά αυτές: law of demeter, SOLID, dependency injection, χρήση μοντέλου γεγονότων, χρήση διαύλων γεγονότων. Επεσήμανε τα προβλήματα που μπορούν να εγγυμονούν οι λύσεις που περιέχουν χειρισμό γεγονότων και διαύλων γεγονότων.

Αναφέρθηκε στην αναγκαιότητα των δοκιμών και ανέπτυξε πρακτικές εντός του πλαισίου της παρουσίασής του για κάθε κατηγορία δοκιμων όπως unit testing, integration & functional testing, end user testing

Σε σχέση με την πρακτική του code coverage, έθεσε κάποια στάνταρντς ώστε να μη γίνεται το code coverage εμμονικά, αλλά όσο πιο αποδοτικά γίνεται και προτίμησε μή καθολική κάλυψη του κώδικα αλλά στο 100% των περιπτώσεων χρήσης, παρά ένα μικρό ποσοστό των περιπτώσεων χρήσης στο πλήρες εύρος του κώδικα. Ειδικότερα προέτρεψε τα coverage tests να εστιάζουν στα τμήματα του κώδικα που ο προγραμματιστής θεωρεί ως τα πιο “επιρρεπή” να εμπεριέχουν προβλήματα.

Για το σκέλος του monitoring, παρακίνησε στη σαφή διάκριση ανάμεσα σε processor monitoring και i/o monitoring, ειδικά όσον αφορά την php η οποία είναι γλώσσα μονονηματικής εκτέλεσης και συνεπώς, ότι έχει να κάνει με i/o εργασία μπλοκάρει την εκτέλεση του σεναρίου.

Στο δεύτερο σκέλος της διάλεξής του, μετά από την αναφορά σε ότι είχε να κάνει με την ανάπτυξη της SOA εφαρμογής, αναφέρθηκε στη διαδικασία και τα εργαλεία για την υλοποίηση της μετάπτωσης από το απερχόμενο σύστημα στο νέο. Τα εργαλεία περιλαμβάνουν δοκιμές συμβατότητας ανάμεσα στα δύο συστήματα (compatibility tests), δείκτες προόδου (indicators), καθώς και εργαλεία monitoring για τη σύγκριση της απόδοσης ανάμεσα στα συστήματα.

Σχετικά με τη διαδικασία μετάπτωσης ανέλυσε δύο προσεγγίσεις, την έγχυση (injection) των νέων υπηρεσιών στον υπάρχοντα διαχειριστή και για πολυπλοκότερες μεθόδους που έχουν αλληλεπίδραση με άλλες μεθόδους μέσα στη συγκεκριμένη υπηρεσία, πρότεινε την έγχυση του υπάρχοντα διαχειριστή στη νέα υπηρεσία. Τέλος έδωσε συμβουλές σε σχέση με την ολοκλήρωση της μετάπτωσης ενός μεγάλου έργου, όπου η τακτική των μικρών βημάτων προτιμάται, ενώ το να ξεκινήσει τη μετάπτωση κανείς από το δυσκολότερο σκέλος της δίνει ψυχολογικό πλεονέκτημα στην ομάδα υλοποίησης.

Επόμενο μεγάλο βήμα είναι η αυτονόμηση κάθε υπηρεσίας όπου μεταφέρεται από το πλαίσιο της μονολιθικής εφαρμογής στο δικό της service wrapper και επικοινωνεί με το δικό της api με το υπόλοιπο της εφαρμογής ή και τα άλλα τμήματά της.

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

Δείτε το βίντεο της παρουσίασης από την φετινή FOSDEM

Leave a Comment