Migrar para o Google Cloud: otimize seu ambiente

Last reviewed 2023-12-07 UTC

Este documento ajuda você a planejar e projetar a fase de otimização da migração para o Google Cloud. Depois de implantar as cargas de trabalho no Google Cloud, comece a otimizar seu ambiente.

Este documento faz parte da seguinte série de várias partes sobre a migração para o Google Cloud:

No diagrama a seguir, veja o caminho da sua jornada de migração.

Caminho de migração com quatro fases.

Na fase de otimização, você refina o ambiente para torná-lo mais eficiente do que a implantação inicial.

Este documento é útil se você planeja otimizar um ambiente atual após a migração para o Google Cloud ou se está avaliando a oportunidade de otimização e quiser saber como será a aparência dele.

A estrutura da fase de otimização segue o mesmo framework da migração descrito nesta série: avaliar, planejar, implantar e otimizar. É possível usar essa estrutura versátil para planejar toda a migração e separar ações independentes em cada fase. Quando você concluir a última etapa da fase de otimização, poderá recomeçar essa fase e encontrar novos objetivos de otimização. A fase de otimização é definida como um loop de otimização. Uma execução do loop é definida como uma iteração de otimização.

A otimização é uma tarefa contínua. Você otimiza constantemente o ambiente à medida que ele evolui. Para evitar esforços descontrolados e duplicados, defina metas de otimização mensuráveis e termine quando as atingir. Depois disso, defina metas novas e mais ambiciosas, mas considere que a otimização tem um custo em termos de recursos, tempo, esforço e habilidades.

O diagrama a seguir mostra o loop de otimização.

Árvore de decisões da otimização. Para uma imagem maior desse diagrama, consulte Árvore de decisões da otimização.

Neste documento, você executará as seguintes etapas repetíveis do loop de otimização:

  1. Avaliar o ambiente, as equipes e o ciclo de otimização que você está seguindo.
  2. Estabelecer requisitos e metas de otimização.
  3. Otimizar o ambiente e treinar as equipes.
  4. Ajustar o loop de otimização.

Neste documento, abordamos alguns dos princípios e conceitos da engenharia de confiabilidade do site (SRE, na sigla em inglês). O Google desenvolveu a disciplina de SRE para executar de maneira eficiente e confiável uma infraestrutura global que atende bilhões de usuários. Se você precisar modificar muitos dos processos de negócios e colaboração, adotar toda a SRE da organização pode ser impraticável. Pode ser mais simples aplicar um subconjunto da disciplina de SRE mais adequada à sua organização.

Avaliar o ambiente, as equipes e o loop de otimização

Antes de iniciar qualquer tarefa de otimização, você precisa avaliar o ambiente. Precisa também avaliar as habilidades das equipes, porque a otimização do ambiente pode exigir habilidades que as equipes talvez não tenham. Por fim, você precisa avaliar o loop de otimização. O loop é um recurso que pode ser otimizado como qualquer outro recurso.

Avaliar o ambiente

Você precisa entender profundamente o ambiente. Para qualquer otimização bem-sucedida, você precisa entender como o ambiente funciona e identificar possíveis áreas de melhoria. Essa avaliação estabelece um valor de referência para que você compare a avaliação com a fase de otimização e as próximas iterações de otimização.

Migrar para o Google Cloud: avaliar e descobrir as cargas de trabalho contém orientações detalhadas sobre como avaliar suas cargas de trabalho e ambientes. Se você concluiu recentemente uma migração para o Google Cloud, já tem informações detalhadas sobre como o ambiente é configurado, gerenciado e mantido. Caso contrário, você usará essas orientações para avaliar o ambiente.

Avaliar as equipes

Quando você tiver uma noção clara do ambiente, avalie as equipes para entender suas habilidades. Comece listando todas as habilidades, o nível de experiência de cada habilidade e quais membros da equipe são os mais experientes para cada habilidade. Use essa avaliação na próxima fase para descobrir as habilidades que faltam para atingir as metas de otimização. Por exemplo, se você começar a usar um serviço gerenciado, precisará das habilidades para provisionar, configurar e interagir com esse serviço. Se você quiser adicionar uma camada de armazenamento em cache a um aplicativo no ambiente usando o Memorystore, precisará de experiência para usar esse serviço.

Considere que a otimização do ambiente pode afetar os processos de negócios e colaboração. Por exemplo, se você começar a usar um serviço totalmente gerenciado em vez de um serviço autogerenciado, dará aos operadores mais tempo para eliminar trabalho.

Avaliar o ciclo de otimização

O loop de otimização também é um recurso que pode ser otimizado. Use os dados coletados nesta avaliação para ter insights claros sobre o desempenho das equipes durante a última iteração de otimização. Por exemplo, se o objetivo for reduzir a duração da iteração, você precisará de dados sobre a última iteração, incluindo sua complexidade e as metas traçadas. Você precisará também de informações sobre todos os bloqueadores que encontrou durante a última iteração para garantir que tenha uma estratégia de mitigação se esses bloqueadores ocorrerem novamente.

Se essa for a primeira iteração de otimização, talvez você não tenha dados suficientes para estabelecer um valor de referência para comparar seu desempenho. Elabore um conjunto de hipóteses sobre o desempenho esperado das equipes durante a primeira iteração. Após a primeira iteração de otimização, avalie o loop e o desempenho das equipes e compare-o com as hipóteses.

Estabelecer as metas e os requisitos de otimização

Antes de iniciar qualquer tarefa de otimização, crie um conjunto de metas claramente mensuráveis para a iteração.

Nesta etapa, você realizará as seguintes atividades:

  1. Definir os requisitos de otimização.
  2. Definir metas de otimização mensuráveis de acordo com os requisitos de otimização.

Definir os requisitos de otimização

Faça uma lista dos requisitos para a fase de otimização. Um requisito expressa uma necessidade de melhoria e não precisa necessariamente ser mensurável.

A partir de um conjunto de características de qualidade para as cargas de trabalho, o ambiente e o próprio loop de otimização, é possível elaborar um questionário para orientar você na definição dos requisitos. O questionário abrange as características que você considera valiosas para o ambiente, os processos e as cargas de trabalho.

Há muitas fontes para orientar você na definição das características de qualidade. Por exemplo, o padrão ISO/IEC 25010 define as características de qualidade de um produto de software. Revise também a Lista de verificação de configuração do Google Cloud.

Por exemplo, o questionário pode fazer as seguintes perguntas:

  • Sua infraestrutura e componentes podem ser escalonados vertical ou horizontalmente?
  • Sua infraestrutura permite reverter alterações sem intervenção manual?
  • Você já tem um sistema de monitoramento que abrange sua infraestrutura e cargas de trabalho?
  • Você tem um sistema de gerenciamento de incidentes para sua infraestrutura?
  • Quanto tempo e esforço são necessários para implementar as otimizações planejadas?
  • Você conseguiu atingir todas as metas em suas iterações anteriores?

Com base nas respostas ao questionário, você elabora a lista de requisitos para essa iteração de otimização. Por exemplo, seus requisitos podem ser os seguintes:

  • Aumentar o desempenho de um aplicativo.
  • Aumentar a disponibilidade de um componente do ambiente.
  • Aumentar a confiabilidade de um componente do ambiente.
  • Reduzir os custos operacionais do ambiente.
  • Reduzir a duração da iteração de otimização para diminuir os riscos associados.
  • Aumentar a velocidade de desenvolvimento e reduzir o tempo de lançamento.

Quando você tiver a lista de áreas de melhoria, avalie os requisitos na lista. Nesta avaliação, você analisa os requisitos de otimização, procura conflitos e prioriza os requisitos na lista. Por exemplo, aumentar o desempenho de um aplicativo pode conflitar com a redução de custos operacionais.

