Distribuire microservizi con app e dapr di Azure Container
Questo articolo descrive una soluzione per l'esecuzione di un sistema di gestione degli ordini con 10 microservizi nelle app contenitore di Azure. La soluzione usa anche le procedure consigliate per i microservizi tramite Distributed Application Runtime (Dapr) e il ridimensionamento basato su eventi con la scalabilità automatica guidata dagli eventi di Kubernetes (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 descrive un sistema di gestione degli ordini di Red Dog fittizio e l'infrastruttura di Azure di supporto. L'architettura è costituita da un singolo ambiente app contenitore che ospita 10 applicazioni di microservizi .NET Core. La soluzione usa Dapr SDK per l'integrazione con le risorse di Azure tramite blocchi predefiniti di pubblicazione-sottoscrizione, stato e associazione. I servizi usano anche regole di scalabilità KEDA per consentire il ridimensionamento in base a trigger di eventi e scenari da scala a zero.
Il flusso di dati seguente corrisponde al diagramma precedente:
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 di ordine: Un'API di creazione, lettura, aggiornamento ed eliminazione per inserire 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 che gestisce una coda di ordini correnti in attesa di essere evaso. 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.
Servizio | Dati in ingresso | Componenti Dapr | Regole di scalabilità KEDA |
---|---|---|---|
Traefik | Esterno | Dapr non abilitato | Protocollo HTTP |
INTERFACCIA UTENTE | Interno | Dapr non abilitato | Protocollo HTTP |
Cliente virtuale | Nessuno | Chiamata da servizio a servizio | N/D |
Ordinare il servizio | Interno | Pubblicazione-sottoscrizione: bus di servizio di Azure | Protocollo HTTP |
Servizio contabilità | Interno | Pubblicazione-sottoscrizione: bus di servizio | Lunghezza dell'argomento del bus di servizio, HTTP |
Servizio di ricezione | Interno | Pubblicazione-sottoscrizione: bus di servizio Associazione: Archiviazione BLOB di Azure |
Lunghezza dell'argomento del bus di servizio |
Servizio fedeltà | Interno | Pubblicazione-sottoscrizione: bus di servizio Stato: Azure Cosmos DB |
Lunghezza dell'argomento del bus di servizio |
Servizio Makeline | Interno | Pubblicazione-sottoscrizione: bus di servizio Stato: Cache Redis di Azure |
Lunghezza dell'argomento del bus di servizio, HTTP |
Ruolo di lavoro virtuale | Nessuno | Chiamata da servizio a servizio Binding: Cron |
N/D |
Nota
È anche possibile implementare Bootstrap in un'app contenitore. Tuttavia, questo servizio viene eseguito una volta per eseguire la creazione del database e quindi viene ridimensionato a zero dopo aver creato gli oggetti necessari nel database SQL di Azure.
Componenti
Application Insights è un servizio estendibile di gestione delle prestazioni delle applicazioni che è possibile usare per monitorare le applicazioni in tempo reale e rilevare automaticamente le anomalie delle prestazioni. In questa architettura si usa Application Insights con Monitoraggio di Azure per visualizzare i log dei contenitori e raccogliere le metriche dai microservizi.
Archiviazione BLOB è una soluzione basata sul cloud per l'archiviazione di grandi quantità di dati non strutturati, ad esempio file di testo o binari. In questa architettura, un servizio di ricezione usa l'archiviazione BLOB tramite un'associazione di output Dapr per archiviare le ricevute degli ordini.
cache di Azure per Redis è una cache Redis gestita distribuita, in memoria e scalabile. In questa architettura viene usato come componente dell'archivio di stati Dapr per il servizio Makeline per archiviare i dati sugli ordini in fase di elaborazione.
Azure Cosmos DB è un servizio di database gestito con più modelli NoSQL. In questa architettura viene usato come componente dell'archivio di stato dapr per il servizio fedeltà per archiviare i dati fedeltà dei clienti.
Monitoraggio di Azure è una piattaforma unificata che consente di raccogliere, analizzare e agire sui dati dei contenuti dei clienti dagli ambienti dell'infrastruttura di Azure. In questa architettura si usa Monitoraggio di Azure con Application Insights per visualizzare i log dei contenitori e raccogliere le metriche dai microservizi.
Il bus di servizio è un broker di messaggi aziendale completamente gestito con code e argomenti di pubblicazione-sottoscrizione. In questa architettura si usa il bus di servizio per l'implementazione del componente Dapr publish-subscribe. Più servizi usano questo componente. Il servizio ordini pubblica messaggi sul bus e i servizi Makeline, accounting, fedeltà e ricevuta sottoscrivono questi messaggi.
App contenitore è un servizio contenitore serverless completamente gestito usato per compilare e distribuire app moderne su larga scala. In questa architettura vengono ospitati tutti e 10 i microservizi nelle app contenitore e li si distribuisce in un singolo ambiente app contenitore. Questo ambiente funge da limite sicuro intorno al sistema.
Il database SQL è un servizio di database relazionale intelligente e scalabile creato per il cloud. In questa architettura funge da archivio dati 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. Viene quindi eseguito una volta prima di stabilire la connessione al servizio di contabilità.
Traefik è un proxy inverso moderno leader e un servizio di bilanciamento del carico che semplifica la distribuzione di microservizi. In questa architettura 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 abilita anche le chiamate API dirette ai servizi back-end per i test.
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.
Tutta l'infrastruttura di Azure, ad eccezione del database SQL, usa i 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 scenario, il bus di servizio, Azure Cosmos DB, Cache Redis di Azure e l'archiviazione BLOB presentano alcuni dei più di 70 componenti dapr disponibili. Un elenco di broker di pubblicazione-sottoscrizionealternativi, archivi di stato e associazioni di output sono disponibili nella documentazione di Dapr.
Dettagli dello scenario
I microservizi sono uno stile architetturale ampiamente adottato. Offrono vantaggi come scalabilità, agilità e distribuzioni indipendenti. È 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 contenitore è un servizio contenitore serverless completamente gestito per l'esecuzione di applicazioni moderne su larga scala. Consente di distribuire app in contenitori tramite un'astrazione della piattaforma sottostante. Usando questo metodo, non è necessario gestire un'infrastruttura complessa.
Questa architettura usa l'integrazione di App contenitore con una versione gestita di Dapr. Dapr è un progetto open source che consente agli sviluppatori di superare le sfide intrinseche nelle applicazioni distribuite, ad esempio la gestione dello stato e la chiamata al servizio.
App contenitore fornisce anche una versione gestita di KEDA. KEDA consente ai contenitori di ridimensionarsi automaticamente in base agli eventi in ingresso da servizi esterni, ad esempio il bus di servizio e Cache Redis di Azure.
È anche possibile abilitare l'ingresso HTTPS in App contenitore senza creare altre risorse di rete di Azure. È possibile usare il proxy Envoy, che consente anche scenari di suddivisione del traffico.
Per altre informazioni, vedere Confrontare app contenitore con altre opzioni del contenitore di Azure.
Questo articolo descrive una soluzione per l'esecuzione di un sistema di gestione degli ordini con 10 microservizi nelle app contenitore. 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.
Le soluzioni seguenti 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 Well-Architected Framework.
Affidabilità
L'affidabilità garantisce che l'applicazione possa soddisfare gli impegni assunti dai clienti. Per altre informazioni, vedere Elenco di controllo per la revisione della progettazione per l'affidabilità.
App contenitore si basa su una base Kubernetes, che opera come infrastruttura sottostante. 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 includono un servizio di bilanciamento del carico predefinito che distribuisce il traffico tra più repliche di ogni app contenitore. Questa ridondanza consente al sistema di rimanere operativi, anche se una replica non è più disponibile.
Sicurezza
La sicurezza offre garanzie contro attacchi intenzionali e l'uso improprio dei dati e dei sistemi preziosi. Per maggiori informazioni, consultare la sezione Elenco di controllo per la revisione della progettazione per la sicurezza.
L'elenco seguente illustra diverse funzionalità di sicurezza omesse in questa architettura, insieme ad altre raccomandazioni e considerazioni:
Questa architettura non usa endpoint privati, che consentono una connettività più sicura e privata ai servizi di Azure assegnando loro un indirizzo IP dalla rete virtuale. Quando si usano endpoint privati, l'accesso alla rete pubblica può essere disabilitato. Questo approccio mantiene il traffico sul backbone Microsoft e migliora la sicurezza e la conformità.
L'attività di rete deve essere monitorata continuamente per rilevare e prevenire abusi. È possibile ottenere questo approccio usando firewall di Azure e tabelle di route. Le tabelle di route consentono il traffico che lascia una rete virtuale da passare prima attraverso il firewall. Questo processo è un passaggio importante per garantire che l'architettura non sia vulnerabile agli attacchi di esfiltrazione dei dati.
Usare un web application firewall (WAF) per proteggersi da vulnerabilità comuni. Usare Frontdoor di Azure o il gateway applicazione di Azure per implementare un WAF in questa architettura.
Prendere in considerazione l'uso della funzionalità predefinita di autenticazione e autorizzazione per le app contenitore, nota come Autenticazione semplice. Easy Auth semplifica il processo di integrazione dei provider di identità nell'app Web. Gestisce l'autenticazione all'esterno dell'app Web, quindi non è necessario apportare modifiche significative al codice.
Usare l'identità gestita per le identità del carico di lavoro. Identità gestita elimina la necessità che gli sviluppatori gestiscano le credenziali di autenticazione. Ad esempio, l'architettura di base esegue l'autenticazione a SQL Server tramite password in una stringa di connessione. Quando possibile, usare gli ID Microsoft Entra per eseguire l'autenticazione in Azure SQL Server.
Ottimizzazione costi
L'ottimizzazione dei costi è incentrata sui 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.
Eccellenza operativa
L'eccellenza operativa copre i processi operativi che distribuiscono un'applicazione e la mantengono in esecuzione nell'ambiente di produzione. Per maggiori informazioni, consultare la sezione Elenco di controllo per la revisione della progettazione per l'eccellenza operativa.
È possibile usare Monitoraggio di Azure e Application Insights per monitorare le app contenitore. È 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 sotto la risorsa di Application Insights per visualizzare una mappa simile alla seguente.
Per altre informazioni, vedere Monitorare un'app in App contenitore.
Efficienza delle prestazioni
L'efficienza delle prestazioni si riferisce alla capacità del carico di lavoro di ridimensionarsi per soddisfare in modo efficiente le esigenze degli utenti. Per altre informazioni, vedere Elenco di controllo per l'efficienza delle prestazioni.
Questa soluzione si basa principalmente sull'implementazione KEDA in App contenitore per il ridimensionamento basato sugli eventi. Quando si distribuisce il servizio clienti virtuale, gli ordini vengono continuamente effettuati. Questa scalabilità fa sì che il servizio ordini possa aumentare le prestazioni tramite il servizio di scalabilità KEDA HTTP. 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 continuamente l'evasione degli ordini. Per altre informazioni, vedere Impostare le regole di ridimensionamento in App contenitore.
Collaboratori
Microsoft gestisce questo articolo. I collaboratori seguenti hanno scritto questo articolo.
Autore principale:
- Alice Gibbons | Cintura nera globale nativa del cloud
Altri contributori:
- Lynn Orrell | Principal Solution Specialist (GBB)
- Kendall Roden | Senior Program Manager
Per visualizzare i profili LinkedIn non pubblici, accedere a LinkedIn.
Passaggi successivi
- Documentazione di App contenitore
- Confrontare le app contenitore con altre opzioni di contenitore di Azure