Progettazione di sistemi resilienti

Questo documento descrive le best practice per la progettazione di sistemi resilienti su Compute Engine. Fornisce consigli generali e tratta alcune funzionalità di Compute Engine che possono aiutare a ridurre i tempi di inattività delle istanze e a prepararsi agli errori improvvisi delle tue istanze di macchine virtuali (VM).

Un sistema resiliente è un sistema in grado di resistere a una determinata quantità di errori o interruzioni senza interrompere il servizio o influire sull'esperienza degli utenti durante l'utilizzo del servizio. Sebbene Compute Engine faccia tutto il possibile per evitare queste interruzioni, alcuni eventi sono imprevedibili ed è quindi meglio essere preparati per questi eventi.

Tipi di errori

A un certo punto, una o più delle tue VM potrebbero andare perse a causa di guasti del sistema o dell'hardware. Il seguente elenco contiene alcuni tipi di scenari di errore che puoi mitigare:

  • Errore imprevisto con una singola VM

    Gli errori imprevisti di una singola VM possono essere dovuti a un guasto dell'hardware o del sistema. Puoi attenuare 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 imprevisto di una singola VM e il riavvio. A differenza di un errore imprevisto di una singola VM, Compute Engine riavvia automaticamente la VM in caso di errore. Per limitare questi eventi, esegui il backup dei dati, utilizza dischi permanenti e script di avvio per riconfigurare rapidamente il software.

  • Errori relativi a zona o regione

    Gli errori di zona e regione sono errori rari che possono causare l'inaccessibilità o l'errore di tutte le VM in una determinata zona o regione. Per mitigare questi errori, crea diversità tra regioni e zone e implementa il bilanciamento del carico. Devi inoltre eseguire il backup dei dati o replicare i dischi permanenti in più zone.

Suggerimenti per la progettazione di sistemi resilienti

Per ridurre gli errori delle VM, progetta la tua applicazione in modo che sia resiliente a guasti, interruzioni di rete e disastri imprevisti. Un sistema resiliente gestisce in modo controllato gli errori, ad esempio reindirizzando il traffico da una VM inaccessibile a una VM attiva o automatizzando le attività al riavvio.

Ecco alcuni suggerimenti generali per aiutarti a progettare un sistema resiliente contro i guasti.

Utilizza migrazione live

Google esegue periodicamente interventi di manutenzione sulla sua infrastruttura applicando patch ai sistemi con il software più recente, eseguendo test di routine e manutenzione preventiva e garantendo in generale che la sua infrastruttura sia il 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 tue VM.

La migrazione live è una tecnologia che sposta le VM in esecuzione dai sistemi in fase di manutenzione. Compute Engine esegue questa operazione automaticamente.

Durante la migrazione live, la VM potrebbe registrare un calo delle prestazioni per un breve periodo di tempo. Per le VM che richiedono prestazioni costanti e massime, puoi utilizzare una configurazione in cui si arrestano e si riavviano su un host non coinvolto in un evento di manutenzione. Questa opzione è adatta a tutte le applicazioni sviluppate anche per gestire guasti o riavvii delle VM.

Per configurare le VM per la migrazione live o per il riavvio anziché la migrazione, consulta Impostazione delle opzioni di pianificazione delle istanze.

Distribuisci le VM

Creare VM in più regioni e zone in modo da avere VM alternative a cui puntare in caso di interruzione di una zona o di una regione contenente una delle tue VM. Se ospiti tutte le VM nella stessa zona o nella stessa regione, non potrai accedere a nessuna di queste VM se la zona o la regione non è raggiungibile.

Utilizza nomi DNS interni specifici della zona

Imposta il tipo DNS interno predefinito per il progetto o l'organizzazione sul DNS di zona. Nelle applicazioni, utilizza nomi DNS di zona quando accedi ad altre VM. I server DNS interni sono distribuiti in tutte le zone, perciò puoi fare affidamento sui nomi DNS di zona per la risoluzione anche in caso di errori in altre località.

