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 non funzionino in modo imprevisto.
Un sistema resiliente è un sistema in grado di resistere a un certo numero di guasti o interruzioni senza interrompere il servizio o influire sull'esperienza degli utenti nell'utilizzo del servizio. 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 calcolo 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 delle singole istanze possono essere dovuti a guasti hardware o del sistema. Puoi mitigare questi eventi utilizzando dischi permanenti e script di avvio per salvare i dati e riattivare il software dopo riavviare la VM.
Riavvio imprevisto di una singola VM
A un certo punto, potresti riscontrare un singolo errore imprevisto della VM e il riavvio. A differenza di un singolo errore imprevisto della VM, Compute Engine riavvia automaticamente la VM dopo l'errore. Per contribuire ad attenuare questi eventi, esegui il backup dei dati, utilizza Hyperdisk o Disco permanente e utilizza script di avvio per riconfigurare rapidamente il software.
Errori relativi a zone o regioni
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 calcolo, progetta l'applicazione in modo che sia resiliente a errori, interruzioni della rete e disastri imprevisti. Un sistema resiliente gestisce in modo elegante 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 ai guasti.
Utilizzare 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 l'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 istanze di calcolo.
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 breve periodo di tempo. 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 che sono progettate anche per gestire i guasti o i riavvii dell'istanza.
Per configurare le istanze per la migrazione live o per l'arresto temporaneo instead of migrazione, consulta Impostare il criterio di manutenzione dell'host per un'istanza.
Distribuisci le istanze
Crea istanze in più regioni e zone in modo da avere istanze di calcolo 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 zona
Imposta il tipo di DNS interno predefinito per il progetto o per l'organizzazione su DNS di zona. Nelle tue applicazioni, utilizza i nomi DNS di zona quando accedhi ad altre istanze di calcolo. I server DNS interni sono distribuiti tra tutte le zone, quindi puoi fare affidamento sui nomi DNS zonali per la risoluzione anche se si verificano errori in altre località.
Il DNS globale è meno resiliente a causa di errori singoli. 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, consulta Determinare 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, consulta Utilizzare il DNS di zona per il tipo di DNS interno.
Creare 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 operativa.
I gruppi di istanze gestite (MIG) offrono anche funzionalità come la scalabilità automatica e la riparazione automatica. La scalabilità automatica ti consente di gestire gli picchi di traffico aumentando o diminuendo il numero di VM in base a indicatori specifici. La riparazione automatica 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 su più zone all'interno di un'unica regione. Per ulteriori informazioni, consulta la pagina Creare e gestire i gruppi di istanze gestite a livello di regione.
Utilizzare il bilanciamento del carico
Google Cloud offre un servizio di bilanciamento del carico che ti aiuta a gestire i periodi di traffico elevato in modo da non sovraccaricare le istanze di calcolo. 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 area geografica. Poi, puoi configurare una regola di inoltro che può distribuire il traffico su tutte le VM in tutte le zone all'interno della regione. Ogni regola di inoltro può definire un punto di contatto 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 venga reindirizzato automaticamente a 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 chiusura possono automatizzare attività come l'installazione di software, l'esecuzione di aggiornamenti, la creazione di backup e la registrazione dei dati.
Sia gli script di avvio sia quelli di arresto sono un modo efficiente e inestimabile per eseguire il bootstrap o arrestare correttamente le istanze. Anziché configurare le istanze utilizzando immagini personalizzate, può essere utile configurarle utilizzando script di avvio.
Gli script di avvio vengono eseguiti ogni volta che l'istanza si riavvia o si riavvia 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. Possono eseguire attività dell'ultimo minuto come il backup dei dati, il salvataggio dei log e la chiusura corretta delle connessioni prima di arrestare un'istanza.
Per ulteriori informazioni, consulta Eseguire script di avvio e Eseguire script di arresto.
Esegui il 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 utilizzando la replica asincrona.