In un'architettura microservizi ad accoppiamento libero, come si tiene traccia delle proprie dipendenze?

9

Una scelta di architettura di alto livello nel programma moderno è un sistema di microservizi basato su REST. Questo ha diversi vantaggi come accoppiamento lento, facile riutilizzo, restrizioni limitate su tecnologie che possono essere utilizzate, alta scalabilità, ecc.

Ma uno dei problemi che prevedo in una tale architettura è una scarsa visibilità su quali siano le dipendenze di un'applicazione. Ad esempio, supponiamo di avere un'applicazione che utilizza una serie di chiamate REST su base giornaliera. Questa applicazione utilizza anche una seconda serie di chiamate REST, ma solo una volta al trimestre. Se dovessi eseguire la scansione dei log per la scorsa settimana, vedrei tutti i dati giornalieri, ma probabilmente non vedrei le chiamate trimestrali. Quando arriva il momento di refactoring, le chiamate trimestrali sono ad alto rischio di rottura.

Quali modelli o strumenti possono essere utilizzati per ridurre questo rischio e fornire una maggiore visibilità su quali siano le dipendenze di un'architettura liberamente accoppiata?

    
posta David Grinberg 09.02.2017 - 16:59
fonte

3 risposte

5

What patterns or tools can be used to reduce this risk

Mantenere le tue API e le tue capacità aziendali retrocompatibili.

provide greater visibility into what the dependencies of a loosely coupled architecture are

Controlli sanitari.

Il mio servizio è un client per la tua capacità di API mensili. Ma il mio servizio è il client della tua API ogni volta che il mio servizio è in esecuzione. Quindi il mio servizio si attiva ogni 10 minuti, o qualsiasi altra cosa, si connette alla tua API mensile ed esegue il protocollo per assicurarti che la funzionalità di cui il mio servizio ha bisogno sia ancora disponibile.

Quindi i tuoi registri ti mostreranno la frequenza con cui alcuni altri servizi stanno controllando per vedere che ogni particolare servizio che offri è ancora disponibile, così come ti mostra quanto spesso ogni particolare servizio che offri viene effettivamente utilizzato.

    
risposta data 10.02.2017 - 08:03
fonte
2

Ci sono almeno due posizioni in cui puoi trovare le dipendenze:

  • Configurazione. Per accedere a API esterne è necessario conoscere una serie di informazioni su ciascuna di queste API. ID di accesso, chiavi segrete, endpoint. Tutto questo non può essere nel codice, perché tali cambieranno . Ad esempio, di recente ho iniziato a migrare tutti i miei microservizi su SSL. Ciò significa che ogni servizio che fa affidamento su quello che viene migrato dovrebbe essere riconfigurato in modo che punti alla versione https:// anziché http:// . Sono contento che gli endpoint fossero nella configurazione invece di essere codificati.

  • Interfacce. Non accedi a un servizio direttamente dal tuo codice, perché la versione dell'API cambierà e potresti persino decidere di passare a un'API diversa. Invece, si crea un livello di astrazione e si utilizza la dipendenza attraverso un'interfaccia. Seguendo una logica comune durante la creazione di tali interfacce, puoi semplificarti la vita più tardi quando cerchi le dipendenze.

When it comes time to refactor, the quarterly calls are at high risk of breaking.

Questo è il test di regressione.

Non puoi semplicemente guardare il codice, cambiarlo e fidarti di te stesso che nulla è stato rotto. Questo non funzionerà in un'architettura di microservizi. Ciò non funzionerà neanche in un'applicazione monolitica. Un compilatore può catturare alcuni degli errori che introdurrà durante la modifica del codice. In alcune lingue, come Haskell, il compilatore può essere molto capace e catturare la maggior parte degli errori; i compilatori per le lingue tradizionali, tuttavia, non faranno molto per te. Se non hai test, sei fregato. La presenza di microservizi è irrilevante.

    
risposta data 15.02.2017 - 19:47
fonte
-2

Le API REST sono liberamente specificate, quindi a un certo punto potrebbe essere utile passare a gRPC, google protobufs o Thrift per definire un'interfaccia RPC e quindi eseguirla.

    
risposta data 28.02.2017 - 17:17
fonte