banner
Casa / Blog / Non creare microservizi, perseguire l'accoppiamento sciolto
Blog

Non creare microservizi, perseguire l'accoppiamento sciolto

Sep 01, 2023Sep 01, 2023

Da: Chris Bertinato il 29 agosto 2023

Dato che la domanda di prestazioni applicative affidabili è in continua crescita, non sorprende che molte aziende costruiscano i propri sistemi pensando all'espansione futura. Molti esperti del settore hanno indicato i microservizi come il modo migliore per rendere un sistema a prova di futuro, ma potrebbe essere meglio usare invece il termine “servizi della giusta dimensione”, poiché non esiste un’unica strategia che funzioni per ogni azienda in ogni momento. . Piuttosto che pensare a quale delle ultime tendenze adottare come strategia, i team dovrebbero invece riconoscere e concentrarsi sul fattore sottostante dell’accoppiamento. I sistemi sono più flessibili e dinamici se vi è un allentamento dell’accoppiamento tra i componenti che hanno maggiori probabilità di cambiare.

L'accoppiamento, nel contesto dei sistemi, si riferisce al modo in cui i componenti di un sistema sono collegati. Le interfacce sono necessarie per l'accoppiamento lasco. Per i sistemi elettrici, tali interfacce sono implementate come connettori fisici con pin e prese e protocolli descritti in termini di livelli di tensione. L'analogia dei sistemi software con un connettore elettrico è un'interfaccia di programmazione dell'applicazione (API), che potrebbe essere implementata come un insieme di funzioni o risorse basate su HTTP, tra le altre. Ma un’interfaccia da sola non è sufficiente per un accoppiamento lasco. Quell'interfaccia deve anche essere in qualche modo stabile, vale a dire che un utente può contare sul fatto che quell'interfaccia sia lì, con i suoi input che rimangono gli stessi per molto tempo o, almeno, cambiano in modo prevedibile.

Quando i componenti di un sistema sono accoppiati in modo lasco, tali componenti possono essere modificati internamente senza interrompere in modo significativo il resto del sistema. Consideriamo un esempio quotidiano: la lampadina. I portalampade hanno una dimensione standard con filettature standard e una tensione standard. La lampadina stessa si è evoluta attraverso vari tipi di materiali per il filamento fino ai LED, il tutto senza richiedere modifiche alle lampade e ai corpi illuminanti. Consideriamo ora un semplice esempio nei sistemi software: un server HTTP e un archivio dati, come una cache, una coda o un database. Nella maggior parte dei casi, sarebbe utile posizionare un'interfaccia tra il server e l'archivio dati che semplifichi la modifica dell'implementazione dell'archivio dati. Una volta che queste due componenti sono solo debolmente accoppiate, le cose che probabilmente cambieranno possono farlo senza richiedere cambiamenti significativi alle altre cose.

Se i componenti del tuo sistema sono troppo strettamente intrecciati, anche il più piccolo cambiamento potrebbe causare danni in qualche altra parte del sistema. Potresti paragonare questa struttura a un gruppo di piante coltivate nelle vicinanze. Poiché tutti gli steli sono intrecciati, provare a sostituire una pianta con una nuova sarà impegnativo, poiché una mossa falsa potrebbe facilmente sradicare molte altre piante.

Al contrario, in un sistema ad accoppiamento debole, i cambiamenti possono essere apportati con la certezza che quando un componente incontra un problema, il resto del sistema rimarrà resiliente. Questa fiducia si traduce in una maggiore flessibilità nell’apportare modifiche, consente un time-to-market più breve per nuove funzionalità e prodotti e offre potenzialmente un vantaggio competitivo.

Un vantaggio corollario dell’accoppiamento lento è l’evolvibilità: quando le interfacce si trovano nei luoghi con maggiori probabilità di cambiamento, sarà più facile per il sistema evolversi. Le interfacce sono pensate per essere stabili e opache in modo che tutto ciò che accade dietro di esse sia generalmente sconosciuto e irrilevante per l'utente di quell'interfaccia. Pertanto, finché le interfacce rimangono stabili, i sistemi dietro di esse sono liberi di cambiare e, quindi, di evolversi.

Anche se è vero che le strategie dei microservizi supportano l’accoppiamento lento, non sono l’unico modo. Strategie architetturali più semplici possono offrire a progetti più piccoli o più nuovi i vantaggi dell’accoppiamento libero in modo più sostenibile, generando meno spese generali rispetto alla costruzione di un’infrastruttura incentrata sui microservizi.

Le scelte architetturali riguardano tanto la componente umana della creazione e del funzionamento dei sistemi software quanto questioni tecniche come la scalabilità e le prestazioni. E la componente umana è il punto in cui i microservizi possono fallire.