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 di macchine virtuali (VM) 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 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ù VM potrebbero andare perse a causa di guasti hardware o di sistema. L'elenco seguente contiene alcuni tipi di scenari di errore che puoi mitigare:
Errore imprevisto di una singola VM
Gli errori imprevisti di singole VM possono essere dovuti a guasti hardware o di sistema. Puoi attenuare questi eventi utilizzando dischi permanenti e script di avvio per salvare i dati e riattivare il software dopo aver riavviato 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 dischi permanenti e script di avvio per riconfigurare rapidamente il software.
Errori relativi a zone o regioni
Gli errori relativi a zone e regioni 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. Dovresti anche eseguire il backup dei dati o replicare i dischi permanenti in più zone.
Suggerimenti per la progettazione di sistemi resilienti
Per contribuire a mitigare gli errori delle VM, progetta l'applicazione in modo che sia resiliente ai guasti, alle interruzioni della rete e ai disastri imprevisti. Un sistema resiliente gestisce in modo elegante 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 ai guasti.
Utilizzare la migrazione live
Google 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, assicurandosi 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 VM.
La migrazione live è una tecnologia che consente di spostare le VM in esecuzione dai sistemi che stanno per essere sottoposti a interventi di manutenzione. Compute Engine esegue questa operazione automaticamente.
Durante la migrazione live, la VM potrebbe registrare una diminuzione delle prestazioni per un breve periodo di tempo. Per le VM che richiedono prestazioni massime e costanti, puoi utilizzare una configurazione in cui si arrestano e riavviano su un host non coinvolto in un evento di manutenzione. Questa opzione è adatta per le applicazioni generali che sono progettate anche per gestire arresti anomali o riavvii delle VM.
Per configurare le VM per la migrazione live o per configurarle in modo che si riavviino anziché eseguire la migrazione, consulta Impostare le opzioni di pianificazione delle istanze.
Distribuisci le VM
Crea VM in più regioni e zone in modo da avere VM alternative a cui fare riferimento se una zona o una regione contenente una delle tue VM viene interrotta. Se ospithi tutte le tue VM nella stessa zona o regione, non potrai accedere a nessuna di queste VM 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 accedo ad altre VM. I server DNS interni sono distribuiti in tutte le zone, pertanto 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 zonale non richiede l'unicità del nome della VM in tutte le regioni di un progetto, il che consente una creazione più rapida delle VM.
Per verificare se una VM utilizza nomi DNS di zona o nomi DNS globali, consulta Determinare il nome DNS interno di un'istanza VM.
Se il tuo progetto utilizza nomi DNS globali, puoi passare all'utilizzo di nomi DNS di zona. Per ulteriori informazioni, consulta Eseguire la migrazione ai nomi DNS zonali.
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 VM. 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 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 una VM. Gli script di avvio e di arresto 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 chiusura sono un modo efficiente e inestimabile per eseguire il bootstrap o arrestare correttamente le VM. Anziché configurare le VM utilizzando immagini personalizzate, può essere utile configurarle utilizzando 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 anche utilizzare gli script di avvio per assicurarti che i servizi siano in esecuzione nella VM. Spesso è più facile codificare le modifiche per configurare una VM in uno script di avvio rispetto a cercare di capire quali file o byte sono stati modificati in un'immagine personalizzata.
Gli script di arresto vengono eseguiti quando la VM 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 una VM.
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 permanenti o replicare i dati su un disco permanente in un'altra regione o zona.