Architecture Decision Record

Active theme: Light

← Παραδείγματα καταγραφής αποφάσεων

Μορφή χρονοσήμανσης

Περιεχόμενα:

Περίληψη

Ζήτημα

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

Αλληλεπιδρούμε με συστήματα που έχουν διαφορετικές μορφές χρονοσήμανσης:

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

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

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

Απόφαση

Επιλέγουμε την τυπική μορφή χρονοσήμανσης ISO 8601 με ακρίβεια νανοδευτερολέπτου, συγκεκριμένα «YYYY-MM-DDTHH:MM:SS.NNNNNNNNNZ».

Η μορφή δείχνει το έτος, τον μήνα, την ημέρα, την ώρα, το λεπτό, το δευτερόλεπτο, τα νανοδευτερόλεπτα και τη ζώνη ώρας Zulu, γνωστή και ως UTC, GMT.

Κατάσταση

Αποφασίστηκε.

Λεπτομέρειες

Παραδοχές

Πρέπει να χειριζόμαστε αυτές τις συμβολοσειρές κειμένου χρονοσήμανσης, ώστε να μετατρέπουμε μια χρονοσήμανση σε συμβολοσειρά (γνωστό και ως σειριοποίηση) και μια συμβολοσειρά σε χρονοσήμανση (γνωστό και ως αποσειριοποίηση).

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

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

Περιορισμοί

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

Θέσεις

Εξετάσαμε μια σειρά επιλογών:

  • Εποχή Unix, δηλαδή ένας αυξανόμενος αριθμός.

  • Συνοπτική μορφή κειμένου «YYYYMMDDTHHMMSSNNNNNNNNN».

  • Χρήση τοπικής ζώνης ώρας έναντι της ζώνης ώρας UTC.

Επιχείρημα

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

Για τυπική χρήση, θέλουμε μια μορφή που λειτουργεί καλά σε συστήματα μηχανών και λειτουργεί καλά και χειροκίνητα, όπως στη συγγραφή δειγματικών δεδομένων, την ανάγνωση εξόδου JSON, την αναζήτηση με grep σε αρχείο καταγραφής κ.λπ.

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

Επιπτώσεις

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

Σχετικά

Σχετικές αποφάσεις

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

Σχετικές απαιτήσεις

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

Σχετικά τεχνουργήματα

Μορφοποιητές και αναλυτές γλωσσών:

Παραδείγματα Rosetta Code:

Παραδείγματα SixArm:

Σχετικές αρχές

Εύκολα αναστρέψιμο. Μπορούμε να αλλάξουμε αρκετά εύκολα σε διαφορετική μορφή, όπως η εποχή Unix.

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

Σημειώσεις

Προσθέστε σημειώσεις εδώ.