Como projetar sistemas robustos

Este documento descreve as práticas recomendadas para projetar sistemas robustos no Compute Engine. Ele dá orientações gerais e aborda alguns recursos no Compute Engine que podem ajudar a diminuir a inatividade da instância e preparar para momentos em que as instâncias da máquina virtual (VM, na sigla em inglês) sofrem uma falha inesperada.

Um sistema robusto é aquele que pode suportar um determinado montante de falhas ou interrupções sem interromper o serviço ou afetar a experiência dos usuários na utilização do serviço. Ainda que o Compute Engine faça todos os esforços para evitar essas interrupções, determinados eventos são imprevisíveis, e é melhor se preparar para eles.

Noções básicas sobre tipos de falhas

Em algum momento, uma ou mais instâncias de VM podem ser perdidas por causa de falhas no sistema ou no hardware. Entre algumas das falhas estão as seguintes:

  • Falha inesperada de instância única

    Falhas inesperadas de instância única podem ocorrer devido a uma falha de hardware ou sistema. Para atenuar esses eventos, use discos permanentes e scripts de inicialização para salvar os dados e reativar o software depois de reiniciar a instância.

  • Reinicialização de instância única inesperada

    Em algum momento, você passará por uma falha inesperada de instância única e uma reinicialização. Ao contrário de falhas inesperadas de instância única, a instância apresenta uma falha e é reinicializada automaticamente pelo serviço do Google Compute Engine. Para ajudar a atenuar esses eventos, faça backup dos dados, use discos permanentes e scripts de inicialização para reconfigurar o software rapidamente.

  • Falhas de zona ou região

    As falhas de zona e região são falhas raras que podem fazer com que todas as instâncias em uma determinada zona ou região fiquem inacessíveis ou apresentem falha.

    Para atenuar essas falhas, crie diversidade entre regiões e zonas e implemente balanceamento de carga. Também é preciso fazer backup dos dados ou replicar os discos permanentes entre várias zonas.

Dicas para projetar sistemas robustos

Para ajudar a atenuar as falhas de instância, é preciso projetar o aplicativo no serviço do Google Compute Engine para que seja robusto contra falhas, interrupções de rede e desastres inesperados. Um sistema robusto precisa conseguir lidar com as falhas de maneira suave, incluindo redirecionar o tráfego de uma instância desativada para uma instância ao vivo ou automatizar tarefas na reinicialização.

Aqui estão algumas dicas gerais para ajudar a projetar um sistema robusto contra falhas.

Usar migração ao vivo

O Google realiza periodicamente manutenção na infraestrutura corrigindo sistemas com o software mais recente, realizando testes de rotina e manutenção preventiva e garantindo de maneira geral de que nossa infraestrutura seja a mais rápida e eficiente possível. O Compute Engine emprega migração ao vivo para garantir que essa manutenção da infraestrutura seja transparente por padrão às instâncias da máquina virtual.

A migração ao vivo é uma tecnologia que o Google criou para afastar as instâncias em execução dos sistemas que estão prestes a passar por trabalhos de manutenção. O Compute Engine faz isso automaticamente.

Durante a migração ao vivo, a instância pode sofrer uma diminuição no desempenho por um curto período de tempo. Você também tem a opção de configurar as instâncias da máquina virtual para terminar e reinicializar a partir do evento de manutenção. Essa opção é adequada para instâncias que exigem desempenho máximo constante e quando o aplicativo geral é criado para lidar com reinicializações ou falhas de instâncias.

Para configurar as máquinas virtuais para migração ao vivo ou defini-la para ser reiniciada, em vez de migrar, consulte Como definir opções de programação da instância.

Para mais informações sobre migração ao vivo, consulte a documentação da Migração ao vivo.

Distribuir as instâncias

Crie instâncias em mais de uma região e zona. Dessa maneira, você tem instâncias de máquina virtual alternativas para as quais apontar se uma zona ou região que contiver uma das instâncias for interrompida. Se você hospedar todas as instâncias na mesma zona ou região, não será possível acessar nenhuma dessas instâncias se essa zona ou região ficar inacessível.

Usar nomes DNS internos específicos da zona

