Framework dell'architettura Google Cloud: affidabilità

Last reviewed 2024-03-29 UTC

Questa categoria del framework dell'architettura Google Cloud copre i principi di progettazione necessari per progettare e gestire servizi affidabili su una piattaforma cloud ad alto livello.

Il framework dell'architettura descrive le best practice, fornisce consigli per l'implementazione e spiega alcuni dei prodotti e servizi disponibili. Il framework mira ad aiutarti a progettare il deployment di Google Cloud in modo che soddisfi al meglio le tue esigenze aziendali.

Per eseguire un servizio affidabile, la tua architettura deve includere quanto segue:

  • Obiettivi di affidabilità misurabili che correggi tempestivamente ogni volta che si verificano deviazioni
  • Pattern di progettazione per gli elementi seguenti:
    • Scalabilità
    • Alta disponibilità
    • Ripristino di emergenza
    • Gestione automatica dei cambiamenti
  • Componenti che si correggono autonomamente (in grado di risolvere i problemi senza interventi manuali)
  • Codice che include la strumentazione per l'osservabilità
  • Operazioni a mani libere, ad esempio servizio eseguito con lavoro manuale minimo, carico dell'operatore cognitivo, rilevamento rapido dei guasti e mitigazione

L'intera organizzazione di progettazione è responsabile dell'affidabilità del servizio, inclusi sviluppo, gestione dei prodotti, operazioni e team SRE (Site Reliability Engineering). I team devono comprendere gli obiettivi di affidabilità, i budget di rischio e di errore della loro applicazione ed essere responsabili di questi requisiti. I conflitti tra affidabilità e sviluppo di funzionalità del prodotto devono essere assegnati in ordine di priorità e riassegnati di conseguenza.

Principi di affidabilità di base

Questa sezione esplora i principi fondamentali di un servizio affidabile e getta le basi per i documenti più dettagliati che seguono. Proseguendo con la lettura su questo argomento, scoprirai che l'approccio di Google all'affidabilità si basa sui seguenti principi di affidabilità.

L'affidabilità è la tua funzionalità principale

A volte i team di progettazione danno priorità allo sviluppo di nuovi prodotti. Mentre gli utenti si aspettano nuovi ed entusiasmanti aggiornamenti alle loro applicazioni preferite, gli aggiornamenti dei prodotti sono un obiettivo a breve termine per i tuoi utenti. I tuoi clienti expect sempre l'affidabilità dei servizi, anche se non se ne rendono conto. Un set esteso di strumenti o grafica appariscente nella tua applicazione non avrà importanza se gli utenti non riescono ad accedere al servizio o se il servizio presenta prestazioni scadenti. Scarso rendimento dell'applicazione rende rapidamente queste funzionalità espanse irrilevanti.

L'affidabilità viene definita dall'utente

In breve, un servizio affidabile è affidabile quando i clienti sono soddisfatti. Gli utenti non sono sempre prevedibili e potresti sopravvalutare quanto necessario per soddisfarli.

Secondo lo standard odierno, una pagina web dovrebbe caricarsi in circa due secondi. L'abbandono della pagina è di circa il 53% quando il tempo di caricamento viene ritardato di un secondo in più e aumenta drasticamente fino all'87% quando il tempo di caricamento è ritardato di tre secondi. Tuttavia, cercare un sito che pubblichi pagine in un secondo non è probabilmente l'investimento migliore. Per determinare il giusto livello di affidabilità del servizio per i tuoi clienti, devi misurare quanto segue:

  • Carico di lavoro rivolto agli utenti: misura l'esperienza utente. Ad esempio, misura la percentuale di successo delle richieste degli utenti, non solo le metriche del server come l'utilizzo della CPU.
  • Carichi di lavoro in modalità flusso e batch: misura gli indicatori chiave di prestazione (KPI) per la velocità effettiva dei dati, ad esempio le righe analizzate per finestra temporale. Questo approccio è più informativo rispetto a una metrica del server come l'utilizzo del disco. I KPI di velocità effettiva aiutano a garantire che l'elaborazione richiesta dall'utente termini in tempo.

L'affidabilità al 100% non è l'obiettivo corretto

Questo principio è un'estensione di quello precedente. I tuoi sistemi sono abbastanza affidabili quando gli utenti sono soddisfatti. In genere, gli utenti non hanno bisogno del 100% di affidabilità per essere soddisfatti. Pertanto, definisci gli obiettivi del livello di servizio (SLO) che impostino la soglia di affidabilità sulla percentuale necessaria per soddisfare gli utenti, quindi utilizza i budget di errore per gestire il tasso di modifica appropriato.

Applica a un prodotto i principi di progettazione e operativi di questo framework solo se lo SLO per il prodotto o l'applicazione giustifica il costo.

Affidabilità e innovazione rapida sono complementari

Utilizza i budget di errore per raggiungere un equilibrio tra stabilità del sistema e agilità dello sviluppatore. Le seguenti indicazioni ti aiutano a determinare quando concentrarti maggiormente sulla stabilità o sullo sviluppo:

  • Quando il budget di errore viene ridotto, rallenta e concentrati sulle funzionalità di affidabilità.
  • Quando è disponibile un budget di errore adeguato, puoi innovare rapidamente e migliorare il prodotto o aggiungere funzionalità del prodotto.

