Progettazione di sistemi resilienti


Questo documento descrive le best practice per la progettazione di sistemi resilienti su Compute Engine. Fornisce consigli generali e illustra alcune funzionalità di Compute Engine che possono contribuire ad attenuare i tempi di inattività delle istanze e a prepararti ai casi in cui le istanze Compute Engine funzionino in modo imprevisto.

Un sistema resiliente è un sistema in grado di resistere a un certo numero di guasti o interruzioni senza sospendere il servizio o influire sull'esperienza degli utenti che lo utilizzano. Sebbene Compute Engine faccia di tutto per evitare interruzioni di questo tipo, alcuni eventi sono imprevedibili ed è meglio prepararsi.

Tipi di errori

A un certo punto, una o più istanze di computing potrebbero andare perse a causa di errori del sistema o dell'hardware. L'elenco seguente contiene alcuni tipi di scenari di errore che puoi mitigare:

  • Errore imprevisto di una singola istanza

    Gli errori imprevisti di una singola istanza possono essere dovuti a guasti hardware o di sistema. Puoi ridurre al minimo questi eventi utilizzando dischi permanenti e script di avvio per salvare i dati e riattivare il software dopo il riavvio della VM.

  • Riavvio imprevisto di una singola VM

    A un certo punto, potresti riscontrare un errore e un riavvio imprevisti di una singola VM. A differenza di quanto accade con un errore imprevisto di una singola VM, Compute Engine riavvia automaticamente la VM una volta verificatosi l'errore. Per contribuire ad attenuare questi eventi, esegui il backup dei dati, utilizza Hyperdisk o Persistent Disk e adotta lo script di avvio per riconfigurare rapidamente il software.

  • Errori di zona o regione

    Gli errori di zona e regione sono errori rari che possono causare l'inaccessibilità o il malfunzionamento di tutte le istanze in una determinata zona o regione. Per ridurre al minimo questi errori, crea diversità tra regioni e zone e implementa il bilanciamento del carico. Dovresti anche eseguire il backup dei dati o replicare i dischi in più zone.

Suggerimenti per la progettazione di sistemi resilienti

Per contribuire ad attenuare gli errori delle istanze di computing, progetta l'applicazione in modo che sia resiliente a errori, interruzioni della rete e disastri imprevisti. Un sistema resiliente gestisce agevolmente gli errori, ad esempio reindirizzando il traffico da un'istanza inaccessibile a un'istanza attiva o automatizzando le attività al riavvio.

Ecco alcuni suggerimenti generali per aiutarti a progettare un sistema resiliente agli errori.

Utilizza la migrazione live

Google Cloud esegue periodicamente la manutenzione della propria infrastruttura applicando patch ai sistemi con il software più recente, eseguendo test di routine e manutenzione preventiva e, in generale, garantendo che la propria infrastruttura sia la più sicura, veloce ed efficiente possibile. Compute Engine utilizza la migrazione live per garantire che la manutenzione dell'infrastruttura sia trasparente per impostazione predefinita per le istanze di computing.

La migrazione live è una tecnologia che sposta le istanze in esecuzione dai sistemi che stanno per essere sottoposti a interventi di manutenzione. Compute Engine esegue questa operazione automaticamente per i tipi di istanze supportati.

Durante la migrazione live, l'istanza potrebbe registrare una diminuzione delle prestazioni per un periodo di tempo breve. Per le istanze che richiedono prestazioni massime costanti, puoi configurarle in modo che vengano riavviate su un altro host anziché sottoposte a migrazione live. Se scegli questa opzione, Compute Engine arresta l'istanza e la riavvia su un host che non è coinvolto in un evento di manutenzione. L'interruzione e il riavvio dell'istanza sono adatti per le applicazioni complessive progettate anche per gestire gli errori o i riavvii dell'istanza.

Per configurare le istanze per la migrazione live o per far sì che si riavviino senza la necessità di eseguire la migrazione, vedi Imposta il criterio di manutenzione dell'host per un'istanza di computing.

Distribuisci le istanze

Crea istanze in più regioni e zone in modo da avere istanze di computing alternative a cui fare riferimento se una zona o una regione contenente una delle tue istanze viene interrotta. Se crei tutte le istanze nella stessa zona o regione, non potrai accedere a nessuna di queste se la zona o la regione diventa irraggiungibile.

Utilizza nomi DNS interni specifici per la zona

Imposta il tipo di DNS interno predefinito per il progetto o per l'organizzazione sul DNS di zona. Nelle tue applicazioni, utilizza i nomi DNS di zona quando accedi ad altre istanze di computing. I server DNS interni sono distribuiti tra tutte le zone, quindi puoi fare affidamento ai nomi DNS di zona per la risoluzione di errori che si verificano in altre posizioni.

