Esercizio - Creare un modello di integrità dell'applicazione

Completato

Contoso Shoes sta cercando un modo per rilevare, diagnosticare e prevedere i problemi di questa architettura. La finalità dell’utente è quella di creare un modello di integrità quantificabile tramite uno stato di integrità applicato ai flussi utente e di sistema. L'obiettivo è identificare i potenziali punti di errore prima che possano causare un'interruzione.

Stato corrente e problema

Finora è stata aggiunta un'API di controllo integrità e sono state compilate funzionalità multiregione nell'architettura. Tuttavia, non esiste un metodo per ottenere informazioni dettagliate riguardo la complessa topologia che coinvolge i flussi di utenti e sistemi. Questa lacuna deve essere colmata in modo che il team SRE possa identificare e risolvere rapidamente i problemi.

In un recente incidente, il team non ha potuto osservare l'effetto a catena di un problema derivante da un componente dell'API, che influenzava le dipendenze della piattaforma. La risoluzione dei problemi ha comportato un notevole dispendio di tempo perché non è stato possibile individuare immediatamente il componente non integro. In definitiva, questa inefficienza ha portato a tempi di inattività più lunghi, causando perdite finanziarie all'azienda.

Specifica

  • Progettare un modello di integrità che mostra le relazioni tra tutti i componenti dell'architettura, includendo sia i componenti dell'applicazione che le dipendenze della piattaforma. Prendere in considerazione gli elementi che esistono all'interno del flusso di richieste, tra cui il gateway, l'elaborazione, i database, l'archiviazione, le cache e così via. Inoltre, includere i componenti che in genere esistono al di fuori del flusso di richieste. Ad esempio, artefatti OCI (Open Container Initiative), archivi segreti, servizi di configurazione e altro. Tutti i servizi di Azure devono essere configurati per l'invio di dati di diagnostica.

  • Aggiungere un sink di dati unificato nell'architettura per raccogliere informazioni provenienti da diverse origini.

  • Definire uno stato di integrità complessivo basato su log cronologici aggregati e metriche. Rappresenta lo stato in uno dei tre stati di integrità: non integro, danneggiato e integro.

  • Visualizzare lo stato di integrità di tutti i componenti di una gerarchia che rappresenta tutti i flussi.

Per iniziare a progettare, è consigliabile seguire questa procedura:

Importante

La modellazione dell'integrità è un'attività che richiede un'analisi approfondita. L'approccio in questa sezione è destinato a facilitare l'avvio. È importante applicare il modello a tutti i flussi funzionali e non funzionali nella progettazione mission-critical per ottenere una visione olistica del sistema.

1 - Avviare la modellazione dell'integrità

Questo esercizio è teorico. La modellazione dell'integrità è un'attività di progettazione dall'alto verso il basso che richiede un elenco completo dei componenti usati nell'architettura. Questo elenco deve includere tutti i componenti dell'applicazione e i servizi di Azure.

Inserire questi componenti in un grafico dipendenze che mostri una visione gerarchica della soluzione. Il livello superiore include i flussi utente che tengono traccia della richiesta dall'utente finale al sito Web e i flussi a livello di API dell'applicazione. Il livello inferiore contiene i flussi di sistema dai servizi di Azure. Eseguire anche il mapping delle dipendenze tra le risorse di Azure.

Il grafo dovrebbe essere simile al seguente:

Diagramma che mostra un grafo delle dipendenze per un modello di integrità.

Verificare i progressi: Integrità dell'applicazione a livelli

2 - Definire i punteggi di integrità

Per ogni componente, è necessario rilevare le metriche e definire le loro soglie e quindi decidere il valore che determina se il componente è integro, danneggiato e non integro. Tale decisione deve essere influenzata dai requisiti aziendali previsti e non funzionali. Classificare le metriche come segue:

  • Metriche dell'applicazione: punti dati dal codice dell'applicazione, ad esempio il conteggio delle eccezioni.

  • Metriche del servizio: punti dati dei servizi di Azure, ad esempio unità di transazione di database (DTU) in uso.

  • Metriche della soluzione: punti dati a livello di soluzione, ad esempio il tempo di elaborazione end-to-end di una richiesta.

Ecco un esempio per app Azure Services:

Servizi app Health status
Tempo di risposta < 200ms
Errori del server HTTP < 2
Mostra uno stato di integrità di colore verde.
Tempo di risposta < 500ms
Errori del server HTTP < 2
Mostra uno stato degradato di colore giallo.
Tempo di risposta > 500ms
Errori del server HTTP > 2
Mostra uno stato non integro di color rosso

3 - Definire uno stato di integrità complessivo

Per ogni utente e flusso di sistema, definire uno stato complessivo. Sarà necessario aggregare lo stato di integrità dei singoli componenti che contribuiscono a tale flusso.

Supponiamo che un flusso di sistema sia costituito da un componente dell'applicazione, da un piano si Servizio app di Azure e da Servizi app.

API Piano di servizio app Servizi app Health status
Latenza massima < 30ms % CPU < 70%
Lunghezza coda HTTP < 5
Tempo di risposta < 200ms
Errori del server HTTP < 2
Stato integro complessivo mostrato in verde.
Latenza massima < 30ms % CPU < 90%
Lunghezza coda HTTP < 5
Tempo di risposta < 500ms
Errori del server HTTP < 2
Stato degradato complessivo mostrato in giallo.
Latenza massima > 30ms CPU % > 90%
lunghezza > coda HTTP 5
Tempi di > risposta 500ms
Errori > del server HTTP 2
Stato non integro complessivo mostrato in rosso.

Il punteggio di integrità per un flusso utente deve essere rappresentato dal punteggio più basso in tutti i componenti mappati. Per i flussi di sistema, applicare pesi adeguati in base alla criticità aziendale. Tra i due flussi, devono avere la priorità i flussi di utenti significativi dal punto di vista finanziario o quelli rivolti al cliente.

Verificare i progressi: Esempio: integrità dell'applicazione a livelli

4 - Raccogliere dati di monitoraggio

È necessario un sink di dati unificato in ogni area che raccoglie log e metriche per tutti i servizi di applicazione e piattaforma distribuiti come parte del timbro a livello di area. È necessario un altro sink per archiviare le metriche generate dalle risorse globali, ad esempio Frontdoor di Azure e Cosmos DB.

Diagramma che mostra la raccolta dati da vari servizi dell'applicazione e della piattaforma.

Scelte di tecnologia

  • app Azure lication Insights: usato per raccogliere tutti i dati di telemetria dell'applicazione.
  • Log di Monitoraggio di Azure: raccoglie i dati inviati da Application Insights e metriche della piattaforma per i servizi di Azure.
  • Azure Log Analitica: usato come strumento centrale per l'analisi dei log e delle metriche da tutti i componenti dell'applicazione e dell'infrastruttura.

Verificare i progressi: Data sink unificato per l'analisi correlata

5 - Configurare le query per il monitoraggio dei dati

Linguaggio di query Kusto (KQL) è ben integrato con Log Analytics. Implementare query KQL personalizzate come funzioni per recuperare i dati da Monitoraggio di Azure.

Archiviare query personalizzate nel repository di codice in modo che vengano importate e applicate automaticamente come parte delle pipeline di integrazione continua/recapito continuo (CI/CD).

6 - Visualizzare lo stato di integrità

È possibile visualizzare il grafico delle dipendenze con i punteggi di integrità con una rappresentazione della luce del traffico. Usare strumenti come la dashboard di Azure, le cartelle di lavoro di Monitoraggio o Grafana. Ecco un esempio:

Diagramma che mostra un modello di integrità in un grafo delle dipendenze.

Verificare i progressi: Visualizzazione

7 - Configurare avvisi sulle modifiche dello stato

È consigliabile usare i dashboard con avvisi per alzare immediatamente l'attenzione per i problemi.

Se lo stato di integrità di un componente viene modificato in Degradato o Non integro, l'operatore ricevere immediatamente una notifica. Impostare avvisi nel nodo radice, perché qualsiasi modifica apportata a questo nodo indica lo stato non integro nei flussi utente o nelle risorse sottostanti.

Verificare i progressi: Avvisi

Controlla il tuo lavoro

Guardare questa demo sul monitoraggio e sulla modellazione dell'integrità. Sono stati coperti tutti gli aspetti nel progetto?

  • È disponibile un sink di dati unificato per l'analisi correlata?
  • Sono stati inclusi i log delle applicazioni, le metriche della piattaforma e i punti dati della soluzione?
  • Sono state configurate le dashboard per visualizzare lo stato di integrità di tutti i componenti?
  • Sono stati presi in considerazione i punti critici di ogni servizio (o parte del servizio) che potrebbero causare un'interruzione o ostacolare il ridimensionamento, la distribuzione e il monitoraggio?
  • Sono stati presi in considerazione i pacchetti di query per acquisire le query chiave che consentono di risolvere i problemi più velocemente?
  • L'API per il controllo dello stato di integrità è stata utile per questo modello? È stato necessario modificare l'API per adattarla al modello di integrità?

Verifica delle conoscenze

1.

Cosa deve essere incluso nel punteggio di integrità per rappresentare lo stato di integrità complessivo dell'applicazione?

2.

Quale di questi servizi di Azure può essere usato come sink di dati unificato per i dati di telemetria e analisi?