Se você usar nomes DNS internos ou nomes de instâncias para endereçar as instâncias em sua rede interna do Compute Engine, use nomes DNS zonais. Servidores DNS internos estão distribuídos em todas as zonas, para que você possa confiar em nomes DNS zonais para resolver, mesmo que haja falhas em outros locais. O nome de domínio interno totalmente qualificado (FQDN, na sigla em inglês) de uma instância pode ter os formatos a seguir:

  • instâncias que usam DNS zonal: [INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal
  • instâncias que usam DNS global: [INSTANCE_NAME].c.[PROJECT_ID].internal

em que:

  • [INSTANCE_NAME] é o nome da instância;
  • [ZONE] é a zona em que o disco está;
  • [PROJECT_ID] é o projeto que contém a instância.

Para verificar se uma instância usa nomes DNS zonais ou nomes DNS globais, consulte Como visualizar o nome DNS da instância.

Se o projeto usar nomes DNS globais, você poderá preparar os aplicativos para nomes DNS zonais e caminhos de pesquisa. Para mais informações, consulte Como migrar para nomes DNS zonais.

Criar grupos de instâncias

Use grupos de instâncias gerenciadas para criar grupos homogêneos de instâncias. Dessa maneira, os balanceadores de carga podem direcionar o tráfego para mais de uma instância de VM, caso uma única VM perca a integridade.

Os grupos de instâncias gerenciadas 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 instâncias de VM com base em sinais específicos, e a correção automática realiza a verificação de integridade e, se necessário, recria automaticamente instâncias sem integridade.

O grupo de instâncias gerenciadas também está disponível para regiões. Dessa maneira, você pode criar um grupo de instâncias de VM distribuídas entre várias zonas dentro de uma única região. Para mais informações, leia Como distribuir instâncias usando grupos de instâncias gerenciadas regionais.

Usar balanceamento de carga

O Google Cloud Platform oferece um serviço de balanceamento de carga que ajuda a acomodar períodos de tráfego intenso. Dessa maneira, você não sobrecarrega as instâncias. Com o serviço de balanceamento de carga, é possível:

  • implantar o aplicativo em instâncias dentro de várias zonas usando grupos de instâncias gerenciadas regionais. Em seguida, é possível configurar uma regra de encaminhamento capaz de espalhar o tráfego por todas as instâncias da máquina virtual em todas as zonas da região. Cada regra de encaminhamento pode definir um ponto de entrada para o aplicativo usando um endereço IP externo;

  • implantar instâncias em várias regiões usando balanceamento de carga global. O balanceamento de carga HTTP(S) permite que o tráfego entre no sistema do Google Cloud Platform no local mais próximo 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, de modo que o serviço fique acessível com o uso do mesmo endereço IP externo;

  • usar o escalonamento automático para adicionar ou excluir instâncias automaticamente de um grupo de instâncias gerenciadas com base em aumentos ou reduções de carga.

Além disso, o serviço de balanceamento de carga também oferece verificação de integridade da VM, fornecendo suporte na detecção e tratamento de falhas de instância.

Para mais informações, consulte Visão geral do balanceamento de carga e a documentação do balanceamento de carga.

Usar scripts de inicialização e desligamento

O Compute Engine oferece scripts de inicialização e desligamento executados quando uma instância é iniciada ou desligada, respectivamente. Esses scripts podem automatizar tarefas como instalar software, executar atualizações, fazer backups, registrar dados e assim por diante, quando a instância for iniciada pela primeira vez ou quando a instância for desligada, intencionalmente ou não.

Os scripts de inicialização e desligamento são uma forma eficiente e inestimável de inicializar ou desligar as instâncias de maneira limpa. Em vez de configurar as instâncias usando imagens de sistema operacional personalizadas, pode ser útil configurá-las com scripts de inicialização. Os scripts de inicialização são executados sempre que a instância é reinicializada ou reiniciada devido a falhas. Eles podem ser usados para instalar software e atualizações, bem como para garantir que os serviços estejam sendo executados na VM. Codificar as alterações para configurar uma instância em um script de inicialização é mais fácil do que tentar descobrir quais arquivos ou bytes foram alterados em uma imagem personalizada.

Os scripts de desligamento podem realizar tarefas de última hora, como fazer backup de dados, salvar logs e encerrar conexões sem dificuldades antes de parar uma instância.

Para mais informações, consulte Como executar scripts de inicialização e Como executar scripts de desligamento.

Fazer backup dos dados

Faça backup dos dados regularmente e em vários locais. Você pode fazer backup dos arquivos no Google Cloud Storage, criar instantâneos de disco permanente ou replicar os dados para um disco permanente em outra região ou zona.

Para copiar arquivos de uma instância para o Google Cloud Storage:

  1. Faça login na instância:

    gcloud compute ssh example-instance
    
  2. Se você nunca usou a ferramenta gsutil nessa instância, configure as credenciais.

    gcloud init
    

    Como alternativa, se você tiver configurado a instância para utilizar uma conta de serviço com um escopo do Google Cloud Storage, poderá ignorar esta etapa e a próxima.

  3. Siga as instruções para se autenticar no Google Cloud Storage.

  4. Copie os dados para o Google Cloud Storage usando o seguinte comando:

    gsutil cp <file1> <file2> <file3> ...  gs://<your bucket>
    

Você também pode usar a ferramenta gcloud compute para copiar arquivos para um computador local. Para mais informações, consulte Como copiar arquivos para uma instância ou a partir de uma instância.

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine