I microservizi devono essere scalabili e focalizzati su una singola responsabilità. Ogni unità modulare autonoma gestisce una funzione specifica all'interno di un sistema più ampio. Un'applicazione di grandi dimensioni viene costruita da componenti modulari o da servizi come i container o il serverless computing.
Pensate a un microservizio come a un'azienda che comprende diversi reparti, budget e requisiti. Ogni anno, questi requisiti cambiano in base alle esigenze dell'azienda. Anche la vostra applicazione non avrà lo stesso livello di richiesta nel tempo. Ci potrebbero essere alcuni aspetti che richiedono una maggiore richiesta e altri a cui dovrete prestare maggiore attenzione. Inoltre, all'interno dell'applicazione dovranno essere previsti diversi livelli di scalabilità. I microservizi consentono di scalare e crescere in diverse aree senza influenzare le altre. E scalano in modo indipendente.
Tutti ricordiamo il principio della responsabilità unica nella programmazione. I microservizi non sono diversi. Devono fare una sola cosa e farla bene. Si ottiene anche il vantaggio intrinseco di una migliore resilienza e tolleranza ai guasti. L'architettura a microservizi mira a prevenire i guasti a livello di sistema facendo oscillare i guasti sui singoli servizi. Se c'è un guasto particolare, sappiamo dove si trova e possiamo risolverlo senza impattare su nient'altro.
C'è anche un aspetto di scoperta. Utilizzando una soluzione di service networking come Consul di HashiCorp, saprete quando nuovi servizi vengono messi online e avrete un sistema centralizzato che diventa una directory di servizi che definisce cosa fanno e come comunicare con loro.
Perché considerare i microservizi
- Time-to-market più rapido: I microservizi consentono lo sviluppo e la distribuzione paralleli dei singoli componenti, accelerando il processo di sviluppo complessivo e riducendo il tempo necessario per fornire nuove funzionalità.
- Scalabilità migliorata: I microservizi possono essere scalati in modo indipendente, consentendo alle aziende di allocare le risorse in modo più efficiente e di gestire in modo più efficace carichi di lavoro o modelli di traffico variabili.
- Maggiore resilienza: La natura decentralizzata dei microservizi riduce il rischio di guasti a livello di sistema, garantendo la disponibilità continua del servizio e una migliore affidabilità complessiva del sistema.
- Flessibilità e adattabilità: I microservizi consentono alle aziende di sfruttare tecnologie e framework diversi per i vari componenti, rendendo più facile l'adattamento a requisiti mutevoli o l'incorporazione di nuove tecnologie.
- Manutenzione e aggiornamenti più semplici: Il design modulare dei microservizi semplifica la manutenzione e gli aggiornamenti del sistema, in quanto i singoli componenti possono essere aggiornati o sostituiti senza influenzare l'intero sistema.
Migliori pratiche per i microservizi
È essenziale che i microservizi siano piccoli, focalizzati e responsabili di una singola funzionalità aziendale. Questo approccio consente di aggiungere ulteriori funzionalità e di evitare lo sprawl. Tuttavia, non esiste una regola fissa per quanto riguarda la dimensione ideale, poiché essa varia a seconda dell'applicazione specifica e dei suoi requisiti.
Bisogna anche assicurarsi di progettare per i guasti. Sebbene la tolleranza ai guasti sia intrinseca all'esecuzione di più servizi e microservizi, la progettazione aggiunge ulteriori elementi di resilienza, come meccanismi di riprova, interruttori e paratie. Pensate al motivo per cui le navi hanno le paratie. Le hanno per l'integrità strutturale, ma le hanno anche se c'è un problema, la paratia viene chiusa e la nave non affonda. Molte architetture basate sugli eventi utilizzano quelle che vengono definite code "lettera morta". Se un messaggio non può essere consegnato, va in una coda particolare dove può essere ispezionato per determinare il motivo del fallimento.
I microservizi devono essere progettati in base ai principi della progettazione orientata al dominio, ossia modellando i servizi in base alle capacità aziendali e utilizzando un linguaggio comune per garantire l'allineamento dei servizi alle esigenze aziendali. La progettazione orientata al dominio si concentra sulla creazione di sistemi software basati su una profonda comprensione del dominio aziendale. I suoi principi aiutano a guidare il processo di progettazione e a garantire che il software sia in linea con il dominio e fornisca valore all'azienda. Questi principi promuovono collettivamente una profonda comprensione del dominio aziendale e contribuiscono a garantire che lo sviluppo rimanga strettamente allineato alle esigenze aziendali e ai requisiti in evoluzione.
Progettare con un API-approccio "first" e implementare API gateway, che forniscono punti di connessione centrali per facilitare la comunicazione tra microservizi e sottosistemi di terze parti. API I gateway gestiscono gran parte dell'instradamento, occupandosi di autorizzazione, autenticazione e limitazione della velocità. Un modello di progettazione delle API è essenziale per la modularità e la riusabilità dei microservizi.
Ecco alcune altre best practice per i microservizi:
- Automatizzare i test e la distribuzione: Testate e distribuite i microservizi utilizzando strumenti di automazione come le pipeline di integrazione e distribuzione continua(CI/CD), che riducono il rischio di errori assicurando che i servizi vengano distribuiti in modo rapido e coerente.
- Utilizzare la containerizzazione: La containerizzazione offre un modo leggero e portatile per confezionare e distribuire i microservizi. L'uso della containerizzazione può aiutare a semplificare il processo di distribuzione e a migliorare la scalabilità e la portabilità dell'applicazione.
- Monitorare e osservare: I microservizi devono essere monitorati e registrati per garantire che funzionino come previsto e per identificare eventuali problemi o errori. Gli aggregatori di log e gli strumenti di monitoraggio delle prestazioni delle applicazioni (APM) possono svolgere questo compito. Il tracciamento fornisce informazioni sul flusso di dati attraverso un sistema distribuito. Questi tre pilastri contribuiscono a fornire una visibilità end-to-end sulle prestazioni.
- Servizi sicuri: I microservizi devono essere protetti utilizzando le migliori pratiche come l'autenticazione, l'autorizzazione e la crittografia, senza dimenticare la sicurezza dei container! Le politiche dovrebbero imporre quali microservizi possono parlare con altri per ridurre la superficie di attacco complessiva. La sicurezza dovrebbe essere parte integrante di qualsiasi progetto e controllata in tutte le fasi di sviluppo, per ottenere un'applicazione molto più sicura e proteggere i dati sensibili.
Commenti