Αυτός ο ιστότοπος μεταφράζεται αυτόματα σε πολλές γλώσσες με λογισμικό που ανέπτυξε ο Kohei Koyanagi. Για μεγαλύτερη ακρίβεια, ανατρέξτε στο πρωτότυπο στα αγγλικά .

Προσέγγιση Διπλής Ταυτοποίησης του Splync: UUID και Αυτόματος Αύξων Αριθμός

Το Splync Χρησιμοποιεί Δύο Ταυτοποιητές για Ευαίσθητα IDs

Στη βάση δεδομένων του Splync, κάθε χρήστης — και κάθε έργο — αναγνωρίζεται από δύο διαφορετικά IDs: ένα UUID και έναν αυτόματο αυξανόμενο ακέραιο αριθμό. Ο αυτόματος αυξανόμενος ακέραιος είναι αυτός που οι περισσότεροι γνωρίζουν — είναι απλά ένας μετρητής: 1, 2, 3, και ούτω καθεξής. Το Splync χρησιμοποιεί αυτούς τους ακέραιους μέσα στη βάση δεδομένων του διακομιστή για την οργάνωση σχεδόν κάθε πίνακα, καθώς είναι απλοί, γρήγοροι και αποδοτικοί για συνδέσεις. Ωστόσο, δεν εκθέτουμε ποτέ αυτούς τους εσωτερικούς αριθμούς στην εφαρμογή. Για παράδειγμα, αν ήσασταν ο 42ος χρήστης που εγγράφηκε, το εσωτερικό σας ID στη βάση δεδομένων θα ήταν 42. Αλλά η εφαρμογή iOS σας ποτέ δεν βλέπει το "42." Αντίθετα, η εφαρμογή χρησιμοποιεί ένα UUID για να σας αναπαραστήσει. Εφαρμόζουμε την ίδια προσέγγιση και στα έργα — ένα ID έργου μπορεί να είναι "7" μέσα στη βάση δεδομένων, αλλά η εφαρμογή πάντα αναφέρεται σε αυτό χρησιμοποιώντας ένα μακρύ UUID.

Τι Είναι ένα UUID

Το UUID σημαίνει Παγκόσμια Μοναδικό Αναγνωριστικό. Το Splync χρησιμοποιεί εκδόσεις 4, παραλλαγή 1 UUIDs, συμμορφούμενες με το RFC 4122 — ένα από τα πιο ευρέως υιοθετημένα πρότυπα. Είναι μια τυχαία παραγόμενη συμβολοσειρά, που μοιάζει με 949ca11c-a6ed-48a3-b40a-fa9727494917. Ένα UUID γράφεται συνήθως ως 32 δεκαεξαδικά χαρακτήρες διαιρεμένα σε πέντε τμήματα χωρισμένα με παύλες. Σχεδιάστηκε να είναι παγκοσμίως μοναδικό, πράγμα που σημαίνει ότι δεν θα συγκρουστεί ούτε σε διαφορετικούς διακομιστές ή βάσεις δεδομένων. Μαθηματικά, υπάρχουν περίπου 16^32 = 2^128 δυνατοί συνδυασμοί. Ωστόσο, καθώς έξι bits είναι κρατημένα για να υποδεικνύουν την παραλλαγή και την έκδοση, ο συνολικός αριθμός των διακεκριμένων εκδόσεων-4, παραλλαγής-1 UUIDs είναι περίπου 2^122, ή περίπου 5.3 x 10^36 — ένας αστρονομικά μεγάλος αριθμός που εξασφαλίζει πρακτική μοναδικότητα.

Πόσο Μικρό Είναι το 1 / 5,300,000,000,000,000,000,000,000,000,000,000,000

Κάθε ζεύγος UUIDv4 έχει περίπου 1 στις 5.3 × 10^36 πιθανότητα να ταιριάξει. Αυτός ο αριθμός είναι τόσο μικρός που σχεδόν αρνείται να υπάρξει στη φαντασία των ανθρώπων. Για να το φανταστείτε, σκεφτείτε να ρίχνετε 47 ζάρια ταυτόχρονα. Οι πιθανότητες να βγουν όλοι άσσοι — κάθε ζάρι να δείχνει “1” — είναι περίπου 1 στις 6^47, ή περίπου 1 στις 3.7 × 10^36. Αυτό είναι το ίδιο μέγεθος με πιθανή σύγκρουση UUID. Τώρα, φανταστείτε κάθε άτομο στη Γη — περίπου οκτώ δισεκατομμύρια από εμάς — να ρίχνει αυτά τα 47 ζάρια κάθε χιλιοστό του δευτερολέπτου για ένα τρισεκατομμύριο χρόνια. Αυτό είναι περίπου 2.5 × 10^32 συνολικές προσπάθειες. Ακόμα και μετά από όλα αυτά, η πιθανότητα κάποιος, κάπου, να πετύχει 47 άσσους ταυτόχρονα θα ήταν μόνο μία στις δέκα χιλιάδες. Τόσο απίθανο είναι να συγκρουστούν δύο UUIDv4. Δεν είναι "σπάνιο." Είναι κοσμικά παράλογο — το είδος της σύμπτωσης που θα έκανε τους μαθηματικούς να ρίξουν τον καφέ τους και να ελέγξουν το σύμπαν για σφάλματα.

