Excelência operacional

Nesta seção do framework de arquitetura, veremos como a excelência operacional resulta da eficiência dos sistemas de execução, gerenciamento e monitoramento que agregam valor comercial.

O framework é composto pela seguinte série de artigos:

A qualidade operacional cria uma base para outro princípio importante, a confiabilidade. Consulte a seção Confiança para ver os requisitos técnicos e processuais relacionados à arquitetura e à operação de serviços confiáveis no Google Cloud.

Estratégias

Use estas estratégias para alcançar a eficiência operacional.

Automatizar a criação, os testes e a implantação. Use pipelines de integração e implantação contínuas (CI/CD) para criar testes automatizados nos lançamentos. Realize testes e implantação de integração automatizados.

Monitorar as métricas de objetivos de negócios. Defina, avalie e alerte sobre métricas comerciais relevantes.

Realizar testes de recuperação de desastres. Não espere por um desastre. Em vez disso, verifique periodicamente se os procedimentos de recuperação de desastres funcionam e teste-os regularmente.

Práticas recomendadas

Siga estas práticas para alcançar a excelência operacional.

  • Aumentar a velocidade do desenvolvimento e lançamento de software.
  • Monitorar a integridade do sistema e do negócio.
  • Planejar e projetar para falhas.

Nas seções a seguir, abordamos as práticas recomendadas com detalhes.

Aumentar a velocidade de desenvolvimento e lançamento

Use uma abordagem de CI/CD para aumentar a velocidade. Primeiro, você torna sua equipe de desenvolvimento de software mais produtiva e automatiza os testes de integração no processo de criação. Você automatiza a implantação depois que o build atende aos critérios de teste específicos. Seus desenvolvedores podem fazer alterações menores e mais frequentes. As alterações são testadas exaustivamente, e o tempo para implantá-las é reduzido.

Nesta seção, descrevemos os elementos de uma abordagem de CI/CD: engenharia de versões, automação, repositórios de código central, pipelines de compilação, testes e implantação.

Engenharia de versões

A engenharia de versões é uma função de trabalho que supervisiona como o software é criado e entregue. A engenharia de versões é guiada por quatro práticas:

  • Modo de autoatendimento. Estabeleça diretrizes para ajudar os engenheiros de software a evitar erros comuns. Aplicado por processos automatizados.
  • Lançamentos frequentes. A alta velocidade soluciona problemas e facilita a correção de problemas. Os lançamentos frequentes dependem de testes de unidade automatizados.
  • Builds herméticos. Use ferramentas de compilação para garantir a consistência. Controle as versões de compiladores de build para criar versões atuais e compará-las com as de um mês atrás.
  • Aplicação da política. Todas as alterações precisam de revisão de código. O ideal é que incluam um conjunto de diretrizes e políticas para reforçar a segurança. Isso melhora a revisão de código, a solução de problemas e o teste de lançamentos.

Automação

Automatize o pipeline de compilação e lançamento para verificar problemas conhecidos e realizar testes rápidos. Também é possível usar a automação para eliminar tarefas repetitivas.

Repositórios de código central

Armazene seu código em um repositório central, com controle de versão e rotulado (por exemplo, test, dev, prod) conforme necessário. Essas etapas garantem que o pipeline de compilação produza resultados consistentes. No Google Cloud, é possível armazenar o código na versão do Cloud Source Repositories e integrá-lo a vários produtos.

Criar pipelines

Controle a versão da configuração de compilação para garantir que todos os builds sejam consistentes e para que você possa reverter para a última configuração mais conhecida, se necessário. No Google Cloud, o Cloud Build define dependências e versões para criar um pacote de aplicativos. Use o Cloud Functions para acionar um processo de compilação periodicamente ou acionar builds em eventos específicos quando o novo código for verificado. Também é possível usar o Cloud Functions para acionar testes e automatizar todo o pipeline.

Testes

Os testes são essenciais em um lançamento bem-sucedido. Exemplos de teste incluem:

  • Testes de unidade. Eles são rápidos e realizam implantações com eficiência.
  • Testes de integração. Esses testes podem ficar complexos quando você testa a integração com serviços interconectados.
  • Testes do sistema. Eles são demorados e complexos, mas identificam casos extremos e corrigir problemas antes da implantação.

É possível realizar outros testes, incluindo testes estáticos, de carga, de segurança e assim por diante, antes de implantar o aplicativo na produção. Depois de automatizar os testes, atualize e adicione novos testes para melhorar e manter a integridade operacional da implantação.

Implantação

Escolha como seu aplicativo será lançado. Recomendamos fazer testes canário e observar se há erros no sistema, o que será mais fácil se você tiver um sistema robusto de monitoramento e alerta. No Google Cloud, é possível usar grupos de instâncias gerenciadas (MIGs, na sigla em inglês) para realizar testes A/B ou canário, bem como realizar um lançamento lento ou uma reversão, se necessário.

Perguntas sobre design

  • Como sua equipe de desenvolvimento gerencia o build e o lançamento?
  • Quais testes de integração e segurança sua equipe de desenvolvimento utiliza?
  • Como fazer a reversão?

Recomendações

  • Torne o pipeline de CI/CD a única maneira de implantar na produção.
  • Isole e proteja seu ambiente de CI/CD.
  • Crie apenas uma vez e promova o resultado por meio do pipeline.
  • Mantenha seus pipelines de CI/CD rápidos.
  • Minimize a ramificação do sistema de controle de versões.

Principais serviços

O Cloud Source Repositories é um serviço de repositório particular do Git com todos os recursos hospedado no Google Cloud. É possível usar o Cloud Source Repositories para o desenvolvimento colaborativo de qualquer aplicativo ou serviço.

O Container Registry é uma central com controle de acesso avançado para sua equipe gerenciar imagens do Docker, realizar análises de vulnerabilidade e definir as permissões de acesso. Com as integrações de CI/CD, é possível configurar pipelines do Docker totalmente automatizados para ter feedback rápido.

O Cloud Build é um serviço que executa seus builds na infraestrutura do Google Cloud. O Cloud Build pode importar o código-fonte do GitHub, do Bitbucket, do Cloud Storage ou do Cloud Source Repositories, executar um build de acordo com suas especificações e produzir artefatos como contêineres do Docker ou arquivos Java.

Monitorar a integridade do sistema e da empresa

O projeto de recursos e avaliação do DevOps (DORA, na sigla em inglês) define o monitoramento da seguinte maneira:

Monitoramento é o processo de coleta, análise e uso de informações para acompanhar aplicativos e infraestrutura, permitindo orientar as decisões de negócios. O monitoramento é um recurso importante, porque fornece informações sobre seus sistemas e trabalho.

O monitoramento pode ser usado para tomar decisões sobre o impacto das alterações no serviço, aplicar o método científico à resposta a incidentes e avaliar o alinhamento do serviço com as metas da sua empresa. Com o monitoramento, é possível:

  • analisar tendências de longo prazo;
  • comparar experiências ao longo do tempo;
  • definir alertas sobre métricas importantes;
  • criar painéis relevantes em tempo real;
  • realizar análises retroativas;

monitorar métricas de negócios e de integridade do sistema. As métricas de negócios ajudam a entender o suporte que os sistemas oferecem ao seu negócio. Por exemplo, é possível monitorar o custo para atender um usuário em um aplicativo, a mudança no volume de tráfego para seu site após uma reformulação ou quanto tempo um cliente leva para comprar um produto no site. As métricas de integridade do sistema ajudam a entender se os sistemas estão funcionando corretamente e dentro de níveis de desempenho aceitáveis.

Use os quatro sinais de ouro a seguir para monitorar seu sistema:

  • Latência. O tempo necessário para atender uma solicitação.
  • Tráfego. Quanto está sendo demandado do seu sistema.
  • Erros. A taxa de solicitações que falham. As solicitações podem falhar explicitamente (por exemplo, HTTP 500s), implicitamente (por exemplo, uma resposta HTTP 200 bem-sucedida, mas com conteúdo errado) ou por política (por exemplo, se você se comprometeu com tempos de resposta de um segundo, qualquer solicitação que leva mais de um segundo é um erro).
  • Saturação. Quanto seu serviço está cheio. Uma medida dos recursos mais restritos. Ou seja, em um sistema com restrição de memória, mostra a memória, mas em um sistema com E/S restrita, mostra a E/S.

Geração de registros

Os serviços de geração de registros são essenciais para monitorar sistemas. Embora as métricas sejam a base de itens específicos para monitorar, os registros contêm informações valiosas necessárias para depuração, análise relacionada à segurança e requisitos de conformidade. O Google Cloud inclui o Cloud Logging, um serviço de geração de registros integrado que pode ser usado para armazenar, pesquisar, analisar, monitorar e alertar sobre dados de registro e eventos do Google Cloud. O Cloud Logging coleta registros dos serviços do Google Cloud automaticamente. Esses registros podem ser usados para criar métricas para monitoramento e exportações de registros para serviços externos, como Cloud Storage, BigQuery e Pub/Sub.

Métricas

Defina as métricas para avaliar o comportamento da implantação. Certifique-se de que suas definições de métrica sempre representem necessidades de negócios e considere promover ou combinar algumas métricas para formar indicadores de nível de serviço (SLIs). Para detalhes, consulte Confiabilidade.

Todos os níveis do serviço geram métricas, desde a infraestrutura e a rede até a lógica de negócios. Os exemplos incluem:

  • solicitações por segundo, conforme medido pelo balanceador de carga;
  • total de blocos de disco lidos por disco;
  • pacotes enviados por uma determinada interface de rede;
  • tamanho do heap de memória para um determinado processo;
  • distribuição de latências de resposta;
  • número de consultas inválidas rejeitadas por uma instância de banco de dados.

Monitoramento

Monitorar um aplicativo complexo é um esforço de engenharia significativo por si só. O Google Cloud oferece o Cloud Monitoring, um serviço gerenciado que faz parte do pacote de operações do Google Cloud. É possível usar o Cloud Monitoring para monitorar os serviços e as métricas personalizadas do Google Cloud. Ele também fornece uma API para integração com ferramentas de monitoramento de terceiros.

O Cloud Monitoring agrega métricas, registros e eventos da infraestrutura, oferecendo aos desenvolvedores e operadores um conjunto avançado de sinais observáveis para acelerar a análise da causa raiz e reduzir o tempo médio de resolução (MTTR, na sigla em inglês). É possível definir alertas e métricas personalizadas que atendam aos objetivos de negócios e ajudem a agregar, visualizar e monitorar a integridade do sistema.

O Cloud Monitoring conta com painéis padrão para serviços de aplicativos de nuvem e de código aberto. Usando o modelo de métricas, é possível definir painéis personalizados com ferramentas avançadas de visualização e configurar gráficos no Metrics Explorer.

Painéis

Depois de fazer o monitoramento, crie painéis relevantes para você realizar ações. Seus painéis devem ser simples e fáceis de ler. Realize e visualize análises de curto prazo ou em tempo real e análises de longo prazo. Para detalhes, consulte Confiabilidade.

Alertas

Verifique se o sistema de alertas está mapeado diretamente para os quatro sinais de ouro do monitoramento do sistema, para que você possa comparar o desempenho ao longo do tempo para determinar a velocidade do recurso ou reverter as alterações.

Torne os alertas práticos. Ao enviar alertas, inclua uma descrição e forneça todas as informações necessárias para a pessoa que estiver a postos agir imediatamente. Não devem ser necessários mais do que alguns cliques e um pouco de navegação para entender como agir de acordo com os alertas.

Sempre tente reduzir o esforço, por exemplo, eliminando ou automatizando correções para erros que você vê com frequência. Permita que a pessoa que está a postos se concentre em tornar os componentes operacionais confiáveis. Para detalhes, consulte Confiabilidade.

Caminho de escalonamento

Um caminho de escalonamento bem definido é essencial para reduzir o esforço envolvido no suporte aos produtos do Google Cloud. Esse caminho inclui aprender a trabalhar com a equipe de suporte do Google, encontrar documentos de arquitetura otimizados para engenheiros de suporte, definir como se comunicar durante uma interrupção e configurar o monitoramento e a geração de registros para diagnosticar problemas.

Para começar a definir um caminho de escalonamento, verifique se os administradores de segurança, rede e sistema estão configurados corretamente para receber e-mails e alertas importantes do Google Cloud. Isso ajuda os administradores a tomar decisões coerentes e a possivelmente corrigir problemas com antecedência. Da mesma forma, verifique se os proprietários do projeto têm nomes de usuário roteáveis por e-mail para receber e-mails importantes.

Recomendações

  • Escolha métricas relevantes que correspondam às necessidades do seu negócio.
  • Use o Cloud Monitoring e implante agentes de monitoramento para métricas personalizadas, se necessário.
  • Verifique se o Cloud Logging está configurado para todas as entradas de registro.
  • Crie alertas bem definidos, como porcentagem de sucesso ou falha.
  • Envie alertas com informações para tomar medidas.
  • Considere comprar um pacote de suporte empresarial ou baseado em papéis.
  • Ao trabalhar com o suporte do Cloud, defina um caminho de escalonamento e forneça indicadores úteis, como horário, produto e local.

Principais serviços

O Cloud Monitoring fornece coleta, agregação e painéis de métricas, além de um framework de alertas e verificações de endpoints para aplicativos da Web e outros serviços acessíveis pela Internet.

O Cloud Logging permite filtrar, pesquisar, visualizar e exportar da nuvem e dos serviços de aplicativos de código aberto para registros do BigQuery, do Cloud Storage ou do Pub/Sub. É possível definir métricas com base no conteúdo do registro incorporado em painéis e alertas.

O Cloud Debugger conecta os dados de produção do aplicativo ao código-fonte inspecionando o estado do aplicativo em qualquer local do código na produção sem interromper ou atrasar as solicitações do aplicativo.

O Error Reporting analisa e agrega os erros nos aplicativos de nuvem e notifica quando novos erros são detectados.

O Cloud Trace conta com amostragem de latência e geração de relatórios para o App Engine, inclusive estatísticas por URL e distribuições de latência.

O Cloud Profiler fornece a criação contínua de perfis do consumo de recursos nos aplicativos de produção para identificar e eliminar problemas de desempenho.

Recursos

Padrões de projeto para exportação de registros

Projetar para recuperação de desastres

Projetar seu sistema para prever e lidar com cenários de falha garante que, se houver uma catástrofe, o impacto nos sistemas será minimizado. Para antecipar falhas, verifique se você tem um plano de recuperação de desastres (DR) bem definido e testado regularmente para fazer backup e restaurar serviços e dados.

Casos de interrupção de serviço podem acontecer a qualquer momento. Sua rede pode ter uma interrupção, o envio mais recente do aplicativo pode apresentar um bug crítico ou pode ser necessário enfrentar um desastre natural. Quando as coisas dão errado, é importante ter um plano de recuperação de desastres robusto, direcionado e bem testado.

Planejamento

A DR é um subconjunto do planejamento de continuidade de negócios. O planejamento de recuperação de desastres começa com uma análise de impacto nos negócios, em que são definidas duas métricas principais:

  • Um objetivo do tempo de recuperação (RTO, na sigla em inglês), que é o período máximo aceitável em que o aplicativo pode ficar off-line. Esse valor é normalmente definido como parte de um contrato maior de nível de serviço (SLA).

  • Um objetivo do ponto de recuperação (RPO, na sigla em inglês), que é o período máximo aceitável em que os dados podem ser perdidos pelo aplicativo devido a um incidente grave. Essa métrica varia de acordo com a forma como os dados são usados. Por exemplo, os dados do usuário que são frequentemente modificados podem ter um RPO de apenas alguns minutos. Dados menos importantes e modificados com pouca frequência podem ter um RPO de várias horas. Nessa métrica, é descrito apenas o tempo. Não são abordadas perdas de quantidade ou qualidade dos dados.

Normalmente, quanto menores forem os valores de RTO e RPO (ou seja, quanto mais rápido o aplicativo precisar se recuperar de uma interrupção), mais custos serão necessários para a execução. O gráfico a seguir mostra a proporção de custo para RTO/RPO:

Proporção de custo para RTO/RPO, mostrando que, quanto mais rápido o aplicativo precisa ser recuperado,
mais ele custa para ser executado.

Como valores de RTO e RPO menores geralmente significam maior complexidade, a sobrecarga administrativa segue uma curva semelhante. Por exemplo, um aplicativo de alta disponibilidade (HA, na sigla em inglês) pode exigir que você gerencie a distribuição entre dois data centers fisicamente separados, a replicação e muito mais.

Os valores de RTO e RPO normalmente se acumulam em outra métrica: o objetivo de nível de serviço (SLO), que é um elemento importante e mensurável de um SLA.

  • Um SLA é o acordo completo que especifica qual serviço deve ser provisionado, como é o suporte, os horários, os locais, os custos, o desempenho, as penalidades e as responsabilidades das partes envolvidas.
  • Os SLOs são características específicas e mensuráveis do SLA, como disponibilidade, capacidade, frequência, tempo de resposta ou qualidade.

Um SLA pode conter muitos SLOs. RTOs e RPOs são mensuráveis e devem ser considerados como SLOs.

Requisitos de infraestrutura

Na recuperação de desastres, é uma prática recomendada considerar vários requisitos, incluindo:

  • capacidade: aquisição de recursos suficientes para fazer o dimensionamento conforme necessário;
  • segurança: segurança física para proteger os recursos;
  • infraestrutura de rede: componentes de software, como firewalls e balanceadores de carga;
  • suporte: disponibilização de técnicos capacitados para realizar manutenções e solucionar problemas;
  • largura de banda: largura de banda adequada para carga de pico;
  • instalações: infraestrutura física, incluindo equipamentos e energia.

Recuperação de desastres no Google Cloud

Em comparação com o atendimento local dos requisitos, o Google Cloud pode reduzir o custo de atender a RTOs e RPOs. O Google Cloud ignora a maioria ou todos os fatores complicadores relacionados a hardware físico, eliminando muitos custos de negócios. Além disso, o foco do Google Cloud na simplicidade administrativa foi planejado para reduzir os custos de gerenciamento de um aplicativo complexo.

O Google Cloud oferece vários recursos relevantes para o planejamento de recuperação de desastres:

Rede global. O Google tem uma das maiores e mais avançadas redes de computadores do mundo. A rede de backbone do Google utiliza uma rede avançada, definida por software, e conta com serviços de armazenamento em cache próximo dos usuários finais para oferecer desempenho rápido, consistente e escalonável.

Redundância. Vários pontos de presença (PoPs, na sigla em inglês) em todo o mundo garantem uma redundância forte. Seus dados são espelhados automaticamente em dispositivos de armazenamento em vários locais.

Escalonabilidade. O Google Cloud foi projetado para escalonar como outros produtos do Google, como a Pesquisa e o Gmail, mesmo diante de um grande pico de tráfego. Os serviços gerenciados, como o App Engine, os escalonadores automáticos do Compute Engine e o Datastore oferecem escalonamento automático que permite que o aplicativo possa aumentar e diminuir conforme necessário.

Segurança. O modelo de segurança do Google se baseia em mais de 15 anos de experiência, ajudando a manter os clientes seguros em aplicativos do Google, como o Gmail e o G Suite. Além disso, as equipes de engenharia de confiabilidade do site do Google garantem alta disponibilidade e impedem o abuso de recursos da plataforma.

Conformidade. O Google passa regularmente por auditorias independentes realizadas por terceiros para verificar se o Google Cloud está alinhado às normas e práticas recomendadas de segurança, privacidade e conformidade. O Google Cloud é compatível com a conformidade com certificações como ISO 27001, SOC 2/3 e PCI DSS 3.2.

Recomendações

  • Defina seus objetivos de RTO e RPO.
  • Projete seu plano de DR com base nas soluções de dados e aplicativos.
  • Teste seu plano de recuperação de desastres manualmente pelo menos uma vez por ano.
  • Considere implementar a injeção de falha controlada para detectar regressões antecipadamente.
  • Aproveite a engenharia de caos para encontrar áreas de risco.

Principais serviços

O snapshot do disco permanente oferece backups incrementais ou snapshots de máquinas virtuais (VMs) do Compute Engine que podem ser copiadas entre regiões e usadas para recriar discos permanentes em caso de desastre.

A migração em tempo real mantém as instâncias de VM em execução mesmo quando ocorre um evento do sistema host, como uma atualização de software ou hardware.

O Cloud Storage é um armazenamento de objetos que fornece classes de armazenamento, como Nearline e Coldline, adequadas para casos de uso específicos, como backup.

O Cloud DNS oferece uma maneira programática de gerenciar entradas de DNS como parte de um processo de recuperação automatizado. A rede global de servidores de nomes Anycast do Google é usada pelo Cloud DNS para atender a zonas de DNS de locais redundantes do mundo todo, oferecendo alta disponibilidade e baixa latência aos usuários.

Recursos