Definir metas mensuráveis

Depois de finalizar a lista de requisitos, defina metas mensuráveis para cada um deles. Uma meta pode contribuir para mais de um requisito. Se você tiver alguma área de incerteza ou se não conseguir definir todas as metas necessárias para atender aos requisitos, volte à fase de avaliação dessa iteração para coletar informações que faltam e, em seguida, refine os requisitos.

Para receber ajuda na definição dessas metas, siga uma das disciplinas de SRE, a definição de indicadores de nível de serviço (SLIs, na sigla em inglês) e objetivos de nível de serviço (SLOs, na sigla em inglês):

  • SLIs são medidas quantitativas do nível de serviço que você fornece. Por exemplo, um SLI chave pode ser a latência média de solicitação, a taxa de erros ou a capacidade do sistema.
  • SLOs são valores alvo ou intervalos de valores para um nível de serviço medido por um SLI. Por exemplo, um SLO pode ser aquele em que a latência média da solicitação seja inferior a 100 milissegundos.

Depois de definir SLIs e SLOs, talvez você perceba que não esteja reunindo todas as métricas necessárias para medir os SLIs. Esse conjunto de métricas é a primeira meta de otimização que pode ser alcançada. Você define as metas relacionadas à ampliação do sistema de monitoramento para coletar todas as métricas necessárias dos SLIs.

Otimizar o ambiente e as equipes

Depois de avaliar o ambiente, as equipes e o loop de otimização, além de estabelecer requisitos e metas para essa iteração, você estará pronto para executar a etapa de otimização.

Nesta etapa, você realizará as seguintes atividades:

  1. Avaliar o ambiente, as equipes e o loop de otimização.
  2. Analisar os dados provenientes dessas medições.
  3. Executar as atividades de otimização.
  4. Medir e analisar novamente.

Avaliar o ambiente, as equipes e o loop de otimização

Você amplia o sistema de monitoramento para coletar dados sobre o comportamento do ambiente, das equipes e do loop de otimização e estabelecer um valor de referência que possa ser comparado após a otimização.

Essa atividade tem como base e amplia o que você fez na fase de avaliação. Depois de estabelecer os requisitos e as metas, você sabe quais métricas coletar para que as medições sejam relevantes para as metas de otimização. Por exemplo, se você tiver definido SLOs e os SLIs correspondentes para reduzir a latência de resposta de uma das cargas de trabalho no ambiente, será necessário coletar dados para medir essa métrica.

A compreensão dessas métricas também se aplica às equipes e ao loop de otimização. É possível ampliar o sistema de monitoramento para coletar dados e medir as métricas relevantes para as equipes e o loop de otimização. Por exemplo, se você tiver SLOs e SLIs para reduzir a duração da iteração de otimização, será necessário coletar dados para medir essa métrica.

Ao projetar as métricas necessárias para ampliar o sistema de monitoramento, considere que a coleta de dados pode afetar o desempenho do ambiente e dos processos. Avalie as métricas que você precisa implementar para as medições e os intervalos de amostra delas para entender se elas podem afetar o desempenho. Por exemplo, uma métrica com alta frequência de amostra pode prejudicar o desempenho. Portanto, é necessário otimizar ainda mais.

No Google Cloud, é possível usar o Cloud Monitoring para implementar as métricas necessárias para coletar dados. Para implementar métricas personalizadas diretamente nas cargas de trabalho, use as bibliotecas de cliente do Cloud para o Cloud Monitoring ou o OpenTelemetry. Se você usa o Google Kubernetes Engine (GKE), use a medição de uso do GKE para coletar informações sobre o uso de recursos, como CPU, GPU e TPU. Em seguida, separe o uso de recursos por namespace ou rótulo.

Por fim, é possível usar o Cloud Architecture Center e os whitepapers do Google Cloud como pontos de partida para encontrar novas habilidades que suas equipes possam precisar para otimizar o ambiente.

