Riassunto articolo the majestic monolith
Il testo discute due principali modelli architetturali per lo sviluppo software: Microservices/Service-Oriented Architecture (M/SOA) e Majestic Monolith.
Pattern e contesto
- Esistono pattern focalizzati sul codice e altri che riguardano il modo in cui il codice viene scritto all’interno di un’organizzazione.
- L’architettura a microservizi (M/SOA) è adatta per aziende enormi come Amazon o Google, permettendo lo sviluppo parallelo con team separati che lavorano su servizi autonomi.
- Tuttavia, molte aziende più piccole adottano i microservizi senza reali necessità, finendo per complicarsi la vita inutilmente.
Il problema della distribuzione prematura
- La distribuzione del codice su più servizi introduce complessità inutili quando non è strettamente necessaria.
- Gestire più servizi significa affrontare problemi di downtime, sincronizzazione e costi di manutenzione elevati.
La soluzione: Il Majestic Monolith
- Un monolite ben progettato integra più funzioni in un unico sistema senza suddivisioni forzate.
- Riduce la complessità, elimina astrazioni inutili e facilita lo sviluppo per team piccoli.
- Basecamp ne è un esempio: una grande applicazione gestita con un piccolo team (12 programmatori e 7 designer), sviluppata per più piattaforme senza suddivisione in microservizi.
I vantaggi del Majestic Monolith
- Maggiore comprensibilità del codice: Ogni sviluppatore ha una visione chiara del sistema.
- Efficienza: Evita il costo di gestione e comunicazione tra microservizi.
- Scalabilità interna: Non tutti i sistemi devono essere distribuiti per scalare.
- Codebase più pulita e manutenibile.
Filosofia del design
- Il codice deve essere bello, comprensibile e conciso.
- Un monolite ben scritto permette agli sviluppatori di migliorarsi, mentre un’architettura frammentata può portare a un codice caotico.
Albero dei Concetti
📌 Pattern Software
├── 🔹 Code-centric patterns (migliorano il codice)
├── 🔹 Organization-centric patterns (modelli organizzativi)
│
📌 Microservices/Service-Oriented Architecture (M/SOA)
├── ✅ Pro:
│ ├── Scalabilità per grandi aziende
│ ├── Team indipendenti, sviluppo parallelo
│ ├── Evoluzione separata dei servizi
│
├── ❌ Contro:
│ ├── Complessità nella gestione dei servizi
│ ├── Sincronizzazione e downtime problematici
│ ├── Necessita di risorse e team numerosi
│
📌 Majestic Monolith
├── 🎯 Principi:
│ ├── Sistema integrato senza microservizi inutili
│ ├── Minimo livello di astrazione
│ ├── Codebase leggibile e manutenibile
│
├── ✅ Pro:
│ ├── Maggiore semplicità per team piccoli
│ ├── Minor costo di gestione
│ ├── Facilità di comprensione e modifica del codice
│ ├── Manutenzione più efficace
│
├── 🚀 Caso di studio: **Basecamp**
│ ├── Team di 12 sviluppatori e 7 designer
│ ├── Applicazione monolitica su 6 piattaforme (Web, iOS, Android, Mac, Windows, Email)
│ ├── 200 controller, 900 metodi, 190 classi
│
📌 Conclusione
├── Non copiare i pattern delle big tech se non sei una big tech
├── Se hai un team piccolo, un monolite ben progettato è la soluzione migliore
├── Scrivi codice chiaro, leggibile e manutenibile
Messaggio finale
💡 Se hai un team piccolo e un prodotto che non richiede distribuzione massiva, dimentica i microservizi e rendi il tuo monolite maestoso! 🚀