Questo articolo descrive una soluzione per l'esecuzione di un sistema di gestione degli ordini con 10 microservizi in App Contenitore di Azure. La soluzione usa anche le procedure consigliate per i microservizi tramite Dapr e il ridimensionamento basato su eventi con KEDA.
Dapr e Traefik sono marchi delle rispettive società. Nessuna verifica dell'autenticità è implicita nell'uso di questi marchi.
Architettura
Scaricare un file PowerPoint di questa architettura.
Flusso di dati
Questa soluzione usa i modelli Bicep per eseguire la distribuzione del sistema di gestione degli ordini red dog e dell'infrastruttura di Azure di supporto. L'architettura è costituita da un singolo ambiente app contenitore di Azure che ospita 10 applicazioni di microservizi .NET Core. Si userà .NET Core Dapr SDK per l'integrazione con le risorse di Azure tramite i blocchi predefiniti publish-subscribe (pub/sub) e State and Binding. Anche se Dapr offre in genere flessibilità quando si implementano i componenti, questa soluzione si basa su un'opinione. I servizi usano anche le regole di scalabilità KEDA per consentire il ridimensionamento in base a trigger di eventi e scalabilità a zero scenari.
L'elenco seguente descrive ogni microservizio e la configurazione di App Contenitore di Azure con cui viene distribuita. Per visualizzare il codice, vedere il repository reddog-code in GitHub .
Traefik: proxy di base per il routing delle richieste utente dall'interfaccia utente ai servizi accounting e Makeline per il dashboard interattivo.
'interfaccia utente: un dashboard che mostra l'ordine in tempo reale e i dati aggregati sulle vendite per il sistema di gestione degli ordini red dog.
Cliente virtuale: un programma di simulazione clienti che simula i clienti che effettua ordini tramite il servizio ordini.
Servizio ordini: UN'API CRUD per effettuare e gestire gli ordini.
Servizio contabilità: servizio che elabora, archivia e aggrega i dati degli ordini. Trasforma gli ordini dei clienti in metriche di vendita significative presentate dall'interfaccia utente.
Servizio di ricezione: programma di archiviazione che genera e archivia le ricevute degli ordini per scopi di controllo e cronologia.
Servizio fedeltà: un servizio che gestisce il programma fedeltà monitorando i punti di ricompensa dei clienti in base alla spesa dell'ordine.
Servizio Makeline: servizio responsabile della gestione di una coda di ordini correnti in attesa dell'evasione. Tiene traccia dell'elaborazione e del completamento degli ordini dal servizio di lavoro virtuale.
Lavoro virtuale:programma di simulazione di lavoro che simula il completamento degli ordini dei clienti.
Programma di avvio automatico (non visualizzato): servizio che usa Entity Framework Core per inizializzare le tabelle all'interno di database SQL di Azure da usare con il servizio di contabilità.
Service | Dati in ingresso | Componenti Dapr | Regole di scalabilità KEDA |
---|---|---|---|
Traefik | Esterno | Dapr non abilitato | HTTP |
INTERFACCIA UTENTE | Internal | Dapr non abilitato | HTTP |
Cliente virtuale | None | Chiamata da servizio a servizio | N/D |
Ordinare il servizio | Internal | Pub/sub: bus di servizio di Azure | HTTP |
Servizio contabilità | Internal | Pub/sub: bus di servizio di Azure | bus di servizio di Azure lunghezza dell'argomento, HTTP |
Servizio di ricezione | Internal | Pub/sub: bus di servizio di Azure Binding: Azure Blob |
bus di servizio di Azure lunghezza dell'argomento |
Servizio fedeltà | Internal | Pub/sub: bus di servizio di Azure Stato: Azure Cosmos DB |
bus di servizio di Azure lunghezza dell'argomento |
Servizio Makeline | Internal | Pub/sub: bus di servizio di Azure Stato: Azure Redis |
bus di servizio di Azure lunghezza dell'argomento, HTTP |
Ruolo di lavoro virtuale | None | Chiamata da servizio a servizio Binding: Cron |
N/D |
Nota
È anche possibile eseguire bootstrapper in un'app contenitore. Tuttavia, questo servizio viene eseguito una volta per eseguire la creazione del database e quindi ridimensionato a zero dopo aver creato gli oggetti necessari in database SQL di Azure.
Componenti
In questa soluzione vengono usati i componenti seguenti:
- I gruppi di risorse di Azure sono contenitori logici per le risorse di Azure. Si usa un singolo gruppo di risorse per strutturare tutti gli elementi correlati a questa soluzione nel portale di Azure.
- App Azure Container è un servizio contenitore serverless completamente gestito usato per compilare e distribuire app moderne su larga scala. In questa soluzione si ospitano tutti e 10 i microservizi nelle app Azure Container e li si distribuisce in un singolo ambiente dell'app contenitore. Questo ambiente funge da limite sicuro intorno al sistema.
- bus di servizio di Azure è un broker di messaggi aziendale completamente gestito completo con code e argomenti di pubblicazione-sottoscrizione. In questa soluzione usarlo per l'implementazione del componente dapr pub/sub. Più servizi usano questo componente. Il servizio ordini pubblica messaggi sul bus e i servizi Makeline, accounting, fedeltà e ricevuta sottoscrivono questi messaggi.
- Azure Cosmos DB è un servizio di database gestito con più modelli NoSQL. Usarlo come componente dell'archivio di stato dapr per il servizio fedeltà per archiviare i dati fedeltà del cliente.
- cache di Azure per Redis è una cache Redis gestita distribuita, in memoria e scalabile. Viene usato come componente dell'archivio di stato dapr per il servizio Makeline per archiviare i dati sugli ordini in corso di elaborazione.
- Database SQL di Azure è un servizio di database relazionale intelligente, scalabile e basato sul cloud. Crearlo per il servizio di contabilità, che usa Entity Framework Core per interfacciarsi con il database. Il servizio Bootstrapper è responsabile della configurazione delle tabelle SQL nel database e quindi viene eseguito una sola volta prima di stabilire la connessione al servizio di accounting.
- Archiviazione BLOB di Azure archivia enormi quantità di dati non strutturati come file di testo o binari. Il servizio di ricezione usa l'archiviazione BLOB tramite un'associazione di output Dapr per archiviare le ricevute degli ordini.
- Traefik è un proxy inverso moderno leader e un servizio di bilanciamento del carico che semplifica la distribuzione di microservizi. In questa soluzione usare la funzionalità di configurazione dinamica di Traefik per eseguire il routing basato sul percorso dall'interfaccia utente, ovvero un'applicazione a pagina singola Vue.js. Questa configurazione consente anche chiamate API dirette ai servizi back-end per i test.
- Monitoraggio di Azure consente di raccogliere, analizzare e agire sui dati dei contenuti dei clienti dagli ambienti dell'infrastruttura di Azure. Verrà usata con Application Insights per visualizzare i log del contenitore e raccogliere le metriche dai microservizi.
Alternative
In questa architettura si distribuisce un proxy Traefik per abilitare il routing basato sul percorso per l'API Vue.js. A questo scopo è possibile usare molti proxy open source alternativi. Altri due progetti comuni sono NGINX e HAProxy.
Tutte le infrastrutture di Azure, ad eccezione di database SQL di Azure, usano componenti Dapr per l'interoperabilità. Un vantaggio di Dapr è che è possibile scambiare tutti questi componenti modificando la configurazione di distribuzione delle app contenitore. In questo caso, bus di servizio di Azure, Azure Cosmos DB, Cache for Redis e Archiviazione BLOB sono stati scelti per presentare alcuni dei componenti dapr 70+ disponibili. Un elenco di broker pub/sub alternativi, archivi di stato e associazioni di output sono disponibili nella documentazione dapr.
Dettagli dello scenario
I microservizi sono uno stile di architettura sempre più diffuso che può avere molti vantaggi, tra cui scalabilità elevata, cicli di sviluppo più brevi e maggiore semplicità. È possibile usare i contenitori come meccanismo per distribuire applicazioni di microservizi e quindi usare un agente di orchestrazione di contenitori come Kubernetes per semplificare le operazioni. Esistono molti fattori da considerare per le architetture di microservizi su larga scala. In genere, la piattaforma dell'infrastruttura richiede una conoscenza significativa di tecnologie complesse come gli agenti di orchestrazione dei contenitori.
App Azure Container è un servizio contenitore serverless completamente gestito per l'esecuzione di applicazioni moderne su larga scala. Consente di distribuire app in contenitori tramite astrazione della piattaforma sottostante. In questo modo, non sarà necessario gestire un'infrastruttura complessa. App Azure Container è basata su tecnologie open source.
Questa architettura usa l'integrazione di App Contenitore di Azure con una versione gestita di Distributed Application Runtime (Dapr).This architecture uses Azure Container Apps integration with a managed version of the Distributed Application Runtime (Dapr). Dapr è un progetto open source che consente agli sviluppatori di affrontare le problematiche intrinseche nelle applicazioni distribuite, ad esempio la gestione dello stato e la chiamata al servizio.
App Contenitore di Azure offre anche una versione gestita della scalabilità automatica basata su eventi di Kubernetes (KEDA). KEDA consente di ridimensionare automaticamente i contenitori in base a eventi in ingresso da servizi esterni, ad esempio bus di servizio di Azure e cache di Azure per Redis.
È anche possibile abilitare l'ingresso HTTPS nelle app contenitore di Azure senza creare altre risorse di rete di Azure. È possibile usare il proxy Envoy, che consente anche scenari di suddivisione del traffico.
Per informazioni sul confronto tra app di Azure Container e altre piattaforme di hosting di contenitori in Azure, vedere Confronto tra app contenitore e altre opzioni del contenitore di Azure.
Questo articolo descrive una soluzione per l'esecuzione di un sistema di gestione degli ordini con 10 microservizi in App Contenitore di Azure. La soluzione usa anche le procedure consigliate per i microservizi tramite Dapr e il ridimensionamento basato su eventi con KEDA.
Potenziali casi d'uso
Questa soluzione si applica a qualsiasi organizzazione che usa microservizi senza stato e con stato per i sistemi distribuiti. La soluzione è ideale per i beni di consumo e i settori di produzione che dispongono di un sistema di ordinamento e evasione.
Queste altre soluzioni hanno progettazioni simili:
- Architettura di microservizi nel servizio Azure Kubernetes
- Architettura di microservizi in Funzioni di Azure
- Architetture guidate dagli eventi
Considerazioni
Queste considerazioni implementano i pilastri di Azure Well-Architected Framework, che è un set di principi guida che possono essere usati per migliorare la qualità di un carico di lavoro. Per altre informazioni, vedere Microsoft Azure Well-Architected Framework.
Affidabilità
L'affidabilità garantisce che l'applicazione possa soddisfare gli impegni che l'utente ha preso con i clienti. Per altre informazioni, vedere Elenco di controllo per la revisione della progettazione per l'affidabilità.
App Azure Container viene eseguita in Kubernetes in background. I meccanismi di resilienza sono integrati in Kubernetes che monitorano e riavviano i contenitori o i pod in caso di problemi. I meccanismi di resilienza si combinano con il servizio di bilanciamento del carico predefinito per eseguire più repliche di ogni app contenitore. Con questa ridondanza, la soluzione può tollerare che un'istanza non sia disponibile.
È possibile usare Monitoraggio di Azure e Application Insights per monitorare le app di Azure Container. È possibile visualizzare i log dei contenitori passando nel portale al riquadro Log in ogni app contenitore e quindi eseguendo la query Kusto seguente. Questo esempio mostra i log per l'app del servizio Makeline.
ContainerAppConsoleLogs_CL |
where ContainerAppName_s contains "make-line-service" |
project TimeGenerated, _timestamp_d, ContainerGroupName_s, Log_s |
order by _timestamp_d asc
La mappa delle applicazioni in Application Insights mostra anche come i servizi comunicano in tempo reale. È quindi possibile usarli per gli scenari di debug. Passare alla mappa dell'applicazione nella risorsa di Application Insights per visualizzare un aspetto simile al seguente.
Per altre informazioni sul monitoraggio delle app di Azure Container, vedere Monitorare un'app in App Azure Container.
Ottimizzazione costi
L'ottimizzazione dei costi consiste nell'esaminare i modi per ridurre le spese non necessarie e migliorare l'efficienza operativa. Per altre informazioni, vedere Elenco di controllo per la revisione della progettazione per l'ottimizzazione dei costi.
Usare il calcolatore prezzi di Azure per stimare il costo dei servizi in questa architettura.
Efficienza delle prestazioni
L'efficienza delle prestazioni è la capacità del carico di lavoro di ridimensionarsi per soddisfare le esigenze poste dagli utenti in modo efficiente. Per altre informazioni, vedere Elenco di controllo per l'efficienza delle prestazioni.
Questa soluzione si basa principalmente sull'implementazione KEDA in App Contenitore di Azure per il ridimensionamento basato sugli eventi. Quando si distribuisce il servizio clienti virtuale, gli ordini verranno continuamente distribuiti, causando l'aumento delle prestazioni del servizio ordini tramite il servizio di scalabilità HTTP KEDA. Quando il servizio ordini pubblica gli ordini sul bus di servizio, i ridimensionatori KEDA del bus di servizio causano l'aumento delle prestazioni di contabilità, ricevuta, makeline e fedeltà. L'interfaccia utente e le app contenitore Traefik configurano anche i scaler KEDA HTTP in modo che le app siano ridimensionate man mano che più utenti accedono al dashboard.
Quando il cliente virtuale non è in esecuzione, tutti i microservizi in questa soluzione vengono ridimensionati su zero, ad eccezione dei servizi di lavoro virtuale e makeline. Il ruolo di lavoro virtuale non viene ridotto perché controlla costantemente l'evasione degli ordini. Per altre informazioni sul ridimensionamento nelle app contenitore, vedere Impostare le regole di ridimensionamento nelle app contenitore di Azure. Per altre informazioni sui scaler KEDA, vedere la documentazione di KEDA su Scalers.
Distribuire lo scenario
Per istruzioni sulla distribuzione, vedere la demo red dog: distribuzione di app contenitore di Azure in GitHub.
La demo red dog: l'integrazione di microservizi è un modello di app in pacchetto basato sugli asset di codice precedenti per illustrare l'integrazione di app contenitore di Azure, servizio app, funzioni e Gestione API e effettua il provisioning dell'infrastruttura, distribuisce il codice usando GitHub Actions.
Collaboratori
Questo articolo viene gestito da Microsoft. Originariamente è stato scritto dai seguenti contributori.
Autore principale:
- Alice Gibbons | Cintura nera globale nativa del cloud
Altri contributori:
- Kendall Roden | Senior Program Manager
- Lynn Orrell | Principal Solution Specialist (GBB)
Per visualizzare i profili LinkedIn non pubblici, accedere a LinkedIn.
Passaggi successivi
- Documentazione di App Azure Container
- Confronto tra offerte di contenitori in Azure
- Altre implementazioni del sistema di gestione degli ordini red dog: