Μην πετάξετε: Βέλτιστες πρακτικές για τη διαχείριση της Κωνσταντινούπολης και των αναβαθμίσεων πελατών του Ethereum

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

Στην Alchemy, παρέχουμε στους πελάτες μας αξιόπιστη, κλιμακούμενη και γρήγορη υποδομή-ως-υπηρεσία για το Ethereum, ώστε να μην χρειάζεται να αγωνίζονται για τη συντήρηση κόμβων και να επικεντρωθούν στην κατασκευή των εφαρμογών τους. Κατά τη διάρκεια της δουλειάς μας, έχουμε μάθει πολλά μαθήματα (μερικές φορές τον σκληρό τρόπο!) Σχετικά με τον καλύτερο χειρισμό των πηνίων δικτύου και των ενημερώσεων των πελατών. Με την επερχόμενη σκληρή τραβέρσα της Κωνσταντινούπολης, θεωρήσαμε ότι αυτό θα ήταν μια μεγάλη ευκαιρία να μοιραστώ μερικές από τις καλύτερες πρακτικές μας.

Αυτή είναι η πρώτη από τις πολλές αναρτήσεις ιστολογίου που θα γράψουμε για την εκτέλεση της υποδομής Ethereum με αξιόπιστο, αποδοτικό και κλιμακωτό τρόπο.

Κωνσταντινούπολη

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

Πώς αυτό σας επηρεάζει;

Για τους προγραμματιστές Dapp, το βασικό πακέτο είναι ότι θα πρέπει να ενημερώσετε τον κόμβο σας σε ένα Κωνσταντινούπολη συμβατή έκδοση ή θα είναι ασυμβίβαστη με το υπόλοιπο του μπλοκ παρελθόν δίκτυο 7.080.000. Οι πελάτες του Ethereum πιθανότατα θα είναι ενημερωμένοι σχετικά με τις σκληρές περόνες στην αλυσίδα και θα απελευθερώνουν μια σταθερή, συμβατή έκδοση του πελάτη τους πολύ πριν από την εκτιμώμενη ημερομηνία περόνης π.χ. και την ισοτιμία. Εάν διαχειρίζεστε τον δικό σας κόμβο πελάτη Ethereum, θα χρειαστεί να ενημερώσετε τον πελάτη του etherto σε μια έκδοση που είναι συμβατή με το σκληρό πιρούνι. η ισοτιμία θα είναι σταθερή ή υψηλότερη από 2.1.10 και η geth θα είναι 1.8.20 ή μεγαλύτερη.

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

Βέλτιστες πρακτικές

Εάν εκτελείτε μια υπηρεσία που απαιτεί τακτική αλληλεπίδραση με το blockchain Ethereum, μερικές βασικές βέλτιστες πρακτικές θα σας σώσει από πιθανή καταστροφική σφάλματα κατά την ενημέρωση των κόμβων σας. Θα αναφερθούμε σε μερικά σενάρια πραγματικής ζωής των αναβαθμισμένων ενημερώσεων που ήταν η ώθηση για αυτή τη θέση στο blog.

Λειτουργία πολλαπλών κόμβων

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

Όταν πρόκειται για ενημερώσεις, η εκτέλεση πολλαπλών κόμβων παρέχει μερικά επιπλέον πλεονεκτήματα:

  1. Οι επιπλέον κόμβοι χρησιμεύουν ως αντίγραφα ασφαλείας σε περίπτωση που μια ενημέρωση πάει στραβά και καθιστά έναν κόμβο μη ανακτήσιμο
  2. Υψηλή διαθεσιμότητα και χωρίς διακοπή κατά την ενημέρωση των κόμβων με κύλιση
  3. Επιτρέπει τη δοκιμή παλινδρόμησης που συγκρίνει τους ενημερωμένους κόμβους με τους αρχικούς κόμβους για να διασφαλιστεί η αναμενόμενη συμπεριφορά

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

Παράδειγμα 1: Μετεγκατάσταση DB Buggy

Ένα ζήτημα που είδαμε κατά την αναβάθμιση της ισοτιμίας από 1.X.X σε 2.X.X ήταν η διαφθορά στη βάση δεδομένων. Η ενημερωμένη έκδοση περιελάμβανε μια εσωτερική μετανάστευση DB, η οποία μετατρέπει εσφαλμένα τους αριθμούς μπλοκ στο φίλτρο άνθους που οδήγησε σε κενά αποτελέσματα για αιτήσεις getLog για ιστορικά μπλοκ. Η απώλεια δεδομένων ήταν μη αναστρέψιμη, οπότε ο κόμβος δεν μπορούσε να σωθεί. Είμαστε αρκετά τυχεροί για να το πιάσουμε μέσα από εσωτερικές δοκιμές σε έναν κόμβο καναρίνι, αφετηρία στους μη ενημερωμένους κόμβους μας για να κρατήσουμε τα συστήματά μας επάνω και περιμένουμε μέχρι το πρόβλημα να επιλυθεί από την ομάδα ισοτιμίας στο 2.2.3-beta.

Αυστηρή δοκιμή παλινδρόμησης

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

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

Παράδειγμα 2: Αλλαγή μορφής εξόδου απάντησης

Αυτό ήταν ένα ενδιαφέρον θέμα που συναντήσαμε καθώς ένας νεοεισαγόμενος πελάτης επέστρεψε μια διαφορετική απάντηση σε ένα σφάλμα εκτέλεσης EVM. Η ισοτιμία 1.11.1-beta επέστρεψε μια απάντηση που έμοιαζε έτσι:

{"Jsonrpc": "2.0", "σφάλμα": {"code": 32015, μήνυμα: "σφάλμα εκτέλεσης VM", "data": "

Αντί για απαντήσεις από προηγούμενες εκδόσεις που έμοιαζαν έτσι:

{"Jsonrpc": "2.0", "id": 1, "αποτέλεσμα": "0x"}

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

Βασίζονται σε!

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

Εάν εργάζεστε σε ένα έργο Ethereum και δεν θέλετε να ασχοληθείτε με τα γενικά έξοδα συντήρησης κόμβων, μιλήστε σε εμάς! Η Alchemy παρέχει την ταχύτερη, πιο κλιμακούμενη και πιο αξιόπιστη υποδομή Ethereum ως υπηρεσία, ώστε να μπορείτε να εστιάσετε στην κατασκευή του προϊόντος σας. Κάτω από την κουκούλα, η Alchemy έχει κατασκευάσει επαναστατική νέα υποδομή που ήδη εξουσιάζει κορυφαία έργα blockchain όπως το Augur, κορυφαίες εταιρείες blockchain όπως το CryptoKitties και τα κορυφαία hedge funds (που διαχειρίζονται περισσότερα από 3 δισεκατομμύρια δολάρια). Μάθετε περισσότερα στο alchemyapi.io.