Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Suggerimento
Questo contenuto è un estratto dell'eBook, Architettura di microservizi .NET per applicazioni .NET containerizzati, disponibile in documentazione .NET o come PDF scaricabile gratuitamente leggibile offline.
Come suggerisce il nome, un'architettura di microservizi è un approccio alla creazione di un'applicazione server come set di servizi di piccole dimensioni. Ciò significa che un'architettura di microservizi è principalmente orientata al back-end, anche se l'approccio viene usato anche per il front-end. Ogni servizio viene eseguito nel proprio processo e comunica con altri processi usando protocolli come HTTP/HTTPS, WebSocket o AMQP. Ogni microservizio implementa una specifica funzionalità di dominio o business end-to-end all'interno di un determinato limite di contesto e ognuna deve essere sviluppata in modo autonomo e distribuibile in modo indipendente. Infine, ogni microservizio deve possedere il proprio modello di dati di dominio correlato e la logica di dominio (sovranità e gestione decentralizzata dei dati) e potrebbe essere basato su tecnologie di archiviazione dei dati diverse (SQL, NoSQL) e diversi linguaggi di programmazione.
Quali dimensioni devono essere un microservizio? Quando si sviluppa un microservizio, le dimensioni non devono essere il punto importante. Al contrario, il punto importante deve essere quello di creare servizi ad accoppiamento libero, in modo da avere autonomia di sviluppo, distribuzione e scalabilità, per ogni servizio. Naturalmente, quando si identificano e progettano microservizi, è consigliabile provare a renderli il più piccoli possibile, purché non si disponga di troppe dipendenze dirette con altri microservizi. Più importante delle dimensioni del microservizio è la coesione interna che deve avere e la sua indipendenza da altri servizi.
Perché un'architettura di microservizi? In breve, offre agilità a lungo termine. I microservizi consentono una migliore manutenibilità in sistemi complessi, di grandi dimensioni e altamente scalabili, consentendo di creare applicazioni basate su molti servizi distribuibili indipendentemente con cicli di vita granulari e autonomi.
Come vantaggio aggiuntivo, i microservizi possono aumentare in modo indipendente. Invece di avere una singola applicazione monolitica che devi scalare come un'unità, puoi scalare singolarmente specifici microservizi. In questo modo, è possibile ridimensionare solo l'area funzionale che richiede una maggiore potenza di elaborazione o larghezza di banda di rete per supportare la domanda, anziché scalare altre aree dell'applicazione che non necessitano di essere scalate. Ne consegue quindi una riduzione dei componenti hardware necessari e, pertanto, un considerevole risparmio economico.
Figura 4-6. Distribuzione monolitica rispetto all'approccio ai microservizi
Come illustrato nella figura 4-6, nell'approccio monolitico tradizionale l'applicazione viene ridimensionata clonando l'intera app in più server/vm. Nell'approccio ai microservizi, la funzionalità è separata in servizi più piccoli, in modo che ogni servizio possa essere ridimensionato in modo indipendente. L'approccio ai microservizi consente modifiche agili e iterazione rapida di ogni microservizio, perché è possibile modificare specifiche, piccole aree di applicazioni complesse, di grandi dimensioni e scalabili.
La progettazione di applicazioni basate su microservizi con granularità fine consente processi di integrazione continua e recapito continuo. Accelera inoltre la distribuzione di nuove funzioni nell'applicazione. La composizione con granularità fine delle applicazioni consente anche di eseguire e testare i microservizi in isolamento e di evolverli in modo autonomo mantenendo al contempo contratti chiari tra di essi. A condizione che non vengano apportate modifiche alle interfacce o ai contratti, è possibile modificare l'implementazione interna di qualsiasi microservizio o aggiungere nuove funzionalità senza interrompere gli altri microservizi.
Di seguito sono riportati alcuni aspetti importanti per consentire il successo nell'ambiente di produzione con un sistema basato su microservizi:
Monitoraggio e controllo dell'integrità dei servizi e dell'infrastruttura.
Infrastruttura scalabile per i servizi, ovvero cloud e agenti di orchestrazione.
Progettazione e implementazione della sicurezza a più livelli: autenticazione, autorizzazione, gestione dei segreti, comunicazione sicura e così via.
Distribuzione rapida delle applicazioni, in genere con team diversi incentrati su microservizi diversi.
Pratiche e infrastruttura DevOps e CI/CD.
Di questi, solo i primi tre sono trattati o introdotti in questa guida. Gli ultimi due punti, che sono correlati al ciclo di vita dell'applicazione, sono trattati nell'e-book aggiuntivo Ciclo di vita delle applicazioni Docker containerizzate con la piattaforma e gli strumenti Microsoft.
Risorse aggiuntive
Mark Russinovich. Microservizi: una rivoluzione delle applicazioni basata sul cloud
https://azure.microsoft.com/blog/microservices-an-application-revolution-powered-by-the-cloud/Martin Fowler. Microservizi
https://www.martinfowler.com/articles/microservices.htmlMartin Fowler. Prerequisiti per i microservizi
https://martinfowler.com/bliki/MicroservicePrerequisites.htmlJimmy Nilsson. Segmento di cloud computing
https://www.infoq.com/articles/CCC-Jimmy-NilssonCesare de la Torre. Ciclo di vita delle applicazioni Docker in contenitori con piattaforma e strumenti Microsoft (e-book scaricabile)
https://aka.ms/dockerlifecycleebook