Architecture Decision Record

Active theme: Light

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

Monorepo ή multirepo

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

Περίληψη

Ζήτημα

Το έργο μας περιλαμβάνει την ανάπτυξη τριών κύριων κατηγοριών λογισμικού:

  • Γραφικές διεπαφές front-end
  • Υπηρεσίες ενδιάμεσου λογισμικού (middleware)
  • Διακομιστές back-end

Όταν αναπτύσσουμε, το σύστημα ελέγχου εκδόσεων (VCS) για τη διαχείριση πηγαίου κώδικα (SCM) είναι το git.

Πρέπει να επιλέξουμε πώς χρησιμοποιούμε το git για να οργανώσουμε τον κώδικά μας.

Η επιλογή ανώτατου επιπέδου είναι η οργάνωση ως «monorepo» ή «polyrepo» ή «υβριδικό»:

  • Monorepo σημαίνει ότι βάζουμε όλα τα κομμάτια σε ένα μεγάλο αποθετήριο
  • Polyrepo σημαίνει ότι βάζουμε κάθε κομμάτι στο δικό του αποθετήριο
  • Υβριδικό σημαίνει κάποιον συνδυασμό monorepo και polyrepo

Για περισσότερα δείτε https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Απόφαση

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

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

Κατάσταση

Αποφασίστηκε. Είμαστε ανοικτοί σε επανεξέταση αν/όταν γίνουν διαθέσιμα νέα εργαλεία για τη διαχείριση monorepo ή/και polyrepo.

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

Παραδοχές

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

Περιορισμοί

Οι περιορισμοί είναι καλά τεκμηριωμένοι στο https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Θέσεις

Εξετάσαμε monorepo στο στυλ της Google, του Facebook κ.λπ. Πιστεύουμε ότι τυχόν προβλήματα κλιμάκωσης του monorepo βρίσκονται τόσο μακριά στο μέλλον που, όταν τα χρειαστούμε, θα μπορέσουμε να αξιοποιήσουμε τις ίδιες πρακτικές με την Google και το Facebook.

Εξετάσαμε polyrepo στο στυλ τυπικών έργων ανοικτού κώδικα στο Git, όπως το Google Android, το Facebook React κ.λπ. Πιστεύουμε ότι αυτά είναι η καλύτερη επιλογή για συμμετοχή του ευρέος κοινού (π.χ. οποιοσδήποτε στον κόσμο μπορεί να δουλέψει στον κώδικα) και ατομική διαθεσιμότητα (π.χ. το έργο χρησιμοποιείται αυτοτελώς, χωρίς άλλα κομμάτια).

Επιχείρημα

Όταν ένας οργανισμός/μια ομάδα/ένα έργο είναι σχετικά μικρός/μικρή/μικρό, επιλέγουμε monorepo, επειδή η ταχεία επανάληψη έχει σημαντικά υψηλότερη προτεραιότητα από τη διατήρηση της σταθερότητας

Όταν ένας οργανισμός/μια ομάδα/ένα έργο είναι σχετικά μεγάλος/μεγάλη/μεγάλο, επιλέγουμε polyrepo, επειδή η διατήρηση της σταθερότητας έχει σημαντικά υψηλότερη προτεραιότητα από την ταχεία επανάληψη.

Επιπτώσεις

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

Το CI+CD θα μπορούσε να χρειάζεται περισσότερο χρόνο για πλήρες build ενός monorepo, επειδή το CI+CD θα μπορούσε να χτίζει όλα τα έργα του monorepo.

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

Τα προβλήματα κλιμάκωσης του monorepo μπορεί να καταστήσουν όλο και πιο πολύτιμη τη μετάβαση σε polyrepo.

Η μετάβαση από monorepo σε polyrepo είναι σημαντική εργασία devops και θα πρέπει να σχεδιαστεί, να διαχειριστεί και να προγραμματιστεί.

Σχετικά

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

Θα δημιουργήσουμε αποφάσεις για σχετικά εργαλεία διαχείρισης monorepo (π.χ. Google Bazel) και polyrepo (π.χ. Lyft Refactorator).

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

Πρέπει να αναπτύξουμε τη ροή CI+CD ώστε να λειτουργεί καλά με το git.

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

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

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

Εύκολα αναστρέψιμο. Αν το monorepo δεν λειτουργήσει στην πράξη ή δεν το θέλει η ηγεσία, είναι απλό να αλλάξουμε σε polyrepo.

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

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

Σημειώσεις

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