Este documento descreve as práticas recomendadas para projetar sistemas resilientes no Compute Engine. Ele fornece conselhos gerais e aborda alguns recursos do Compute Engine que podem ajudar a reduzir o tempo de inatividade das instâncias e a se preparar para momentos em que as instâncias do Compute Engine falham inesperadamente.
Um sistema resiliente é aquele que pode suportar uma certa quantidade de falhas ou interrupções sem interromper o serviço ou afetar a experiência dos usuários ao usá-lo. Embora o Compute Engine faça todos os esforços para evitar tais interrupções, certos eventos são imprevisíveis e é melhor estar preparado para eles.
Tipos de falhas
Em algum momento, uma ou mais instâncias de computação poderão ser perdidas devido a falhas no sistema ou no hardware. A lista a seguir contém alguns tipos de cenários de falha que você pode mitigar:
Falha inesperada de instância única
Falhas inesperadas de instância única podem ser causadas por falha de hardware ou sistema. Você pode atenuar esses eventos usando discos persistentes e scripts de inicialização para salvar seus dados e reativar o software após reiniciar a VM.
Reinicialização inesperada de VM única
Em algum momento, você poderá enfrentar uma falha inesperada de VM única e reinicializar. Ao contrário de uma falha inesperada de uma única VM, o Compute Engine reinicializa automaticamente a VM após ela falhar. Para ajudar a mitigar esses eventos, faça backup dos seus dados , use o hiperdiscoou disco permanentee use scripts de inicialização para reconfigurar software rapidamente.
Falhas de zona ou região
Falhas de zona e região são falhas raras que podem fazer com que todas as suas instâncias em uma determinada zona ou região fiquem inacessíveis ou falhem. Para mitigar essas falhas, crie diversidade entre regiões e zonas e implemente balanceamento de carga . Você também deve fazer backup de seus dados ou replicar seus discos em diversas zonas.
Dicas para projetar sistemas resilientes
Para ajudar a mitigar falhas nas instâncias de computação, projete seu aplicativo para ser resiliente contra falhas, interrupções de rede e desastres inesperados. Um sistema resiliente lida normalmente com falhas, por exemplo, redirecionando o tráfego de uma instância inacessível para uma instância ativa ou automatizando tarefas na reinicialização.
Aqui estão algumas dicas gerais para ajudá-lo a projetar um sistema resiliente contra falhas.
Use migração ao vivo
Google Cloud realiza periodicamente manutenção em sua infraestrutura, corrigindo sistemas com o software mais recente, realizando testes de rotina e manutenção preventiva e, de modo geral, garantindo que sua infraestrutura seja tão segura, rápida e eficiente quanto possível. O Compute Engine emprega migração em tempo real para garantir que a manutenção da infraestrutura seja transparente por padrão para suas instâncias de computação.
A migração ao vivo é uma tecnologia que afasta suas instâncias em execução de sistemas que estão prestes a passar por trabalhos de manutenção. O Compute Engine faz isso automaticamente para os tipos de instância compatíveis.
Durante a migração em tempo real, sua instância poderá sofrer uma diminuição no desempenho por um curto período. Para instâncias que exigem desempenho máximo e constante, você pode configurar as instâncias para serem reiniciadas em outro host em vez de passarem pela migração em tempo real. Se você escolher essa opção, o Compute Engine interromperá a instância e a reiniciará em um host que não esteja envolvido em um evento de manutenção. Encerrar e reiniciar a instância é adequado para aplicativos gerais que também são criados para lidar com falhas ou reinicializações da instância.
Para configurar suas instâncias para migração em tempo real ou configurá-las para reiniciar em vez de migrar, consulte Definir a política de manutenção do host para uma instância de computação .
Distribua suas instâncias
Crie instâncias em mais de uma região e zona para que você tenha instâncias de computação alternativas para apontar se uma zona ou região contendo uma de suas instâncias for interrompida. Se você criar todas as suas instâncias na mesma zona ou região, não poderá acessar nenhuma dessas instâncias se essa zona ou região se tornar inacessível.
Use nomes DNS internos específicos da zona
Defina o tipo de DNS interno padrão do seu projeto ou organização como DNS zonal. Nas suas aplicações, utilize nomes DNS zonais ao aceder a outras instâncias de computação. Os servidores DNS internos são distribuídos em todas as zonas, portanto você pode contar com nomes DNS zonais para resolver problemas mesmo se houver falhas em outros locais.
O DNS global é menos resiliente devido a falhas pontuais. O DNS zonal atenua o risco de interrupções entre regiões. O DNS zonal não exige exclusividade do nome da instância em todas as regiões de um projeto, o que permite uma criação mais rápida da instância.
Para verificar se uma instância usa nomes DNS zonais ou nomes DNS globais, consulte Determinar o nome DNS interno de uma VM .
Se o seu projeto usar nomes DNS globais, você poderá passar a usar nomes DNS zonais. Para obter mais informações, consulte Usar DNS zonal para seu tipo de DNS interno .
Crie grupos de VMs
Use grupos de instâncias gerenciadas para criar grupos homogêneos de VMs para que os balanceadores de carga possam direcionar o tráfego para mais de uma VM caso uma única VM fique não íntegra.
Os grupos de instâncias gerenciadas (MIGs) também oferecem recursos como escalonamento automático e recuperação automática . O escalonamento automático permite lidar com picos de tráfego aumentando ou diminuindo o número de VMs com base em sinais específicos. A recuperação automática realiza verificações de integridade e, se necessário, recria automaticamente VMs não íntegras.
Os MIGs também estão disponíveis para regiões, para que você possa criar um grupo de VMs distribuídas em diversas zonas dentro de uma única região. Para obter mais informações, consulte Criando e gerenciando MIGs regionais .
Usar balanceamento de carga
Google Cloud oferece um serviço de balanceamento de carga que ajuda a suportar períodos de tráfego intenso para não sobrecarregar suas instâncias de computação. Com o Cloud Load Balancing , você pode fazer o seguinte:
Implante seu aplicativo em VMs em diversas zonas usando MIGs regionais . Em seguida, você pode configurar uma regra de encaminhamento que possa distribuir o tráfego por todas as VMs em todas as zonas da região. Cada regra de encaminhamento pode definir um ponto de entrada para seu aplicativo usando um endereço IP externo.
Implante VMs em diversas regiões usando balanceamento de carga global. O balanceamento de carga HTTP(S) permite que seu tráfego entre no Google Cloud sistema no local mais próximo do cliente. O balanceamento de carga entre regiões fornece redundância para que, se uma região estiver inacessível, o tráfego seja automaticamente desviado para outra região. Desta forma, o seu serviço permanece acessível através do mesmo endereço IP externo.
Use o escalonamento automático para adicionar ou excluir automaticamente VMs de um MIG com base em aumentos ou diminuições na carga.
Além disso, o Cloud Load Balancing oferece verificação de integridade de VM, fornecendo suporte na detecção e tratamento de falhas de VM.
Use scripts de inicialização e desligamento
O Compute Engine oferece scripts de inicialização e encerramento que são executados quando uma instância é inicializada ou encerrada, respectivamente. Os scripts de inicialização e desligamento podem automatizar tarefas como instalação de software, execução de atualizações, criação de backups e registro de dados.
Os scripts de inicialização e encerramento são uma maneira eficiente e valiosa de inicializar ou encerrar suas instâncias de maneira limpa. Em vez de configurar suas instâncias usando imagens personalizadas, pode ser benéfico configurar instâncias usando scripts de inicialização.
Os scripts de inicialização são executados sempre que a instância é reinicializada ou reiniciada devido a falhas e podem ser usados para instalar software e atualizações. Você também pode usar scripts de inicialização para garantir que os serviços estejam em execução na instância. Codificar as alterações para configurar uma instância em um script de inicialização geralmente é mais fácil do que tentar descobrir quais arquivos ou bytes foram alterados em uma imagem personalizada.
Os scripts de desligamento são executados quando sua instância é encerrada, intencionalmente ou não. Eles podem executar tarefas de última hora, como fazer backup de dados, salvar logs e fechar conexões normalmente antes de interromper uma instância.
Para obter mais informações, consulte Executando scripts de inicialização e Executando scripts de desligamento .
Faça backup dos seus dados
Faça backup de seus dados regularmente e em vários locais. Você pode fazer upload de seus arquivos para o Cloud Storage , criar snapshots de disco ou replicar seus dados para um disco em outra zona usando replicação síncrona ou para outra região usando replicação assíncrona .