Parliamo di aspetti positivi e negativi dell'approccio microservizio.
Primi negativi. Quando si creano microservizi, si aggiunge complessità intrinseca al codice. Stai aggiungendo spese generali. Stai rendendo più difficile replicare l'ambiente (ad esempio per gli sviluppatori). Stai rendendo più difficile il debug di problemi intermittenti.
Permettetemi di illustrare un vero aspetto negativo. Prendi in considerazione ipoteticamente il caso in cui hai chiamato 100 microservizi durante la generazione di una pagina, ognuno dei quali fa la cosa giusta il 99,9% delle volte. Ma lo 0,05% delle volte produce risultati errati. E lo 0,05% delle volte c'è una richiesta di connessione lenta in cui, per esempio, è necessario un timeout TCP / IP per connettersi e che richiede 5 secondi. Circa il 90,5% delle volte la tua richiesta funziona perfettamente. Ma circa il 5% delle volte hai risultati errati e circa il 5% delle volte la tua pagina è lenta. E ogni fallimento non riproducibile ha una causa diversa.
A meno che non si pensi molto agli strumenti per il monitoraggio, la riproduzione e così via, questo si trasformerà in un casino. Soprattutto quando un microservizio chiama un altro che ne chiama un altro a pochi strati di profondità. E una volta che hai problemi, peggiorerà nel tempo.
OK, sembra un incubo (e più di una società ha creato enormi problemi per se stessa andando su questa strada). Il successo è possibile solo se si è chiaramente consapevoli del potenziale svantaggio e si lavora costantemente per affrontarlo.
E che dire di questo approccio monolitico?
Si scopre che un'applicazione monolitica è altrettanto semplice da modulare quanto i microservizi. E una chiamata di funzione è più economica e più affidabile in pratica di una chiamata RPC. Quindi puoi sviluppare la stessa cosa tranne che è più affidabile, funziona più velocemente e comporta meno codice.
OK, allora perché le aziende adottano l'approccio dei microservizi?
La risposta è perché quando si scala, c'è un limite a ciò che si può fare con un'applicazione monolitica. Dopo così tanti utenti, così tante richieste e così via, si raggiunge un punto in cui i database non si ridimensionano, i server web non possono mantenere il codice in memoria e così via. Inoltre, gli approcci di microservizio consentono aggiornamenti indipendenti e incrementali dell'applicazione. Pertanto un'architettura di microservizi è una soluzione per ridimensionare l'applicazione.
La mia regola personale è che passare dal codice in un linguaggio di scripting (ad esempio Python) al C ++ ottimizzato in generale può migliorare 1-2 ordini di grandezza sia sulle prestazioni che sull'utilizzo della memoria. Passare dall'altra parte a un'architettura distribuita aggiunge una grandezza ai requisiti delle risorse ma consente di ridimensionare indefinitamente. È possibile far funzionare un'architettura distribuita, ma farlo è più difficile.
Pertanto, direi che se stai avviando un progetto personale, diventa monolitico. Scopri come farlo bene. Non essere distribuito perché (Google | eBay | Amazon | ecc.) Lo sono. Se atterri in una grande azienda che è distribuita, presta molta attenzione a come la fanno funzionare e non rovinarla. E se finisci per fare la transizione, stai molto, molto attento perché stai facendo qualcosa di difficile che è molto facile sbagliare.
Divulgazione, ho quasi 20 anni di esperienza in aziende di tutte le dimensioni. E sì, ho visto architetture monolitiche e distribuite da vicino e personali. È basato su quell'esperienza che ti sto dicendo che un'architettura a microservizi distribuiti è davvero qualcosa che fai perché è necessario e non perché è in qualche modo più pulita e migliore.