Είναι Εύκολο να Δημιουργηθεί ένα UUID

Με την πρώτη ματιά, η δημιουργία ενός UUID μπορεί να φαίνεται απλή — εξάλλου, είναι απλά μια αλφαριθμητική συμβολοσειρά που μοιάζει τυχαία. Αλλά δοκιμάστε να γράψετε ένα μόνοι σας με στυλό και χαρτί. Μπορείτε να σημειώσετε 36 χαρακτήρες, σίγουρα, αλλά αν επαναλάβετε την άσκηση χιλιάδες φορές, θα εμφανιστούν σαφή μοτίβα. Ίσως προτιμάτε ορισμένα ψηφία, όπως το 3 ή το 8 και σπάνια χρησιμοποιείτε γράμματα όπως το x. Ένας υπολογιστής μπορεί να εντοπίσει αυτές τις προκαταλήψεις άμεσα. Ένας κακόβουλος χάκερ θα μπορούσε να αναλύσει τις συνήθειές σας και να περιορίσει τη "τυχαία" μυστική σας συμβολοσειρά μέσα σε μια μέρα. Τότε, τι θα γινόταν αν καταφύγατε επίσης σε έναν υπολογιστή και καλούσατε τη rand(), την κλασική συνάρτηση τυχαίου, για να δημιουργήσετε κάθε ψηφίο. Αυτό είναι καλύτερο — αλλά όχι αρκετό. Πολλές "τυχαίες" γεννήτριες αριθμών στα συνήθη προγραμματιστικά περιβάλλοντα είναι ψευδοτυχαίες, που σημαίνει ότι ακολουθούν μια προβλέψιμη μαθηματική ακολουθία που ξεκινά από έναν εσωτερικό σπόρο, ο οποίος συνήθως βασίζεται στο χρόνο του συστήματος. Αν κάποιος ανακαλύψει ή μαντέψει αυτόν τον σπόρο, μπορεί να αναπαραγάγει κάθε τιμή που η γεννήτριά σας παρήγαγε ποτέ.

Πόσο Τέλεια Τυχαίο Είναι ένα UUID

Η τέλεια τυχαιότητα δεν υπάρχει πραγματικά — όπως δεν υπάρχει ένα τέλειο ζάρι, ή μια τέλεια τυχαία ζαριά. Κάθε φυσική ή ψηφιακή διαδικασία ακολουθεί ορισμένους υποκείμενους κανόνες. Ωστόσο, οι μαθηματικοί και οι μηχανικοί έχουν περάσει δεκαετίες σχεδιάζοντας αλγόριθμους που πλησιάζουν όσο το δυνατόν πιο κοντά στην αληθινή τυχαιότητα. Όταν το Splync δημιουργεί ένα νέο έκδοση-4 UUID, δεν "επιλέγει απλά τυχαίους αριθμούς" σαν να ρίχνει ζάρια. Ζητά από το λειτουργικό σύστημα μικρά ίχνη απροβλεψιμότητας — για παράδειγμα, τη ακριβή στιγμή που η CPU σας ολοκληρώνει μια εργασία, τον αμυδρό ηλεκτρικό θόρυβο μέσα στο υλικό, ή τις διακυμάνσεις χρονισμού στο υπόβαθρο της μνήμης. Αυτά τα κομμάτια εντροπίας συλλέγονται και αναμειγνύονται σε 128 bits δεδομένων — μια μακρά ακολουθία από άσσους και μηδενικά. Το αποτέλεσμα είναι ένας κωδικός που είναι πρακτικά αδύνατο να μαντευτεί ή να επαναληφθεί από τους χρήστες της εφαρμογής ή πιθανούς κακόβουλους επιτιθέμενους.

Η Προσέγγιση Διπλής Ταυτοποίησης του Splync

Το Splync χρησιμοποιεί UUIDs για ευαίσθητους ταυτοποιητές όπως user IDs και project IDs, επειδή είναι εξαιρετικά τυχαία και ασφαλή. Ταυτόχρονα, μέσα στο διακομιστή του, το Splync μετατρέπει αυτά τα UUIDs σε αυτόματους αυξανόμενους ακεραίους για ταχύτερη αναζήτηση και αναλύσεις σε μεγάλα σύνολα δεδομένων. Αυτή η προσέγγιση διπλής ταυτοποίησης εξισορροπεί ανάμεσα στην ασφάλεια και την ευκολία — εξωτερική ιδιωτικότητα με εσωτερική απόδοση. Ο στόχος του Splync είναι να είναι μια εφαρμογή παρακολούθησης προϋπολογισμού χωρίς άγχος, απλή και ασφαλής. Πίσω από το ορατό περιβάλλον χρήστη, συνεχίζουμε να βελτιώνουμε την αρχιτεκτονική μας για να διατηρήσουμε τα πράγματα ομαλά, ασφαλή και διακριτικά έξυπνα.