Il DNS globale è meno resiliente a causa di errori in un singolo punto. Il DNS di zona riduce il rischio di interruzioni tra regioni. Il DNS di zona non richiede l'unicità del nome dell'istanza in tutte le regioni di un progetto, il che consente una creazione più rapida delle istanze.

Per verificare se un'istanza utilizza nomi DNS di zona o nomi DNS globali, vedi Determina il nome DNS interno di una VM.

Se il tuo progetto utilizza nomi DNS globali, puoi passare all'utilizzo di nomi DNS di zona. Per ulteriori informazioni, vedi Utilizza il DNS di zona per il tipo di DNS interno.

Crea gruppi di VM

Utilizza i gruppi di istanze gestite per creare gruppi omogenei di VM in modo che i bilanciatori del carico possano indirizzare il traffico a più di una VM nel caso in cui una singola VM non sia integra.

I gruppi di istanze gestite (MIG) offrono anche funzionalità come la scalabilità automatica e il ripristino automatico. La scalabilità automatica ti consente di gestire i picchi di traffico aumentando o diminuendo il numero di VM in base a indicatori specifici. Il ripristino automatico esegue controlli di integrità e, se necessario, ricrea automaticamente le VM non integre.

I gruppi di istanze gestite sono disponibili anche per le regioni, quindi puoi creare un gruppo di VM distribuite in più zone all'interno di una singola regione. Per scoprire di più, vedi Creazione e gestione di gruppi di istanze gestite a livello di regione.

Utilizza il bilanciamento del carico

Google Cloud offre un servizio di bilanciamento del carico che ti aiuta a gestire i periodi di traffico intenso in modo da non sovraccaricare le istanze di computing. Con Cloud Load Balancing, puoi effettuare le seguenti operazioni:

  • Esegui il deployment dell'applicazione su VM in più zone utilizzando gruppi di istanze gestite a livello di regione. Dopodiché, puoi configurare una regola di forwarding che può distribuire il traffico su tutte le VM in tutte le zone all'interno della regione. Ogni regola di forwarding può definire un entry point per la tua applicazione utilizzando un indirizzo IP esterno.

  • Esegui il deployment di VM in più regioni utilizzando il bilanciamento del carico globale. Il bilanciamento del carico HTTP(S) consente al traffico di entrare nel sistema Google Cloud nella posizione più vicina al client. Il bilanciamento del carico tra regioni offre ridondanza in modo che, se una regione non è raggiungibile, il traffico viene dirottato automaticamente in un'altra regione. In questo modo, il servizio rimane accessibile utilizzando lo stesso indirizzo IP esterno.

  • Utilizza la scalabilità automatica per aggiungere o eliminare automaticamente le VM da un gruppo di istanze gestite (MIG) in base all'aumento o alla riduzione del carico.

Inoltre, Cloud Load Balancing offre controlli di integrità delle VM, fornendo assistenza per il rilevamento e la gestione degli errori delle VM.

Usa gli script di avvio e arresto

Compute Engine offre script di avvio e arresto che vengono eseguiti rispettivamente all'avvio o all'arresto di un'istanza. Gli script di avvio e arresto possono automatizzare attività come l'installazione di software, l'esecuzione di aggiornamenti, la creazione di backup e la registrazione di dati.

Sia gli script di avvio sia quelli di arresto sono uno strumento prezioso ed efficiente per eseguire il bootstrap o arrestare correttamente le istanze. Anziché configurare le istanze utilizzando immagini personalizzate, può essere utile avvalersi di script di avvio.

Gli script di avvio vengono eseguiti ogni volta che l'istanza si riavvia o se l'avvio avviene a causa di errori e possono essere utilizzati per installare software e aggiornamenti. Puoi anche utilizzare gli script di avvio per assicurarti che i servizi siano in esecuzione all'interno dell'istanza. Spesso, è più facile codificare le modifiche per configurare un'istanza in uno script di avvio che cercare di capire quali file o byte sono stati modificati in un'immagine personalizzata.

Gli script di arresto vengono eseguiti quando l'istanza viene arrestata, intenzionalmente o meno. Prima di arrestare un'istanza, possono eseguire attività dell'ultimo minuto come il backup dei dati, il salvataggio dei log e la chiusura corretta delle connessioni.

Per ulteriori informazioni, vedi Esecuzione di script di avvio ed Esecuzione di script di arresto.

Backup dei dati

Esegui il backup dei dati regolarmente e in più posizioni. Puoi caricare i file su Cloud Storage, creare snapshot dei dischi o replicare i dati su un disco in un'altra zona utilizzando la replica sincrona o in un'altra regione tramite la replica asincrona.