Analisar dados

Depois de coletar os dados, analise-os e avalie-os para entender o desempenho do ambiente, das equipes e do loop de otimização em relação aos requisitos e metas de otimização.

Em especial, avalie o ambiente em relação ao seguinte:

  • SLOs
  • Práticas recomendadas do setor
  • Um ambiente sem qualquer dívida técnica

Os SLOs que você estabeleceu de acordo com as metas de otimização ajudam a entender se suas expectativas estão sendo atendidas. Se os SLOs não estão sendo atendidos, você precisa melhorar as equipes ou o loop de otimização. Por exemplo, se você estabeleceu um SLO para a latência de resposta de uma carga de trabalho em um determinado percentil e essa carga de trabalho não atende a essa marca, isso é um sinal de que você precisa otimizar essa parte da carga de trabalho.

Além disso, é possível comparar sua situação com um conjunto de práticas recomendadas reconhecidas no setor. Por exemplo, a lista de verificação de configuração do Google Cloud ajuda você a configurar um ambiente pronto para produção para cargas de trabalho empresariais. Se você estiver usando o GKE, verifique se está seguindo as práticas recomendadas para operar contêineres.

Depois de coletar dados, considere como otimizar o ambiente para torná-lo mais econômico. É possível exportar dados do Cloud Billing para o BigQuery e analisar dados com o Looker Studio para entender quantos recursos você está usando e extrair qualquer padrão de gasto dele.

Por fim, compare o ambiente com uma dívida técnica para ver se está atingindo as metas de longo prazo e para ver se a dívida técnica está aumentando. Por exemplo, é possível estabelecer um SLO sobre a quantidade de recursos no ambiente que você está monitorando em relação à quantidade de recursos provisionados desde a última iteração. Se você não ampliou o sistema de monitoramento para cobrir esses novos recursos, a dívida técnica aumentou. Ao analisar as alterações na dívida técnica, considere também os fatores que levaram a essas alterações. Por exemplo, uma necessidade comercial pode exigir um acréscimo na dívida técnica ou pode ser inesperada. Conhecer os fatores que causaram uma alteração na dívida técnica fornece insights sobre objetivos de otimização futuros.

Para monitorar o ambiente no Google Cloud, use o Monitoring para criar gráficos, painéis e alertas. Em seguida, roteie dados do Cloud Logging para uma análise mais detalhada e um período de retenção prolongado. Por exemplo, é possível criar coletores agregados e usar o Cloud Storage, o Pub/Sub ou o BigQuery como destinos. Se você exportar dados para o BigQuery, use o Looker Studio para visualizá-los e identificar tendências e fazer previsões. Você também pode usar ferramentas de avaliação, comoRecomendador e Security Command Center para analisar automaticamente o ambiente e os processos, procurando metas de otimização.

Depois de analisar todos os dados de medição, você precisa responder a duas perguntas:

  1. Você está atingindo as metas de otimização?

    Se você respondeu sim, essa iteração de otimização foi concluída e uma nova pode ser iniciada. Se você respondeu não, vá para a próxima pergunta.

  2. Com os recursos que você definiu como orçamento, você consegue atingir as metas de otimização definidas para essa iteração?

Para responder a essa pergunta, considere todos os recursos necessários, como tempo, dinheiro e experiência. Se você respondeu sim, vá para a próxima seção. Caso contrário, refine as metas de otimização, considerando os recursos que podem ser usados para essa iteração. Por exemplo, se você tiver alguma restrição devido a uma programação fixa, talvez seja necessário programar algumas metas de otimização para a próxima iteração.

Otimizar as equipes

Otimizar o ambiente é um desafio contínuo e pode exigir habilidades que as equipes talvez não tenham, que foram descobertas durante a avaliação e a análise. Por esse motivo, otimizar as equipes adquirindo novas habilidades e tornando os processos mais eficientes é essencial para o sucesso das atividades de otimização.

