Cos'è un Monorepo?

Apr 09 2023
Il modello architettonico dei microservizi domina lo sviluppo del software moderno. Ha sicuramente una serie di vantaggi.

Il modello architettonico dei microservizi domina lo sviluppo del software moderno. Ha sicuramente una serie di vantaggi.

Nel contesto dell'architettura dei microservizi, "polyrepo" si riferisce alla pratica di utilizzare più repository di controllo della versione separati per ogni singolo microservizio.

Sebbene l'utilizzo di un approccio polyrepo nello sviluppo di microservizi possa offrire alcuni vantaggi, come l'accoppiamento libero e cicli di rilascio indipendenti per i singoli microservizi, presenta anche potenziali svantaggi, che possono includere:

Complessità nella gestione delle dipendenze : poiché ogni microservizio dispone del proprio repository, la gestione delle dipendenze tra i microservizi può diventare più impegnativa. Le modifiche in un microservizio possono richiedere aggiornamenti in più altri microservizi, portando a maggiori sforzi di coordinamento e potenziali conflitti di versione.

Overhead nella gestione di più repository : la gestione di più repository può richiedere strumenti, processi e overhead aggiuntivi per attività come branching, unione e gestione delle versioni di rilascio. Può anche comportare un aumento del carico amministrativo, come la gestione dei controlli di accesso e delle autorizzazioni per più repository.

Duplicazione e incoerenza del codice : i microservizi sono spesso progettati per essere altamente disaccoppiati e indipendenti, ma potrebbero esserci ancora codice, librerie o configurazioni condivisi tra i microservizi. Con un approccio polyrepo, potrebbe esserci il rischio di duplicazione o incoerenza del codice, poiché ogni microservizio può implementare e mantenere in modo indipendente funzionalità simili.

Mancanza di visibilità e tracciabilità tra repository : in un approccio polyrepo, potrebbe essere più difficile avere una visione unificata dell'intero sistema e tenere traccia delle modifiche tra i microservizi. Ciò può rendere difficile tracciare e comprendere l'impatto delle modifiche sul sistema nel suo complesso e può ostacolare la visibilità dello stato generale del sistema.

Potenziale sovraccarico nei processi di compilazione e distribuzione : la gestione dei processi di compilazione, test e distribuzione su più repository può richiedere sforzi e strumenti aggiuntivi, rispetto a un approccio monorepo in cui tutto il codice è archiviato in un singolo repository. Ciò può aumentare la complessità e il tempo necessario per la gestione dei processi di compilazione e rilascio.

Monorepo cerca di risolvere questi problemi memorizzando tutto il codice sorgente per più progetti o applicazioni in un unico repository di controllo della versione. Esistono un paio di strumenti per utilizzare la pratica monorepo nello sviluppo del software. Bazel di Google e Buck di Meta sono popolari tra tutti questi.

Ecco un esempio di come è possibile configurare un monorepo utilizzando Bazel per un'applicazione di e-commerce con un server Web Python per il sistema degli ordini e un server Golang per il sistema di pagamento :

Struttura della directory : crea una directory principale per il tuo monorepo e, al suo interno, crea directory per i tuoi componenti di back-end, inclusi il sistema di ordini e il sistema di pagamento.

e-commerce-monorepo/
  ├── order/
  │   ├── BUILD
  │   ├── src/
  │   └── ...
  ├── payment/
  │   ├── BUILD
  │   ├── src/
  │   └── ...
  └── ...

py_binary(
    name = "order_server",
    srcs = glob(["src/*.py"]),
    deps = [],  # Define dependencies as needed
)

go_binary(
    name = "payment_server",
    srcs = glob(["src/*.go"]),
    deps = [],  # Define dependencies as needed
)

bazel build //order:order_server

bazel build //payment:payment_server

Buon apprendimento!!!