Σε αυτήν τη σειρά αναρτήσεων ιστολογίου, ο Valentin De Almeida, προγραμματιστής του Ledger Live, μας μιλάει για την εξέλιξη της βάσης κωδικών του Ledger Live με τα χρόνια. Σε αυτήν την ανάρτηση ιστολογίου, θα μάθετε ότι αρχικά βασιζόταν σε πολλά αποθετήρια, τα ζητήματα που αντιμετωπίσαμε στην πορεία και γιατί έπρεπε να εξελιχθεί σε μια αρχιτεκτονική ενός αποθετηρίου. Στις επόμενες αναρτήσεις ιστολογίου, θα εξηγήσουμε πώς διεξήχθη αυτό το μεγάλο έργο μετανάστευσης.
Λίγη ιστορία
Η ανάπτυξη του Ledger το 2020 και το 2021 ήταν σημαντική. Επιστρατεύσαμε επιθετικά νέα ταλέντα, επεκτείνοντας την ομάδα μας από μια χούφτα σε περισσότερους από 20 προγραμματιστές. Αυτό σημαίνει ότι πολλοί νέοι μηχανικοί προστέθηκαν σε υπάρχοντα έργα. Καθώς η ομάδα μας μεγάλωνε γρήγορα, αντιμετωπίσαμε νέες προκλήσεις που έπρεπε να αντιμετωπίσουμε γρήγορα. Παρά τις νέες αυτές δυσκολίες, παραμείναμε προσηλωμένοι στον στόχο μας και συνεχίσαμε να προσφέρουμε εξαιρετική δουλειά.
Κάναμε ένα βήμα πίσω και εξετάσαμε τα νέα προβλήματα που προκύπτουν όταν όλο και περισσότεροι άνθρωποι εντάχθηκαν στο έργο. Μεταξύ αυτών των νέων προκλήσεων, μπορούμε να απαριθμήσουμε τις ακόλουθες ανάγκες:
- Πιο απλές ροές.
- Καλύτερες οδηγίες για εισερχόμενους και εξωτερικούς συνεισφέροντες.
- Ένα ενιαίο σύνολο εργαλείων.
- Καλύτερη διαχείριση εξαρτήσεων.
- Συγκεντρωτικές συνεισφορές ανοιχτού κώδικα.
State of the Art: πριν από τη μετανάστευση
Αρχικά, και μέχρι πέρυσι, το Ledger Live βασιζόταν σε μια αρχιτεκτονική πολυ-αποθήκης, τόσο για φορητές όσο και για επιτραπέζιους υπολογιστές, καθώς και για όλη τη λογική πίσω από αυτό. Δεν ήταν συνειδητή απόφαση να εργαστεί κανείς με αυτόν τον τρόπο, αλλά ήταν μόνο το αποτέλεσμα ενός επεκτεινόμενου έργου χωρίς πραγματικό αρχιτεκτονικό προβάδισμα. Το Ledger Live είναι ένα έργο που συγκεντρώνει διάφορα στοιχεία σε ένα για να προσφέρει την καλύτερη και πιο ασφαλή εφαρμογή στους χρήστες μας Nano, και αυτό αντικατοπτρίστηκε στη βάση κώδικα.
Οι ροές που είχαμε στην καλύτερη περίπτωση ήταν ασαφείς, κυρίως λόγω του γεγονότος ότι ήμασταν 6 ή 7 προγραμματιστές πριν από μερικά χρόνια. Δεδομένου ότι συμμετείχαν λιγότερα μέρη, η επικοινωνία ήταν πολύ πιο εύκολη και ξεφύγαμε. Ωστόσο, υπήρχαν ορισμένα σημεία πόνου στον τρόπο που εργαζόμασταν, ειδικά σχετικά με την εμπειρία προγραμματιστή και τη διαδικασία έκδοσης.
Συμφόρηση εμπειρίας προγραμματιστή
Εξαρτήσεις
Λόγω της φύσης των έργων μας, εργαζόμαστε σε πολλαπλά αποθετήρια ταυτόχρονα, με εξαρτήσεις μεταξύ τους. Ακολουθεί μια γρήγορη επισκόπηση:
Οι βιβλιοθήκες ανοιχτού κώδικα Ledger χρησιμοποιούνται από την επιχειρηματική λογική, η οποία στη συνέχεια χρησιμοποιείται τόσο από την επιφάνεια εργασίας όσο και από τις εφαρμογές για κινητά. Αλλά αυτές οι εφαρμογές χρησιμοποιούν επίσης τις βιβλιοθήκες ανοιχτού κώδικα και χρησιμοποιούν δύο διαφορετικές εκδόσεις της ίδιας βιβλιοθήκης (όπως @ledgerhq/errors
για παράδειγμα) θα σπάσει την εφαρμογή.
Χρειαζόμασταν να προσκρούσουμε την έκδοση στη μία πλευρά, μετά να δημοσιεύσουμε τις βιβλιοθήκες (ναι, σε npm!!!) και μετά να προσπαθήσουμε ξανά αν δεν λειτούργησε. Αρχίσαμε να βασιζόμαστε yalc
σε έργα συμβολικής σύνδεσης, κάτι που ήταν ως επί το πλείστον εντάξει, εφόσον δεν είχαμε πολλά επίπεδα εξαρτήσεων (για παράδειγμα, από τις βιβλιοθήκες ανοιχτού κώδικα στην επιχειρηματική λογική και, στη συνέχεια, από τη λογική της επιχείρησης στις εφαρμογές). Προσπαθήσαμε προσωρινά να συνεργαστούμε yarn link
επίσης, αλλά φαίνεται ότι ήταν καταδικασμένο με το React Native.
Δοκιμές
Ήταν σχεδόν αδύνατο να γίνουν δοκιμές ενοποίησης με όλο τον πιο πρόσφατο κώδικα από τα διάφορα έργα. Επειδή χρειαζόταν να δημοσιεύσουμε τις βιβλιοθήκες στο μητρώο, η δοκιμή όλων των στοιχείων με τον πιο πρόσφατο ενημερωμένο κώδικα ήταν εφιάλτης
Έπρεπε επίσης να διατηρήσουμε πολλά CI με διπλή λογική.
Εναλλαγή περιβάλλοντος
Η κίνηση σε πολλούς επεξεργαστές κώδικα / έργα / καταλόγους έκανε την εμπειρία προγραμματιστή να φαίνεται πραγματικά αδύναμη.
Συμφόρηση διαδικασίας απελευθέρωσης
Έκδοση
Ο χειρισμός της έκδοσης διαφορετικών έργων είναι δύσκολος, ειδικά όταν υπάρχουν πολλά επίπεδα εξαρτήσεων.
Απελευθέρωση
Η παρακολούθηση εκδόσεων ήταν περίπλοκη λόγω του γεγονότος ότι τα έργα χωρίστηκαν και έπρεπε να διαχειριστούμε τις εκδόσεις των διαφορετικών έργων
Ήταν αδύνατο να αυτοματοποιηθεί η διαδικασία έκδοσης, και πάλι λόγω του γεγονότος ότι τα έργα χωρίστηκαν σε διαφορετικά αποθετήρια.
Και φυσικά, το Continuous Delivery ήταν αδιανόητο σε αυτό το σημείο.
Πιθανή λύση ?
Κοιτάζοντας τριγύρω για έμπνευση, φαίνεται ότι μια αρχιτεκτονική μονού αποθετηρίου είναι το κεντρικό κομμάτι που μας έλειπε. Θα επέτρεπε μια πολύ καλύτερη διαδικασία ανάπτυξης. Υπάρχουν εργαλεία χτισμένα γύρω από αυτήν την αρχιτεκτονική που θα μας βοηθήσουν να επιτύχουμε τα μέρη που λείπουν (έκδοση, αυτοματισμός, έκδοση εκδόσεων…).
Αλλά, τι είναι ένα μονοθέσιο;
Στον πυρήνα του, ένα μονοφωνικό αποθετήριο είναι ένα έργο που ενσωματώνει όλα τα άλλα σχετικά έργα (εφαρμογές, βιβλιοθήκες, εργαλεία) σε έναν φάκελο / έργο git. Επιτρέπει καλύτερη διαχείριση εξαρτήσεων, εναρμόνιση εργαλείων (όπως στυλ κώδικα και διαμορφώσεις γραφομηχανών), κεντρική συνεχή ενσωμάτωση, δοκιμή ενοποίησης, ομοιόμορφη έκδοση του χρησιμοποιημένου πακέτου (αντίδραση για παράδειγμα)…
Δεδομένου ότι είναι ένα αρκετά αγνωστικιστικό σύστημα, ορισμένα χαρακτηριστικά έμειναν για να ανακαλύψουμε και να εφαρμόσουμε. Ας ελπίσουμε ότι υπάρχουν μερικά εξαιρετικά εργαλεία κοινότητας που θα μπορούσαν να μας βοηθήσουν να προσθέσουμε ενορχήστρωση στις εκδόσεις (διαδοχικές εκδόσεις, χρήσιμες για CI), έκδοση εκδόσεων, δημιουργία καταγραφής αλλαγών.. που θα συμπλήρωναν αυτό που μας έλειπε στη διαδικασία κυκλοφορίας μας.
ΚΑΤΑ
Τα μονοφωνικά αποθετήρια έχουν νόημα σε ένα πλαίσιο όπου πολλοί προγραμματιστές ή μια ομάδα προγραμματιστών εργάζονται σε πολλά έργα ταυτόχρονα, με εξαρτήσεις μεταξύ τους. Ωστόσο, προσθέτει κάποιο επίπεδο πολυπλοκότητας κατά τη φάση της εγκατάστασης (ειδικά με ήδη δρομολογημένα έργα που έχουν ιστορία 4 ετών και ενεργή ανάπτυξη). Αξίζει να αναφέρουμε ότι το έργο γίνεται πολύ μεγαλύτερο (σαν πολύ μεγαλύτερο) όσον αφορά τον χώρο στο δίσκο. Όλα τα έργα βρίσκονται πλέον στον ίδιο φάκελο και όλες οι εξαρτήσεις. Ποιες εξετάσεις είναι υποχρεωτικές; Πότε να τα ενεργοποιήσετε;
ΥΠΕΡ
Αφού αξιολογήσαμε το χρόνο, το κόστος και τη σκοπιμότητα των φιλοδοξιών μας, παραθέτουμε μερικά από τα αναμενόμενα οφέλη αυτής της μετάβασης:
- Βελτιωμένη διαχείριση εξαρτήσεων: Με ένα monorepo, είναι πιο εύκολο να διαχειριστείτε τις εξαρτήσεις μεταξύ διαφορετικών έργων, καθώς όλα αποθηκεύονται στο ίδιο αποθετήριο. Αυτό μπορεί να μειώσει την ανάγκη για λύσεις όπως σύνδεση νήματος ή
yalc
, και διευκολύνουν τη διασφάλιση ότι όλα τα έργα χρησιμοποιούν τις σωστές εκδόσεις εξαρτήσεων. - Καλύτερη οργάνωση κώδικα: Ένα monorepo μπορεί να διευκολύνει την οργάνωση κώδικα, καθώς όλα τα έργα και οι εξαρτήσεις τους αποθηκεύονται σε ένα ενιαίο χώρο αποθήκευσης. Είναι ευκολότερο να καταλάβουμε πώς ταιριάζουν διαφορετικά έργα και πώς εξαρτώνται το ένα από το άλλο.
- Βελτιωμένη εμπειρία προγραμματιστή: Ένα monorepo μπορεί να διευκολύνει τους προγραμματιστές να εργάζονται σε πολλά έργα, καθώς δεν χρειάζεται να κάνουν εναλλαγή μεταξύ διαφορετικών βάσεων κώδικα ή αποθετηρίων. Μπορεί επίσης να διευκολύνει την εκτέλεση δοκιμών ενοποίησης, καθώς όλος ο κώδικας αποθηκεύεται στο ίδιο αποθετήριο.
- Βελτιωμένος αυτοματισμός και συνεχής παράδοση: Με ένα monorepo, είναι πιο εύκολο να αυτοματοποιήσετε εργασίες όπως η δημιουργία, η δοκιμή και η απελευθέρωση κώδικα. Αυτό μπορεί να βοηθήσει στον εξορθολογισμό της διαδικασίας απελευθέρωσης και στη διευκόλυνση της συνεχούς παράδοσης.
- Αυξημένη ταχύτητα ανάπτυξης. Δεδομένου ότι διαφορετικές ομάδες εργάζονται στο ίδιο αποθετήριο, δεν χρειάζεται να περιμένουν μέχρι την κυκλοφορία για να επαληθεύσουν το αποτέλεσμα, επιταχύνοντας την ενσωμάτωση.
Συμπέρασμα
Συνολικά, η υλοποίηση μιας δομής monorepo μπορεί να βοηθήσει στη βελτίωση της διαδικασίας ανάπτυξης, στον εξορθολογισμό της διαδικασίας έκδοσης και στη βελτίωση της εμπειρίας προγραμματιστή.
Στις επόμενες αναρτήσεις ιστολογίου αυτής της σειράς, θα σας καθοδηγήσουμε στο πώς διεξήχθη αυτό το μεγάλο έργο μετανάστευσης, τα εργαλεία που χρησιμοποιήσαμε, τις επιλογές που κάναμε, το αποτέλεσμα και πολλά άλλα. Μείνετε συντονισμένοι για το Μέρος 2: Τα εργαλεία!
Valentin DE ALMEIDA
Developer Experience & Core Tech – Ledger Live
- SEO Powered Content & PR Distribution. Ενισχύστε σήμερα.
- PlatoData.Network Vertical Generative Ai. Ενδυναμώστε τον εαυτό σας. Πρόσβαση εδώ.
- PlatoAiStream. Web3 Intelligence. Ενισχύθηκε η γνώση. Πρόσβαση εδώ.
- PlatoESG. Ανθρακας, Cleantech, Ενέργεια, Περιβάλλον, Ηλιακός, Διαχείριση των αποβλήτων. Πρόσβαση εδώ.
- PlatoHealth. Ευφυΐα βιοτεχνολογίας και κλινικών δοκιμών. Πρόσβαση εδώ.
- πηγή: https://www.ledger.com/blog/ledger-live-monorepo-project-part-1-problematics-make-it-pain
- :είναι
- :δεν
- :που
- $UP
- 1
- 20
- 2020
- 2021
- 7
- a
- επιταχύνοντας
- Κατορθώνω
- ενεργός
- προσθέτω
- διεύθυνση
- Προσθέτει
- πάλι
- πριν
- Όλα
- επιτρέπει
- κατά μήκος
- ήδη
- Επίσης
- φιλοδοξίες
- μεταξύ των
- an
- και
- app
- εφαρμογές
- εφαρμογές
- αρχιτεκτονική
- αρχιτεκτονική
- ΕΙΝΑΙ
- σηκώνομαι
- γύρω
- Τέχνη
- AS
- At
- αυτοματοποίηση
- Αυτοματοποίηση
- μακριά
- πίσω
- βασίζονται
- πριν
- πίσω
- οφέλη
- ΚΑΛΎΤΕΡΟΣ
- Καλύτερα
- μεταξύ
- μεγαλύτερος
- Κομμάτι
- Μπλοκ
- Μηνύματα Blog
- και οι δύο
- Διακοπή
- Κτίριο
- Χτίζει
- χτισμένο
- επιχείρηση
- αλλά
- by
- CAN
- κεντρικός
- κεντρική
- προκλήσεις
- changelog
- επιλογές
- κωδικός
- Βάση κώδικα
- Επικοινωνία
- κοινότητα
- πλήρης
- περίπλοκο
- περίπλοκος
- εξαρτήματα
- διενεργούνται
- συνειδητός
- συμφραζόμενα
- συνέχισε
- συνεχής
- συνεισφορές
- συνεισφέροντες
- πυρήνας
- διορθώσει
- Κόστος
- θα μπορούσε να
- Ζευγάρι
- Πορεία
- Ημερομηνία
- απόφαση
- παραδώσει
- διανομή
- εξαρτήσεις
- Εξάρτηση
- επιφάνεια εργασίας
- Παρά
- Dev
- Εργολάβος
- προγραμματιστές
- οι προγραμματιστές δουλεύουν
- Ανάπτυξη
- DID
- διαφορετικές
- δυσκολίες
- Κατάλογοι
- ανακαλύπτουν
- do
- Μην
- Καταδικασμένος
- δυο
- κατά την διάρκεια
- κάθε
- ευκολότερη
- ενεργοποιήσετε
- ενθυλακώνει
- Μηχανικοί
- ενίσχυση
- εξασφαλίζω
- ειδικά
- αξιολογώντας
- εξέλιξη
- εξελίσσονται
- παράδειγμα
- εξαιρετικός
- υφιστάμενα
- Επέκταση
- αναμένεται
- εμπειρία
- Εξηγήστε
- εξωτερικός
- γεγονός
- Χαρακτηριστικά
- Όνομα
- ταιριάζουν
- Ροές
- επικεντρώθηκε
- Εξής
- Για
- από
- γενεά
- Git
- γκολ
- πήρε
- εξαιρετική
- μεγάλωσε
- Ανάπτυξη
- κατευθυντήριων γραμμών
- είχε
- χούφτα
- Σκληρά
- Έχω
- βοήθεια
- χρήσιμο
- εδώ
- ιστορία
- Ας ελπίσουμε ότι
- Πως
- Ωστόσο
- HTTPS
- if
- εφαρμογή
- εκτέλεση
- αδύνατος
- βελτίωση
- in
- Εισερχόμενος
- Έμπνευση
- ολοκλήρωση
- σε
- συμμετέχουν
- θέματα
- IT
- ΤΟΥ
- μόλις
- Επίθετο
- Πέρυσι
- αργότερο
- στρώμα
- στρώματα
- οδηγήσει
- ΜΑΘΑΊΝΩ
- Καθολικό
- Ledger Live
- αριστερά
- μείον
- βιβλιοθήκες
- Βιβλιοθήκη
- Μου αρέσει
- LINK
- Λιστα
- λίγο
- ζω
- λογική
- Μακριά
- ματιά
- κοίταξε
- Παρτίδα
- που
- διατηρήσουν
- μεγάλες
- κάνω
- διαχείριση
- διαχείριση
- υποχρεωτικό
- τρόπος
- max-width
- μέσα
- μετανάστευση
- Λείπει
- Κινητό
- mobile-εφαρμογές
- περισσότερο
- πλέον
- ως επί το πλείστον
- κίνηση
- πολύ
- πολλαπλούς
- nano
- ντόπιος
- Φύση
- Ανάγκη
- που απαιτούνται
- ανάγκες
- Νέα
- επόμενη
- Όχι.
- τώρα
- of
- Καλά
- on
- ONE
- αποκλειστικά
- ανοίξτε
- ανοικτού κώδικα
- or
- ενορχήστρωση
- οργάνωση
- ΑΛΛΑ
- δικός μας
- επί
- επισκόπηση
- συσκευάζονται
- Πόνος
- μέρος
- μέρη
- εξαρτήματα
- People
- φάση
- κομμάτι
- Μέρος
- Πλάτων
- Πληροφορία δεδομένων Plato
- Πλάτωνα δεδομένα
- Σημείο
- σημεία
- Θέση
- Δημοσιεύσεις
- αρκετά
- διαδικασια μας
- σχέδιο
- έργα
- δημοσιεύει
- Γρήγορα
- γρήγορα
- ταχέως
- Αντίδραση
- Αντιδράστε εγγενή
- πραγματικός
- πραγματικά
- μείωση
- αντανακλάται
- μητρώου
- σχετίζεται με
- απελευθερώνουν
- Δελτία
- απελευθερώνοντας
- βασίζονται
- παρέμεινε
- Αποθήκη
- αποτέλεσμα
- τρέξιμο
- τρέξιμο
- ίδιο
- προστατευμένο περιβάλλον
- φαίνεται
- αίσθηση
- Σειρές
- σειρά
- setup
- διάφοροι
- πλευρά
- σημαντικός
- αφού
- ενιαίας
- λύση
- μερικοί
- Πηγή
- Χώρος
- ταχύτητα
- διαίρεση
- ξεκίνησε
- παραμονή
- Βήμα
- Ακόμη
- αποθηκεύονται
- εξορθολογισμό
- δομή
- διακόπτης
- σύστημα
- Ταλέντο
- συνομιλίες
- εργασίες
- ομάδες
- tech
- όροι
- Δοκιμές
- δοκιμές
- ότι
- Η
- τους
- Τους
- τότε
- Εκεί.
- Αυτοί
- αυτοί
- αυτό
- εκείνοι
- Μέσω
- ώρα
- προς την
- μαζι
- πήρε
- εργαλεία
- Παρακολούθηση
- μετάβαση
- Προσπάθησα
- ενεργοποιούν
- προσπαθώ
- δύο
- Typescript
- υπό
- καταλαβαίνω
- ενιαία
- αδιανόητος
- μέχρι
- us
- χρήση
- μεταχειρισμένος
- Χρήστες
- χρησιμοποιώντας
- διάφορα
- επαληθεύει
- εκδοχή
- εκδόσεις
- περιμένετε
- walk
- ήταν
- Τρόπος..
- we
- ΛΟΙΠΌΝ
- ήταν
- Τι
- Τι είναι
- πότε
- Ποιό
- WHY
- θα
- με
- Εργασία
- εργαζόμενος
- αξία
- θα
- έτος
- χρόνια
- Ναί
- Εσείς
- zephyrnet