Il DNS globale è meno resiliente a causa di errori relativi a un singolo punto. Il DNS di zona riduce il rischio di interruzioni tra regioni. Il DNS di zona non richiede l'univocità dei nomi delle VM in tutte le regioni di un progetto, il che consente di creare più rapidamente le VM.

Per verificare se una VM utilizza nomi DNS di zona o nomi DNS globali, consulta Determinazione del nome DNS interno per un'istanza VM.

Se il tuo progetto utilizza nomi DNS globali, puoi passare ai nomi DNS di zona. Per maggiori informazioni, consulta Migrazione ai nomi DNS di zona.

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 sia in stato non integro.

I gruppi di istanze gestite offrono anche funzionalità come la scalabilità automatica e la autohealing. La scalabilità automatica ti consente di gestire i picchi di traffico scalando il numero di VM in alto o in basso in base a indicatori specifici. La riparazione automatica esegue il controllo 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 distribuito in più zone all'interno di una singola regione. Per maggiori informazioni, consulta Creazione e gestione dei gruppi di istanze gestite a livello di regione.

Utilizza il bilanciamento del carico

Google Cloud offre un servizio di bilanciamento del carico che consente di supportare periodi di traffico intenso per non sovraccaricare le VM. Con Cloud Load Balancing, puoi:

  • Esegui il deployment dell'applicazione su VM all'interno di più zone utilizzando gruppi di istanze gestite a livello di regione. Quindi, puoi configurare una regola di forwarding in grado di distribuire il traffico tra tutte le VM in tutte le zone all'interno della regione. Ogni regola di forwarding può definire un punto di ingresso per l'applicazione utilizzando un indirizzo IP esterno.

  • Esegui il deployment delle 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 località più vicina al client. Il bilanciamento del carico tra regioni offre ridondanza in modo che, se una regione non è raggiungibile, il traffico venga automaticamente dirottato su un'altra regione. In questo modo il servizio rimane raggiungibile utilizzando lo stesso indirizzo IP esterno.

  • Utilizza la scalabilità automatica per aggiungere o eliminare automaticamente le VM da un gruppo di istanze gestite in base agli incrementi o alle riduzioni del carico.

Inoltre, Cloud Load Balancing offre il controllo di integrità delle VM, fornendo supporto nel rilevamento e nella gestione degli errori delle VM.

Usa gli script di avvio e arresto

Compute Engine offre script di avvio e chiusura che vengono eseguiti rispettivamente quando una VM viene avviata o arrestata. Gli script di avvio e di arresto possono automatizzare attività come l'installazione di software, l'esecuzione di aggiornamenti, i backup e il logging dei dati.

Sia gli script di avvio che di chiusura sono un modo efficiente e prezioso per eseguire il bootstrap o l'arresto delle VM in modo pulito. Invece di configurare le VM con immagini personalizzate, può essere utile configurare le VM tramite script di avvio.

Gli script di avvio vengono eseguiti ogni volta che la VM si riavvia o si riavvia a causa di errori e possono essere utilizzati per installare software e aggiornamenti. Puoi usare gli script di avvio per assicurarti che i servizi siano in esecuzione all'interno della VM. Codificare le modifiche per configurare una VM in uno script di avvio è spesso più semplice che provare a capire quali file o byte sono stati modificati su un'immagine personalizzata.

Gli script di arresto vengono eseguiti all'arresto della VM, che sia intenzionalmente o meno. Possono eseguire attività dell'ultimo minuto come eseguire il backup dei dati, il salvataggio dei log e la chiusura controllata delle connessioni prima di arrestare una VM.

Per ulteriori informazioni, consulta Esecuzione di script di avvio ed Esecuzione di script di chiusura.

Esegui il backup dei dati

Esegui regolarmente il backup dei dati e da più posizioni. Puoi caricare i file in Cloud Storage, creare snapshot di dischi permanenti o replicare i dati su un disco permanente in un'altra regione o zona.