Architettura monolitica pulita di Gridwich

Griglia di eventi di Azure
Funzioni di Azure

Il codice in questo progetto è organizzato come monolitico dell'architettura pulita, con i componenti concettuali tipici seguenti:

  • Adattatori API
  • Logica di business dell'applicazione disaccoppiata
  • Oggetti di dominio di base
  • Gateway di infrastruttura
  • Inversione del controllo (IoC)

Diagram showing typical conceptual components of a clean monolith architecture.

La soluzione è senza stato, quindi non contiene gateway per i livelli di persistenza. La soluzione non dispone di interfaccia utente, quindi non dispone di controller o relatori.

La composizione del componente software usa la classe GridwichConfigureServices per definire le classi concrete disponibili nel contenitore IoC per l'app Funzioni di Azure.

Architettura

Diagram showing components of the Gridwich monolith architecture.

La soluzione Gridwich include una libreria Core.EventGrid , che contiene:

  • Oggetti DTO (DTO) della richiesta di dominio e dei dati di risposta.
  • Interfacce per tutti gli oggetti di servizio o logica di business dell'applicazione.
  • Classi di base che consentono di ottenere la logica o le attività comuni basate su dominio.
  • Registrazione, osservabilità e definizioni di eccezioni da usare in tutta l'applicazione.

Per incapsulare Griglia di eventi di Azure come gestore di richieste e risposte, la libreria include:

  • Dispatcher eventi che usa l'IoC per identificare e inviare eventi ai listener.
  • Autore di eventi per inserire risposte nell'argomento di Griglia di eventi corretto.

L'adattatore di richiesta di Griglia di eventi è un endpoint HTTP sotto forma di endpoint HTTP della funzione di Azure. Un adattatore per convertire le richieste Web in matrici di Griglia di eventi si trova anche nella stessa EventGridFunction.

Il gateway di risposta di Griglia di eventi è costituito da:

  • EventGridHandlerBase, che converte una risposta DTO in un EventGridEvent oggetto .
  • EventGridDispatcher, che inserisce l'evento griglia di eventi nell'URI dell'endpoint dell'argomento griglia di eventi di risposta corretto usando la chiave dell'argomento.

La soluzione separa i partecipanti della saga nelle librerie seguenti, che hanno responsabilità sulla logica di business dell'applicazione specifica del dominio. Le librerie contengono gateway di infrastruttura necessari e i relativi SDK, che eseguono le azioni richieste dalla logica di business.

Per il riutilizzo e la centralizzazione del codice, Gridwich consolida la logica di business o i gateway dell'infrastruttura usati da diversi partecipanti nelle librerie condivise seguenti:

Alternativa ai microservizi

Nulla nello spazio o nell'architettura dei problemi di Gridwich inserisce in modo esplicito la soluzione in un'app monolitica o in diversi microservizi.

È possibile effettuare facilmente il refactoring dell'app in microservizi, ogni app per le funzioni che ospita un singolo partecipante della saga. Ogni app per le funzioni collega le librerie core e core di Griglia di eventi. Le app hanno un collegamento o usano una libreria comune per i gateway dell'infrastruttura.

Diagram showing an alternative Gridwich microservices architecture.

Il vantaggio di un approccio di questo tipo di microservizi è la possibilità di ridimensionare in modo diverso per ogni tipo di richiesta. Se ci fossero migliaia di un tipo di richiesta al secondo, ma solo centinaia di altri tipi di richiesta al giorno, la soluzione complessiva trarrebbe vantaggio dalla creazione di istanze più piccole, facili da creare e dalle funzioni di esecuzione rapida per le richieste di volumi elevati.

Lo svantaggio dei microservizi è che tutti i modelli condivisi richiedono l'implementazione sincronizzata dei microservizi o lo svuotamento e il passaggio del pool di richieste in caso di modifica dello schema dei dati. Questo requisito complica lo sviluppo futuro, la distribuzione continua e le operazioni. Poiché il problema aziendale non ha dimostrato la necessità di microservizi, l'architettura di Gridwich usa un approccio monolitico pulito.

Passaggi successivi