Para otimizar as equipes, é necessário fazer o seguinte:

  • Elaborar e implementar um programa de treinamento.
  • Otimizar a estrutura e cultura da equipe.

Para que as equipes adquiram as habilidades que estejam faltando, você precisa elaborar e implementar um programa de treinamento ou escolher um preparado por instrutores profissionais do Google Cloud. Para mais informações, consulte Migrar para o Google Cloud: avaliar e descobrir as cargas de trabalho.

Ao otimizar as equipes, você talvez descubra que haja espaço para melhorar a estrutura e cultura. É difícil definir de imediato uma situação ideal, porque cada empresa tem sua história e idiossincrasias próprias que contribuíram para a evolução da estrutura e cultura das equipes.

A liderança transformacional é um bom ponto de partida para aprender estruturas gerais de execução e avaliação de mudanças organizacionais voltadas à adoção de práticas de DevOps. Para orientações práticas sobre como implementar uma cultura DevOps eficaz na sua organização, consulte engenharia de confiabilidade do site, uma descrição abrangente da metodologia de SRE. A apostila de confiabilidade do site, o complemento do livro, usa exemplos concretos para mostrar como usar os princípios e as práticas de SRE.

Otimizar o ambiente

Depois de avaliar e analisar os dados das métricas, você sabe quais áreas precisam ser otimizadas.

Esta seção aborda técnicas gerais de otimização para o ambiente do Google Cloud. Também é possível realizar qualquer atividade de otimização específica da infraestrutura e dos serviços que você esteja usando.

Codificar tudo

Uma das maiores vantagens de adotar um ambiente de nuvem pública como o Google Cloud é poder usar interfaces bem definidas como as APIs do Cloud para provisionar, configurar e gerenciar recursos. É possível usar as ferramentas de sua escolha para definir o processo de infraestrutura como código (IaC, na sigla em inglês) e os sistemas de controle de versão que você preferir.

É possível usar ferramentas como o Terraform para provisionar seus recursos do Google Cloud e, em seguida, ferramentas como o Ansible, Chef ou Puppet para configurar esses recursos. Um processo de IaC implementa uma estratégia de reversão eficaz para as tarefas de otimização. É possível reverter qualquer alteração aplicada ao código que descreve a infraestrutura. Além de evitar falhas inesperadas ao atualizar a infraestrutura testando as alterações.

Além disso, é possível aplicar processos semelhantes para codificar outros aspectos do ambiente, como políticas como código, usando ferramentas como o Open Policy Agent, e operações como código, como o GitOps.

Por isso, se você adotar um processo de IaC nas primeiras iterações de otimização, poderá definir outras atividades de otimização como código. Também é possível adotar o processo gradualmente para avaliar se ele é adequado ao ambiente.

Automatizar tudo

Para otimizar o ambiente por completo, é necessário usar os recursos com eficiência. Isso significa que é necessário eliminar trabalho para economizar recursos e reinvestir em tarefas mais importantes que geram valor, como atividades de otimização.

De acordo com a recomendação da SRE, a maneira de eliminar tarefas repetitivas é aumentar a automação. Nem todas as tarefas de automação exigem habilidades de engenheiros de software altamente especializados ou grandes esforços. Às vezes, executar periodicamente um script curto pode economizar várias horas por dia. O Google Cloud fornece ferramentas como a CLI do Google Cloud e serviços gerenciados, como as APIs do Cloud, o Cloud Scheduler, o Cloud Composer e o Cloud Run, que as equipes podem usar para automatizar tarefas repetitivas.

Monitorar tudo

Se não for possível coletar medidas detalhadas sobre o ambiente, não será possível melhorá-lo, porque você não terá dados para corroborar suas suposições. Ou seja, você não saberá o que fazer para alcançar as metas de otimização.

Um sistema de monitoramento abrangente é um componente necessário para o ambiente. O sistema monitora todas as métricas essenciais que você precisa avaliar para as metas de otimização. Ao projetar o sistema de monitoramento, planeje monitorar no mínimo os quatro sinais de ouro (em inglês).

É possível usar serviços gerenciados, como o Monitoring e o Logging, para monitorar o ambiente sem precisar configurar uma solução de monitoramento complicada.

Talvez seja necessário implementar um sistema de monitoramento que possa monitorar ambientes híbridos e multicloud para obedecer às políticas de restrição de dados que impõem que o armazenamento de dados seja feito apenas em determinados locais físicos ou serviços que usam simultaneamente ambientes de várias nuvens.

Adotar uma abordagem pronta para a nuvem

Pronto para a nuvem é um paradigma que descreve uma maneira eficiente de projetar e executar um aplicativo na nuvem. A Cloud Native Computing Foundation (CNCF) define um aplicativo nativo da nuvem como escalonável, resiliente, gerenciável e observável por tecnologias como contêineres, malhas de serviço, microsserviços, infraestrutura imutável e APIs declarativas. O Google Cloud fornece serviços gerenciados como o GKE, Cloud Run, Traffic Director, Logging e Monitoring para capacitar os usuários a projetar e executar aplicativos prontos para a nuvem.

Saiba mais sobre tecnologias prontas para a nuvem no Mapa guia da CNCF e no Ambiente interativo de nativos da nuvem da CNCF (links em inglês).

Gerenciamento de custo

Devido aos diferentes modelos de faturamento e custo, otimizar os custos de um ambiente de nuvem pública como o Google Cloud é diferente de otimizar um ambiente no local.

Para mais informações, consulte Migrar para o Google Cloud: minimizar custos.

Medir e analisar novamente

Quando concluir as atividades de otimização para essa iteração, refaça as medições e a análise para verificar se alcançou as metas. Responda à seguinte pergunta:

Ajustar o loop de otimização

Nesta seção, você atualizará e modificará o loop de otimização seguido nesta iteração para que se adéque melhor à estrutura e ao ambiente da equipe.

Codificar o loop de otimização

Para otimizar o loop de otimização de maneira eficiente, você precisa documentá-lo e defini-lo em um formato padronizado, direto e gerenciável, permitindo espaço para alterações. É possível usar um serviço totalmente gerenciado, como o Cloud Composer, para criar, programar, monitorar e gerenciar os fluxos de trabalho. Também é possível representar primeiro os processos com uma linguagem, como a do modelo e notação de processos de negócios (BPMN, na sigla em inglês). Depois disso, é possível codificar esses processos com uma linguagem padronizada, como a linguagem de execução de processos de negócios (BPEL, na sigla em inglês). Depois de adotar a IaC, descrever os processos com código permite que você os gerencie enquanto faz o restante do ambiente.

Automatizar o loop de otimização

Depois de codificar o loop de otimização, é possível automatizar tarefas repetitivas para eliminar trabalho, economizar tempo e tornar o loop de otimização mais eficiente. É possível começar pela automação de todas as tarefas em que não é necessária uma decisão humana, como medir dados e produzir relatórios agregados para as equipes analisarem. Por exemplo, é possível automatizar a análise de dados com o Cloud Monitoring para verificar se o ambiente atende aos SLOs definidos. Como a otimização é uma tarefa interminável e que você itera no loop de otimização, até mesmo pequenas automações podem aumentar significativamente a eficiência.

Monitorar o loop de otimização

Assim como você fez para todos os recursos no ambiente, é necessário monitorar o loop de otimização para verificar se ele está funcionando conforme o esperado e também procurar gargalos e metas de otimização futuras. Comece o monitoramento rastreando a quantidade de tempo e recursos que as equipes gastaram em cada etapa de otimização. Por exemplo, use um sistema de rastreamento de problemas e uma ferramenta de gestão de projetos para monitorar os processos e extrair estatísticas relevantes sobre métricas, como tempo para resolução de problemas e tempo de conclusão.

A seguir