Como projetar sistemas robustos

Neste documento, você vê as práticas recomendadas para projetar sistemas robustos no Compute Engine. Ele inclui orientações gerais e aborda alguns recursos no Compute Engine para você diminuir a inatividade da instância e se preparar quando as instâncias de máquina virtual (VM, na sigla em inglês) tiverem uma falha inesperada.

Um sistema robusto é aquele que resiste a uma determinada quantidade de falhas ou interrupções sem interromper o serviço ou afetar a experiência dos usuários na utilização do serviço. O Compute Engine conta com diversos recursos para evitar essas interrupções, mas 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. Estas são algumas das falhas que podem ocorrer:

  • Falha inesperada em uma única instância

    As falhas inesperadas em uma única instância ocorrem 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 inesperada de uma única instância

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

  • Falhas de zona ou região

    As falhas de zona e região são raras e 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, use regiões e zonas diferentes e implemente o 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 atenuar as falhas de instância, você precisa projetar o aplicativo no serviço do Compute Engine de modo que seja eficiente contra falhas, interrupções de rede e erros inesperados. É necessário que o sistema robusto processe as falhas de maneira otimizada, incluindo redirecionar o tráfego de uma instância desativada para outra ativa 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 a migração em tempo real nas suas máquinas virtuais ou defini-las para serem reiniciadas em vez de migradas, consulte Como definir opções de programação da instância.

Para mais informações sobre a migração em tempo real, consulte a documentação relacionada.

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ê usa nomes DNS internos ou outros específicos para indicar as instâncias na rede interna do Compute Engine, utilize os nomes DNS zonais. Os servidores DNS internos estão distribuídos em todas as zonas. Assim, você conta com os nomes DNS zonais na solução de problemas 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 está nos formatos a seguir:

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

em que:

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

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

Se o projeto usa nomes DNS globais, prepare 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 os grupos de instâncias gerenciadas para criar conjuntos homogêneos de instâncias. Assim, os balanceadores de carga direcionarão o tráfego para mais de uma instância de VM se uma única instância não estiver íntegra.

Os grupos de instâncias gerenciadas também oferecem recursos como dimensionamento automático e recuperação automática. Com o dimensionamento automático, você processa os picos de tráfego aumentando ou diminuindo o número de instâncias de VM com base em sinais específicos. Já a recuperação automática realiza a verificação de integridade e, se necessário, recria automaticamente as instâncias não íntegras.

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

Usar o 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 fazer o seguinte:

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

  • Implantar instâncias em várias regiões usando o balanceamento de carga global. Com o balanceamento de carga HTTP(S), o tráfego entra no sistema do Google Cloud Platform no local mais próximo do cliente. O balanceamento de carga entre regiões fornece redundância para que, se uma região ficar inacessível, o tráfego seja automaticamente desviado para outra região. Assim, o serviço continuará acessível usando o mesmo endereço IP externo.

  • Usar o escalonamento automático para adicionar ou excluir instâncias automaticamente em 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 oferece a verificação de integridade da VM para detectar e processar as falhas de instância.

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

Usar scripts de inicialização e encerramento

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, é útil configurá-las com scripts de inicialização. Eles são executados sempre que a instância é reiniciada devido a falhas e usados para instalar softwares e atualizações, além de garantir a execução dos serviços 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 são alterados em uma imagem personalizada.

Os scripts de encerramento realizam tarefas de última hora, como fazer backup de dados, salvar registros e encerrar conexões antes de interromper uma instância.

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

Fazer backup dos dados

Faça backup dos dados regularmente e em vários locais. É possível fazer backup dos arquivos para o Cloud Storage, criar snapshots de discos permanentes ou replicar os dados em um disco permanente em outra região ou zona.

Para copiar arquivos de uma instância para o 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 tiver configurado a instância para usar uma conta de serviço com um escopo do Cloud Storage, ignore esta e a próxima etapa.

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

  4. Use o comando a seguir para copiar os dados para o Cloud Storage:

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

Também é possível usar a ferramenta gcloud compute para copiar os arquivos para um computador local. Para mais informações, consulte Como copiar arquivos para uma instância ou a partir dela.

A seguir

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

Enviar comentários sobre…

Documentação do Compute Engine