Principi di progettazione e operativi

I documenti rimanenti nella categoria di affidabilità del framework dell'architettura forniscono principi di progettazione e operativi che ti aiutano a massimizzare l'affidabilità del sistema. Le sezioni seguenti forniscono un riepilogo dei principi di progettazione e operativi che troverai in ogni documento di questa serie.

Stabilisci i tuoi obiettivi di affidabilità

Ricorda, la soddisfazione degli utenti definisce l'affidabilità e i tuoi obiettivi di affidabilità sono rappresentati dagli SLO che imposti. Quando imposti gli SLO, considera quanto segue:

  • Scegliere indicatori del livello del servizio (SLI) appropriati.
  • Imposta gli SLO in base all'esperienza utente.
  • Migliora gli SLO in modo iterativo.
  • Utilizza SLO interni rigidi.
  • Usa i budget di errore per gestire la velocità di sviluppo.

Per saperne di più, consulta Componenti degli obiettivi del livello di servizio.

Integra funzioni di osservabilità nell'infrastruttura e nelle applicazioni

Instrumenta il tuo codice per massimizzare l'osservabilità. Per maggiori informazioni, consulta Integrare l'osservabilità nell'infrastruttura e nelle applicazioni.

Progetta per la scalabilità e la disponibilità elevata

Per quanto riguarda la scalabilità e la disponibilità elevata (HA), tieni presente i seguenti principi:

  • Crea ridondanza per l'alta disponibilità
  • Replica i dati tra regioni per il ripristino di emergenza (RE)
  • Progetta un'architettura multiregionale per la resilienza alle interruzioni regionali
  • Esegui la riduzione controllata dei livelli di servizio in caso di sovraccarico
  • Fail Safe in modo da preservare la funzionalità del sistema.
  • Progetta chiamate API e comandi operativi in modo che siano ripetibili
  • Prendi in considerazione le dipendenze:
    • Identifica e gestisci le dipendenze di sistema
    • Riduci al minimo le dipendenze critiche
  • Assicurati che sia possibile eseguire il rollback di ogni modifica

Inoltre, le seguenti attività contribuiscono all'affidabilità del servizio:

  • Elimina i colli di bottiglia della scalabilità
  • Previeni e riduci i picchi di traffico
  • Sanitizza e convalida gli input

Per ulteriori informazioni, vedi Progettare per la scalabilità e la disponibilità elevata.

Creare strumenti e processi operativi affidabili

Integra l'affidabilità negli strumenti e nei processi operativi seguendo questi passaggi:

  • Scegli nomi logici e autodefiniti per le applicazioni e i servizi
  • Usare i test canary per implementare implementazioni progressive delle procedure
  • Pianificare le promozioni e i lanci in modo da distribuire il traffico e ridurre il sovraccarico del sistema
  • Sviluppare processi di creazione, test e deployment programmatici
  • Difenditi da incidenti provocati da esseri umani, intenzionali o meno
  • Sviluppa, testa e documenta le attività di risposta agli errori
  • Sviluppa e testa regolarmente i passaggi di ripristino di emergenza
  • Ingegneria del caos: adotta l'inserimento degli errori nel sistema per determinare la tolleranza e la resilienza agli errori del servizio

Per saperne di più, consulta Creare processi operativi e strumenti affidabili.

Creazione di avvisi efficienti

Quando crei gli avvisi, ti consigliamo di procedere nel seguente modo:

  • Ottimizza gli avvisi per i ritardi appropriati
  • Avvisa in base ai sintomi, non alle cause
  • Avvisa in caso di irregolarità, non di medie

Per maggiori informazioni, consulta Creare avvisi efficienti nella categoria di affidabilità del framework dell'architettura.

Costruisci un processo collaborativo di gestione degli incidenti

La risposta e la gestione degli incidenti (IRM) sono essenziali per il ripristino dei servizi e per ridurre al minimo i danni. IRM effettivi comprendono:

  • Proprietà: assegna proprietari del servizio chiari.
  • Avvisi ottimizzati: migliora la risposta agli incidenti (IR) e riduci i tempi di rilevamento (TTD) con avvisi progettati in modo accurato.
  • Piani e formazione IRM: riduci i tempi di mitigazione (TTM) con piani, documentazione e formazione completi.
  • Dashboard: progetta layout e contenuti delle dashboard in modo da avvisare in modo efficiente quando si verificano problemi per ridurre al minimo il tempo di attenuazione.
  • Documentazione: creare e gestire contenuti chiari e concisi per tutti gli aspetti dell'assistenza dei servizi, comprese le procedure diagnostiche e la mitigazione degli scenari di interruzioni.
  • Cultura senza colpa:
    • Coltiva un ambiente privo di colpe nella tua organizzazione.
    • Stabilisci un processo post mortem che si concentri su cosa, non su chi.
    • Impara dalle tue interruzioni esaminando correttamente e identificando le aree da migliorare e prevenire le ricompense.

Per maggiori informazioni, consulta Creare un processo collaborativo di gestione degli incidenti nella categoria di affidabilità del framework dell'architettura.

Passaggi successivi