Ρίχνοντας φως στις στρατηγικές αποθετηρίου κώδικα

Το Mono-repo και το Multi-repo είναι δύο κύριες στρατηγικές για τη φιλοξενία και τη διαχείριση κώδικα μέσω του Git. Συζητάμε λεπτομερώς τόσο τις στρατηγικές όσο και τα πλεονεκτήματα και τα μειονεκτήματά τους.

Εισαγωγή

Τα περισσότερα από τα σύγχρονα έργα διαχειρίζονται και φιλοξενούνται στο Git. Το Git έχει γίνει η τυπική πλατφόρμα για διαχείριση κατανεμημένου πηγαίου κώδικα, έλεγχο έκδοσης και συνεργασία από οπουδήποτε στον κόσμο. Το Git είναι γρήγορο και αποτελεσματικό. Υπάρχουν δύο κύριες προσεγγίσεις για τη φιλοξενία και τη διαχείριση του κώδικα Git σας:

Πριν εμβαθύνουμε σε αυτές τις προσεγγίσεις, ας καταλάβουμε πώς λειτουργεί το repo.

Τι είναι τα Repos;

Ένα αποθετήριο (Repo) περιέχει όλους τους φακέλους και τα αρχεία του έργου σας. Περιέχει επίσης πληροφορίες για χρήστες, άτομα και υπολογιστές.

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

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

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

Επιπλέον, εάν ο προγραμματιστής θέλει να μοιραστεί τις αλλαγές που έγιναν τοπικά, μπορεί να στείλει ένα “αίτημα έλξης” στον κάτοχο του έργου.

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

  9 Επιλογές οπίσθιου φωτισμού τηλεόρασης για να αλλάξετε την εμπειρία παρακολούθησης ταινίας και προβολής

Μόλις δημιουργήσετε αυτές τις λειτουργίες-ως-υπηρεσίες και τις αναπτύξετε, το επόμενο βήμα είναι η δομή και ο έλεγχος της έκδοσης – μπορείτε να έχετε όλες τις υπηρεσίες σας σε ένα αποθετήριο (μονο-ρεπο) – ή να έχετε ξεχωριστό αποθετήριο για κάθε υπηρεσία που έχετε ( multi-repo)!

Τι είναι ένα Mono-repo;

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

Εταιρείες όπως το Facebook, η Google και το Dropbox χρησιμοποιούν mono-repo.

Πλεονεκτήματα του Mono-repo

Η προσέγγιση mono-repo έχει πολλά πλεονεκτήματα:

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

Μειονεκτήματα του Mono-repo

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

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

  Μπορείτε να λάβετε μια δωρεάν αλλαγή ετικετών παιχνιδιού;

Επιπλέον, είναι δύσκολο να εφαρμοστούν οι συνεχείς αναπτύξεις (CD), επειδή πολλά άτομα μπορούν να ελέγξουν τις αλλαγές τους και το σύστημά σας Συνεχούς ενοποίησης (CI) μπορεί να χρειαστεί να κάνει πολλές ανακατασκευές.

Οι μεγάλες εταιρείες που χρησιμοποιούν mono-repos διαθέτουν προσαρμοσμένα εργαλεία για να χειρίζονται τα ζητήματα κλιμάκωσης. Για παράδειγμα, το Facebook χρησιμοποιεί προσαρμοσμένο σύστημα αρχείων και έλεγχο πηγής.

Τι είναι ένα Multi-repo;

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

Εταιρείες όπως το Netflix και η Amazon χρησιμοποιούν multi-repos.

Πλεονεκτήματα του Multi-repo

Ο αριθμός των εταιρειών που υιοθετούν multi-repo είναι πολύ μεγαλύτερος από αυτούς που κάνουν mono-repo, για τους ακόλουθους λόγους:

  • Κάθε υπηρεσία και βιβλιοθήκη έχει τη δική της έκδοση
  • Τα check-out και τα τραβήγματα κώδικα είναι μικρά και ξεχωριστά, επομένως δεν υπάρχουν προβλήματα απόδοσης ακόμα και αν το μέγεθος του έργου αυξάνεται
  • Οι ομάδες μπορούν να εργαστούν ανεξάρτητα και δεν χρειάζεται να έχουν πρόσβαση σε ολόκληρη τη βάση κωδικών
  • Ταχύτερη ανάπτυξη και ευελιξία
  • Κάθε υπηρεσία μπορεί να κυκλοφορήσει ξεχωριστά και να έχει τον δικό της κύκλο ανάπτυξης, καθιστώντας έτσι το CI και το CD ευκολότερο στην εφαρμογή
  • Καλύτερος έλεγχος πρόσβασης – όλες οι ομάδες δεν χρειάζεται να έχουν πλήρη πρόσβαση σε όλες τις βιβλιοθήκες – αλλά μπορούν να λάβουν πρόσβαση ανάγνωσης, εάν χρειάζονται

Μειονεκτήματα του Multi-repo

  • Οι εξαρτήσεις και οι βιβλιοθήκες που χρησιμοποιούνται σε υπηρεσίες και έργα πρέπει να συγχρονίζονται τακτικά για να λαμβάνετε την πιο πρόσφατη έκδοση
  • Ενθαρρύνει μια αποσιωπημένη κουλτούρα σε κάποιο σημείο, οδηγώντας σε διπλό κώδικα και μεμονωμένες ομάδες προσπαθούν να επιλύσουν το ίδιο πρόβλημα
  • Κάθε ομάδα μπορεί να ακολουθήσει ένα διαφορετικό σύνολο βέλτιστων πρακτικών για τον κώδικά της, προκαλώντας δυσκολίες στην παρακολούθηση κοινών βέλτιστων πρακτικών
  The Web3 Stack: Αναφορά για προγραμματιστές

Διαφορές μεταξύ Mono και Multi Repo

Ας ανακεφαλαιώσουμε τις διαφορές μεταξύ mono-repo και multi-repo:

Mono-repo
Multi-repo
Όλος ο κώδικας όλων των έργων ενός οργανισμού βρίσκεται σε ένα κεντρικό αποθετήριο
Κάθε υπηρεσία και έργο έχει ξεχωριστό αποθετήριο
Οι ομάδες μπορούν να συνεργάζονται και να συνεργάζονται. μπορούν να δουν ο ένας τις αλλαγές του άλλου
Οι ομάδες μπορούν να λειτουργούν αυτόνομα. μεμονωμένες αλλαγές δεν επηρεάζουν τις αλλαγές από άλλες ομάδες ή έργα
Κάθε άτομο έχει πρόσβαση σε ολόκληρη τη δομή του έργου
Οι διαχειριστές μπορούν να περιορίσουν τον έλεγχο πρόσβασης στο έργο ή την υπηρεσία στην οποία χρειάζεται πρόσβαση ο προγραμματιστής
Προβλήματα κλιμάκωσης μπορεί να προκύψουν εάν το μέγεθος του έργου συνεχίζει να αυξάνεται
Καλή απόδοση, λόγω του περιορισμένου κωδικού και των μικρότερων μονάδων εξυπηρέτησης
Δύσκολη η εφαρμογή της Συνεχούς Ανάπτυξης (CD) και της Συνεχούς Ενοποίησης (CI)
Οι προγραμματιστές μπορούν εύκολα να επιτύχουν CD και CI επειδή μπορούν να δημιουργήσουν υπηρεσίες ανεξάρτητα
Οι προγραμματιστές μπορούν εύκολα να μοιράζονται βιβλιοθήκες, API και άλλο κοινό κώδικα καθώς ενημερώνονται στο κεντρικό αποθετήριο
Οποιεσδήποτε αλλαγές σε βιβλιοθήκες και άλλο κοινό κώδικα θα πρέπει να συγχρονίζονται περιοδικά για να αποφευχθούν προβλήματα αργότερα

συμπέρασμα

Τόσο το mono-repo όσο και το multi-repo είναι εξίσου δημοφιλείς και ποιο είναι καλύτερο εξαρτάται από το μέγεθος του έργου σας, τις απαιτήσεις του έργου και το επίπεδο έκδοσης και ελέγχου πρόσβασης που χρειάζεστε.

Το mono-repo ευνοεί τη συνέπεια, ενώ το multi-repo εστιάζει στην αποσύνδεση. Ενώ σε ένα mono-repo, ολόκληρη η ομάδα μπορεί να δει τις αλλαγές που γίνονται από ένα άτομο, το multi-repo δημιουργεί ένα ξεχωριστό repo για κάθε ομάδα, η οποία έχει πρόσβαση μόνο στις απαιτούμενες υπηρεσίες. Εάν θέλετε να χρησιμοποιήσετε έναν συνδυασμό μονο-ρεπο και πολυρεπο για τα έργα σας, μπορείτε να το κάνετε μεταένα εργαλείο για τη διαχείριση πολλών έργων και βιβλιοθηκών.

Μπορεί επίσης να σας ενδιαφέρουν οι Δωρεάν πόροι για να μάθετε το Git.