Criar sistemas resilientes

Este documento descreve as práticas recomendadas para conceber sistemas resilientes no Compute Engine. Fornece conselhos gerais e aborda algumas funcionalidades no Compute Engine que podem ajudar a mitigar o tempo de inatividade das instâncias e a preparar-se para alturas em que as suas instâncias do Compute Engine falham inesperadamente.

Um sistema resiliente é um sistema que consegue resistir a uma determinada quantidade de falhas ou interrupções sem interromper o seu serviço nem afetar a experiência dos utilizadores que o usam. Embora o Compute Engine faça todos os esforços para evitar estas interrupções, determinados eventos são imprevisíveis e é melhor estar preparado para estes eventos.

Tipos de falhas

Em algum momento, uma ou mais das suas instâncias de computação podem ser perdidas devido a falhas de sistema ou de hardware. A lista seguinte contém alguns tipos de cenários de falha que pode mitigar:

Sugestões para criar sistemas resilientes

Para ajudar a mitigar as falhas das instâncias de computação, crie a sua aplicação para ser resiliente a falhas, interrupções de rede e desastres inesperados. Um sistema resiliente processa as falhas de forma elegante, por exemplo, redirecionando o tráfego de uma instância inacessível para uma instância ativa ou automatizando tarefas no reinício.

Seguem-se algumas sugestões gerais para ajudar a criar um sistema resiliente contra falhas.

Use a migração ao vivo

Google Cloud realiza periodicamente a manutenção da respetiva infraestrutura através da aplicação de patches aos sistemas com o software mais recente, da realização de testes de rotina e da manutenção preventiva, e, geralmente, garante que a respetiva infraestrutura é tão segura, rápida e eficiente quanto possível. O Compute Engine usa a migração em direto para garantir que esta manutenção da infraestrutura é transparente por predefinição para as suas instâncias de computação.

A migração em direto é uma tecnologia que move as suas instâncias em execução para longe de sistemas que estão prestes a ser submetidos a trabalhos de manutenção. O Compute Engine faz isto automaticamente para os tipos de instâncias suportados.

Durante a migração em direto, a instância pode ter uma diminuição no desempenho durante um curto período de tempo. Para instâncias que exigem um desempenho máximo constante, pode configurar as instâncias para serem reiniciadas noutro anfitrião em vez de serem submetidas a migração em direto. Se escolher esta opção, o Compute Engine para a instância e reinicia-a num anfitrião que não esteja envolvido num evento de manutenção. A terminação e o reinício da instância são adequados para aplicações gerais que também são criadas para processar falhas ou reinícios de instâncias.

Para configurar as suas instâncias para a migração em direto ou para as configurar para serem reiniciadas em vez de migradas, consulte o artigo Defina a política de manutenção do anfitrião para uma instância de computação.

Distribua as suas instâncias

Crie instâncias em mais do que uma região e zona para ter instâncias de computação alternativas para as quais apontar se uma zona ou uma região que contenha uma das suas instâncias for interrompida. Se criar todas as instâncias na mesma zona ou região, não vai poder aceder a nenhuma dessas instâncias se essa zona ou região ficar inacessível.

Use nomes DNS internos específicos da zona

Defina o tipo de DNS interno predefinido para o seu projeto ou organização como DNS zonal. Nas suas aplicações, use nomes DNS zonais quando aceder a outras instâncias de computação. Os servidores DNS internos são distribuídos por todas as zonas, pelo que pode confiar nos nomes DNS zonais para resolver, mesmo que existam falhas noutras localizações.

O DNS global é menos resiliente devido a falhas de ponto único. O DNS zonal mitiga o risco de interrupções entre regiões. O DNS zonal não requer a exclusividade do nome da instância em todas as regiões de um projeto, o que permite uma criação de instâncias mais rápida.

Para verificar se uma instância usa nomes DNS zonais ou nomes DNS globais, consulte o artigo Determine o nome DNS interno de uma VM.

Se o seu projeto usar nomes DNS globais, pode mudar para usar nomes DNS zonais. Para mais informações, consulte o artigo Use o DNS zonal para o seu tipo de DNS interno.

Crie grupos de VMs

Use grupos de instâncias geridas para criar grupos homogéneos de VMs, para que os balanceadores de carga possam direcionar o tráfego para mais do que uma VM caso uma única VM fique em mau estado.

Os grupos de instâncias geridas (GIGs) também oferecem funcionalidades como a escala automática e a autorreparação. O dimensionamento automático permite-lhe lidar com picos de tráfego dimensionando o número de VMs para cima ou para baixo com base em sinais específicos. A autorrecuperação realiza verificações de funcionamento e, se necessário, recria automaticamente VMs não saudáveis.

Os GIGs também estão disponíveis para regiões, pelo que pode criar um grupo de VMs distribuídas por várias zonas numa única região. Para mais informações, consulte o artigo Criar e gerir MIGs regionais.

Use o balanceamento de carga

Google Cloud oferece um serviço de balanceamento de carga que ajuda a suportar períodos de tráfego intenso para que não sobrecarregue as suas instâncias de computação. Com o Cloud Load Balancing, pode fazer o seguinte:

  • Implemente a sua aplicação em VMs em várias zonas através de MIGs regionais. Em seguida, pode configurar uma regra de encaminhamento que pode distribuir o tráfego por todas as VMs em todas as zonas na região. Cada regra de encaminhamento pode definir um ponto de entrada para a sua aplicação através de um endereço IP externo.

  • Implemente VMs em várias regiões através do balanceamento de carga global. O balanceamento de carga HTTP(S) permite que o seu tráfego entre no Google Cloud sistema na localização mais próxima do cliente. O balanceamento de carga entre regiões oferece 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 a escala automática para adicionar ou eliminar automaticamente VMs de um MIG com base nos aumentos ou nas diminuições da carga.

Além disso, o Cloud Load Balancing oferece a verificação de funcionamento da VM, o que permite detetar e processar falhas de VMs.

Use scripts de arranque e encerramento

O Compute Engine oferece scripts de arranque e encerramento que são executados quando uma instância é iniciada ou encerrada, respetivamente. Os scripts de arranque e encerramento podem automatizar tarefas como instalar software, executar atualizações, fazer cópias de segurança e registar dados.

Os scripts de arranque e encerramento são uma forma eficiente e valiosa de arrancar ou encerrar corretamente as suas instâncias. Em vez de configurar as suas instâncias com imagens personalizadas, pode ser vantajoso configurá-las com scripts de arranque.

Os scripts de arranque são executados sempre que a instância é reiniciada devido a falhas e podem ser usados para instalar software e atualizações. Também pode usar scripts de arranque para garantir que os serviços estão a ser executados na instância. A programação das alterações para configurar uma instância num script de arranque é frequentemente mais fácil do que tentar descobrir que ficheiros ou bytes foram alterados numa imagem personalizada.

Os scripts de encerramento são executados quando a instância é encerrada, intencionalmente ou não. Podem realizar tarefas de última hora, como fazer uma cópia de segurança dos dados, guardar registos e fechar graciosamente as ligações antes de parar uma instância.

Para mais informações, consulte os artigos Executar scripts de arranque e Executar scripts de encerramento.

Faça uma cópia de segurança dos seus dados

Faça cópias de segurança dos seus dados regularmente e em várias localizações. Pode carregar os seus ficheiros para o Cloud Storage, criar instantâneos de disco ou replicar os seus dados para um disco noutra zona através da replicação síncrona ou para outra região através da replicação assíncrona.