Esse pilar do Google Cloud framework bem arquitetado (em inglês) oferece recomendações para otimizar o desempenho de cargas de trabalho emGoogle Cloud.
Este documento é destinado a arquitetos, desenvolvedores e administradores que planejam, projetam, implantam e gerenciam cargas de trabalho no Google Cloud.
As recomendações neste pilar podem ajudar sua organização a operar com eficiência, melhorar a satisfação do cliente, aumentar a receita e reduzir custos. Por exemplo, quando o tempo de processamento de back-end de um aplicativo diminui, os usuários têm tempos de resposta mais rápidos, o que pode levar a uma maior retenção de usuários e mais receita.
O processo de otimização de desempenho pode envolver uma compensação entre desempenho e custo. No entanto, otimizar o desempenho às vezes pode ajudar a reduzir custos. Por exemplo, quando a carga aumenta, o escalonamento automático pode ajudar a fornecer um desempenho previsível, garantindo que os recursos do sistema não sejam sobrecarregados. O escalonamento automático também ajuda a reduzir custos, removendo recursos não utilizados durante períodos de baixa carga.
A otimização do desempenho é um processo contínuo, e não uma atividade única. O diagrama a seguir mostra os estágios no processo de otimização de desempenho:
O processo de otimização de desempenho é um ciclo contínuo que inclui os estágios abaixo:
- Definir requisitos: defina requisitos de desempenho granulares para cada camada da pilha do aplicativo antes de projetar e desenvolver seus aplicativos. Para planejar a alocação de recursos, considere as principais características da carga de trabalho e as expectativas de desempenho.
- Design e implantação: use padrões de design elásticos e escalonáveis que podem ajudar a atender aos seus requisitos de desempenho.
- Monitorar e analisar: monitore o desempenho continuamente usando registros, rastreamento, métricas e alertas.
Otimização: considere possíveis reformulações à medida que seus aplicativos evoluem. Redimensione os recursos da nuvem e use recursos novos para atender aos novos requisitos de desempenho.
Conforme mostrado no diagrama anterior, continue o ciclo de monitoramento, reavaliação dos requisitos e ajuste dos recursos da nuvem.
Para ver princípios e recomendações de otimização de desempenho específicos para cargas de trabalho de IA e ML, consulte Perspectiva de IA e ML: otimização de desempenho no framework bem arquitetado.
Princípios básicos
As recomendações no pilar de otimização de performance do framework bem arquitetado são mapeadas de acordo com os seguintes princípios fundamentais:
- Planejar a alocação de recursos
- Aproveitar a elasticidade
- Promover o design modular
- Monitore e melhore continuamente o desempenho
Colaboradores
Autores:
- Daniel Lees | Arquiteto de segurança do Cloud
- Gary Harmson | Arquiteto principal
- Luis Urena, engenheiro de relações com desenvolvedores
- Zach Seils | Especialista em rede
Outros colaboradores:
- Filipe Gracio, PhD | Engenheiro de clientes
- Jose Andrade | Engenheiro de clientes de infraestrutura corporativa
- Kumar Dhanagopal | Desenvolvedor de soluções para vários produtos
- Marwan Al Shawi | Engenheiro de clientes do parceiro
- Nicolas Pintaux | Engenheiro de clientes, especialista em modernização de aplicativos
- Ryan Cox | Arquiteto principal
- Radhika Kanakam | Gerente de programa sênior, GTM do Cloud
- Samantha He | Redatora técnica
- Wade Holmes | Diretor de soluções globais
Planejar a alocação de recursos
Esse princípio do pilar de otimização de desempenho do Google Cloud framework bem-arquitetado oferece recomendações para ajudar você a planejar recursos para suas cargas de trabalho no Google Cloud. Ele enfatiza a importância de definir requisitos granulares antes de projetar e desenvolver aplicativos para implantação ou migração na nuvem.
Visão geral do princípio
Para atender aos requisitos de negócios, é importante definir os requisitos de desempenho dos aplicativos antes do design e do desenvolvimento. Defina esses requisitos da maneira mais granular possível para o aplicativo como um todo e para cada camada da pilha de aplicativos. Por exemplo, na camada de armazenamento, é preciso considerar a capacidade e as operações de E/S por segundo (IOPS, na sigla em inglês) necessárias para os aplicativos.
Desde o início, planeje os projetos de aplicativos tendo em mente o desempenho e a escalonabilidade. Considere fatores como o número de usuários, o volume de dados e o potencial crescimento ao longo do tempo.
Os requisitos de desempenho para cada carga de trabalho variam e dependem do tipo de carga de trabalho. Cada carga de trabalho pode conter uma combinação de sistemas e serviços de componentes com conjuntos exclusivos de características de desempenho. Por exemplo, um sistema responsável pelo processamento periódico em lote de grandes conjuntos de dados tem demandas de desempenho diferentes de uma solução de área de trabalho virtual interativa. Suas estratégias de otimização precisam atender às necessidades específicas de cada carga de trabalho.
Selecione serviços e recursos que se alinhem às metas de desempenho de cada carga de trabalho. Para otimizar o desempenho, não há uma solução única para todos. Quando você otimiza cada carga de trabalho, todo o sistema pode alcançar o desempenho e a eficiência ideais.
Considere as seguintes características da carga de trabalho que podem influenciar seus requisitos de desempenho:
- Arquétipo de implantação: o arquétipo de implantação selecionado para um aplicativo pode influenciar sua escolha de produtos e recursos, que determinam o desempenho esperado do aplicativo.
- Posicionamento de recursos: ao selecionar uma Google Cloud região para os recursos do aplicativo, recomendamos priorizar a baixa latência para os usuários finais, cumprir as regulamentações de localidade de dados e garantir a disponibilidade dos produtos e serviços Google Cloud necessários.
- Conectividade de rede: escolha serviços de rede que otimizam o acesso a dados e a entrega de conteúdo. Aproveite a rede global, os backbones de alta velocidade, os locais de interconexão e os serviços de armazenamento em cache do Google Cloud.
- Opções de hospedagem de aplicativos: ao selecionar uma plataforma de hospedagem, você precisa avaliar as vantagens e desvantagens do desempenho de cada opção. Por exemplo, considere bare metal, máquinas virtuais, contêineres e plataformas sem servidor.
- Estratégia de armazenamento: escolha a estratégia de armazenamento ideal com base nos seus requisitos de desempenho.
- Configurações de recursos: o tipo de máquina, as IOPS e a capacidade podem ter um impacto significativo no desempenho. Além disso, no início da fase de design, você precisa considerar os recursos de segurança apropriados e o impacto deles nos recursos. Ao planejar recursos de segurança, prepare-se para acomodar as compensações de desempenho necessárias e evitar efeitos imprevistos.
Recomendações
Para garantir a alocação ideal de recursos, considere as recomendações nas seções a seguir.
Configurar e gerenciar cotas
Verifique se o aplicativo usa apenas os recursos necessários, como memória, armazenamento e capacidade de processamento. A alocação excessiva pode levar a despesas desnecessárias, enquanto a subalocação pode resultar em degradação do desempenho.
Para acomodar o escalonamento elástico e garantir que os recursos adequados estejam disponíveis, monitore regularmente a capacidade das cotas. Além disso, acompanhe o uso da cota para identificar possíveis restrições de escalonamento ou problemas de alocação excessiva e, em seguida, tome decisões embasadas sobre a alocação de recursos.
Conscientize e promova o reconhecimento
Informe os usuários sobre os requisitos de desempenho e ofereça recursos educacionais sobre técnicas eficazes de gerenciamento de desempenho.
Para avaliar o progresso e identificar áreas de melhoria, documente regularmente o desempenho desejado e o desempenho real. Faça um teste de carga do aplicativo para encontrar possíveis pontos de interrupção e entender como é possível escaloná-lo.
Monitorar as métricas de desempenho
Use o Cloud Monitoring para analisar tendências em métricas de desempenho, analisar os efeitos de experimentos, definir alertas para métricas críticas e realizar análises retrospectivas.
O Active Assist é um conjunto de ferramentas que podem fornecer insights e recomendações para ajudar a otimizar a utilização de recursos. Essas recomendações podem ajudá-lo a ajustar a alocação de recursos e melhorar o desempenho.
Aproveitar a elasticidade
Esse princípio no pilar de otimização de desempenho do Google Cloud framework bem arquitetado fornece recomendações para ajudar você a incorporar a elasticidade, que é a capacidade de ajustar recursos dinamicamente com base nas mudanças nos requisitos de carga de trabalho.
A elasticidade permite que diferentes componentes de um sistema sejam escalonados de forma independente. Esse escalonamento direcionado pode ajudar a melhorar o desempenho e a eficiência de custos, alocando recursos precisamente onde são necessários, sem provisionamento excessivo ou insuficiente de recursos.
Visão geral do princípio
Os requisitos de desempenho de um sistema influenciam diretamente quando e como o sistema é escalonado verticalmente ou horizontalmente. É preciso avaliar a capacidade do sistema e determinar a carga que se espera que o sistema processe no valor de referência. Em seguida, é preciso determinar como você quer que o sistema responda a aumentos e diminuições na carga.
Quando a carga aumenta, o sistema precisa ser escalonado horizontalmente e verticalmente, ou ambos. Para escalonamento horizontal, adicione nós de réplica para garantir que o sistema tenha capacidade geral suficiente para atender ao aumento da demanda. Para escalonamento vertical, substitua os componentes atuais do aplicativo por componentes que contenham mais capacidade, memória e armazenamento.
Quando a carga diminui, o sistema precisa ser reduzido (horizontalmente, verticalmente ou ambos).
Defina as circunstâncias em que o sistema é escalonado verticalmente ou reduzido. Planeje o escalonamento vertical manual dos sistemas para períodos conhecidos de alto tráfego. Use ferramentas como escalonamento automático, que responde a aumentos ou reduções da carga.
Recomendações
Para aproveitar a elasticidade, considere as recomendações nas seções a seguir.
Planejar os períodos de pico de carga
Você precisa planejar um caminho de escalonamento eficiente para eventos conhecidos, como períodos esperados de aumento na demanda de clientes.
Considere escalonar verticalmente o sistema antes de períodos conhecidos de alto tráfego. Por exemplo, no caso de uma organização de varejo, você espera que a demanda aumente durante as vendas sazonais. Recomendamos que você escalone horizontalmente seus sistemas de forma manual antes dessas vendas para garantir que eles possam lidar imediatamente com o aumento de carga ou ajustar imediatamente os limites atuais. Caso contrário, o sistema pode levar vários minutos para adicionar recursos em resposta a alterações em tempo real. A capacidade do aplicativo pode não aumentar rápido o suficiente e causar atrasos a alguns usuários.
Para eventos desconhecidos ou inesperados, como um aumento repentino de demanda ou tráfego, use os recursos de escalonamento automático para acionar o escalonamento elástico com base em métricas. Essas métricas podem incluir o uso da CPU, a capacidade de exibição do balanceador de carga, a latência e até mesmo métricas personalizadas definidas no Cloud Monitoring.
Por exemplo, considere um aplicativo executado em um grupo gerenciado de instâncias (MIG) do Compute Engine. O requisito desse aplicativo é que cada instância tenha um desempenho ideal até que a utilização média da CPU atinja 75%. Neste exemplo, é possível definir uma política de escalonamento automático que cria mais instâncias quando a utilização da CPU atinge o limite. Essas instâncias recém-criadas ajudam a absorver a carga, o que ajuda a garantir que a utilização média da CPU permaneça em uma taxa ideal até que o número máximo de instâncias configuradas para o MIG seja atingido. Quando a demanda diminui, a política de escalonamento automático remove as instâncias que não são mais necessárias.
Planeje reservas de slots de recursos no BigQuery ou ajuste os limites das configurações de escalonamento automático no Spanner usando o escalonador automático gerenciado.
Usar escalonamento preditivo
Se os componentes do sistema incluírem o Compute Engine, avalie se o escalonamento automático preditivo é adequado para sua carga de trabalho. O escalonamento automático preditivo prevê a carga futura com base nas tendências históricas das suas métricas, como a utilização da CPU. As previsões são recalculadas em intervalos de alguns minutos, portanto, o escalonador automático adapta rapidamente a previsão a alterações muito recentes na carga. Sem o escalonamento automático preditivo, um escalonador automático só pode escalonar um grupo de forma reativa, com base nas alterações de carga em tempo real observadas. O escalonamento automático preditivo funciona com dados em tempo real e dados históricos para responder à carga atual e prevista.
Implementar arquiteturas sem servidor
Considere implementar uma arquitetura sem servidor com serviços sem servidor que sejam inerentemente elásticos, como os seguintes:
Ao contrário do escalonamento automático em outros serviços que exigem regras de ajuste (por exemplo, Compute Engine), o escalonamento automático sem servidor é instantâneo e pode ser reduzido a zero recursos.
Usar o modo Autopilot para Kubernetes
Para aplicativos complexos que exigem maior controle sobre o Kubernetes, considere usar o modo Autopilot no Google Kubernetes Engine (GKE). O modo Autopilot oferece automação e escalonabilidade por padrão. O GKE escalona automaticamente nós e recursos com base no tráfego. O GKE gerencia nós, cria novos nós para seus aplicativos e configura upgrades e reparos automáticos.
Promover design modular
Esse princípio do pilar de otimização de performance do Google Cloud framework bem arquitetado fornece recomendações para ajudar a promover um design modular. Componentes modulares e interfaces claras podem permitir escalonamento flexível, atualizações independentes e separação futura de componentes.
Visão geral do princípio
Entenda as dependências entre os componentes do aplicativo e os componentes do sistema para projetar um sistema escalonável.
O design modular permite flexibilidade e resiliência, independentemente de uma arquitetura monolítica ou de microsserviços ter sido implantada inicialmente. Ao decompor o sistema em módulos independentes e bem definidos com interfaces claras, é possível escalonar componentes individuais para atender a demandas específicas.
O escalonamento direcionado pode ajudar a otimizar a utilização de recursos e reduzir os custos das seguintes maneiras:
- Provisiona apenas os recursos necessários para cada componente e aloca menos recursos para componentes menos exigentes.
- Adiciona mais recursos durante períodos de tráfego intenso para manter a experiência do usuário.
- Remove recursos subutilizados sem comprometer o desempenho.
A modularidade também melhora a capacidade de manutenção. Unidades menores e independentes são mais fáceis de entender, depurar e atualizar, o que pode levar a ciclos de desenvolvimento mais rápidos e reduzir o risco.
Ainda que a modularidade ofereça vantagens significativas, é preciso avaliar as possíveis vantagens e desvantagens de desempenho. O aumento da comunicação entre os módulos pode introduzir latência e sobrecarga. Busque o equilíbrio entre modularidade e desempenho. Um design altamente modular pode não ser universalmente adequado. Quando o desempenho é essencial, uma abordagem com acoplamento mais rígido pode ser apropriada. O design do sistema é um processo iterativo, em que você revisa e refina continuamente o design modular.
Recomendações
Para promover designs modulares, considere as recomendações nas seções a seguir.
Crie designs com foco em acoplamento flexível
Projetar uma arquitetura com acoplamento flexível. Componentes independentes com dependências mínimas ajudam a criar aplicativos escalonáveis e resilientes. Ao planejar os limites dos serviços, considere os requisitos de disponibilidade e escalonabilidade. Por exemplo, se um componente tiver requisitos diferentes dos outros, você poderá projetar o componente como um serviço independente. Implemente um plano para falhas suaves para subprocessos ou serviços menos importantes que não afetem o tempo de resposta dos serviços principais.
Projetar com foco em simultaneidade e paralelismo
Projete seu aplicativo para aceitar várias tarefas simultaneamente, como processar várias solicitações de usuários ou executar jobs em segundo plano enquanto os usuários interagem com o sistema. Divida tarefas grandes em partes menores que possam ser processadas ao mesmo tempo por várias instâncias de serviço. A simultaneidade de tarefas permite usar recursos como escalonamento automático para aumentar a alocação de recursos em produtos como os seguintes:
Equilibre a modularidade para a alocação flexível de recursos
Sempre que possível, garanta que cada componente use apenas os recursos necessários, como memória, armazenamento e capacidade de processamento, para operações específicas. A alocação excessiva de recursos pode resultar em custos desnecessários, e a subalocação de recursos pode comprometer o desempenho.
Use interfaces bem definidas
Garanta que os componentes modulares se comuniquem de maneira eficaz por meio de interfaces claras e padronizadas (como APIs e filas de mensagens) para reduzir a sobrecarga de camadas de conversão ou de tráfego externo.
Usar modelos sem estado
Um modelo sem estado pode ajudar a garantir que você possa lidar com cada solicitação ou interação com o serviço de maneira independente das solicitações anteriores. Esse modelo facilita a escalonabilidade e a recuperação, porque é possível aumentar, diminuir ou reiniciar o serviço sem perder os dados necessários para solicitações ou processos em andamento.
Escolher tecnologias complementares
Escolher tecnologias que complementem o design modular. Avaliar se as linguagens de programação, frameworks e bancos de dados são compatíveis com a modularidade.
Para saber mais, acesse os recursos a seguir:
Monitore e melhore continuamente o desempenho
Esse princípio do pilar de otimização de performance do Google Cloud framework bem arquitetado (em inglês) oferece recomendações para ajudar você a monitorar e melhorar continuamente.
Após a implantação dos aplicativos, monitore continuamente o desempenho deles usando registros, rastreamentos, métricas e alertas. À medida que os aplicativos crescem e evoluem, é possível usar as tendências nesses pontos de dados para reavaliar seus requisitos de desempenho. Em algum momento, pode ser necessário reformular partes dos aplicativos para manter ou melhorar o desempenho.
Visão geral do princípio
O processo de melhoria contínua do desempenho requer ferramentas e estratégias robustas de monitoramento. As ferramentas de observabilidade do Cloud podem ajudar a coletar indicadores principais de desempenho (KPIs), como latência, capacidade, taxas de erro e uso de recursos. Os ambientes de nuvem oferecem vários métodos para realizar avaliações granulares de desempenho no aplicativo, na rede e na experiência do usuário final.
Melhorar o desempenho é um esforço contínuo que requer uma abordagem multifacetada. Os principais mecanismos e processos a seguir podem ajudar a melhorar o desempenho:
- Para fornecer uma direção clara e ajudar a acompanhar o progresso, defina objetivos de desempenho alinhados às suas metas de negócios. Defina metas SMART: específicas, mensuráveis, alcançáveis, relevantes e com prazo definido.
- Para medir o desempenho e identificar áreas de melhoria, reúna métricas de KPI.
- Para monitorar continuamente os sistemas em busca de problemas, use os fluxos de trabalho visualizados nas ferramentas de monitoramento. Use técnicas de mapeamento de processos de arquitetura para identificar redundâncias e ineficiências.
- Para criar uma cultura de melhoria contínua, forneça treinamento e programas que apoiem o crescimento dos funcionários.
- Para incentivar a melhoria proativa e contínua, incentive seus funcionários e clientes a fornecer feedback contínuo sobre o desempenho do aplicativo.
Recomendações
Para promover designs modulares, considere as recomendações nas seções a seguir.
Defina metas e métricas claras de performance
Defina objetivos de desempenho claros que se alinhem às suas metas de negócios. Isso exige uma compreensão profunda da arquitetura do aplicativo e dos requisitos de desempenho de cada componente.
Como prioridade, otimize os componentes mais críticos que influenciam diretamente as principais funções de negócios e a experiência do usuário. Para garantir que esses componentes continuem a funcionar de maneira eficiente e atender às suas necessidades de negócios, defina metas de desempenho específicas e mensuráveis. Isso inclui tempos de resposta, taxas de erro e limites de utilização de recursos.
Essa abordagem proativa pode ajudar a identificar e resolver possíveis gargalos, otimizar a alocação de recursos e, por fim, fornecer uma experiência perfeita e de alto desempenho para os usuários.
Monitore o desempenho
Monitore continuamente os sistemas da nuvem em busca de problemas de desempenho e configure alertas para possíveis problemas. O monitoramento e os alertas ajudam a detectar e corrigir problemas antes que eles afetem os usuários. A criação de perfil do aplicativo pode ajudar a identificar gargalos e otimizar o uso de recursos.
Você pode usar ferramentas que facilitam a solução de problemas e a otimização de rede. Use a observabilidade do Google Cloud para identificar áreas com alto consumo de CPU, consumo de memória ou consumo de rede. Esses recursos podem ajudar os desenvolvedores a melhorar a eficiência, reduzir os custos e melhorar a experiência do usuário. O Network Intelligence Center mostra visualizações da topologia da sua infraestrutura de rede e pode ajudar você a identificar caminhos de alta latência.
Incentivar a melhoria contínua
Crie uma cultura de melhoria contínua que possa beneficiar o aplicativo e a experiência do usuário.
Ofereça aos funcionários oportunidades de treinamento e desenvolvimento que aprimorem as habilidades e o conhecimento deles em técnicas de desempenho em todos os serviços de nuvem. Estabelecer uma comunidade de prática (CoP, na sigla em inglês) e oferecer programas de orientação e coaching para apoiar o crescimento dos funcionários.
Para evitar o gerenciamento de desempenho reativo e incentivar o gerenciamento de desempenho proativo, incentive o feedback contínuo dos funcionários, clientes e partes interessadas. Considere gamificar o processo, acompanhando os KPIs sobre o desempenho e apresentando essas métricas às equipes com frequência na forma de tabelas de ligas.
Para entender seu desempenho e a satisfação do usuário ao longo do tempo, recomendamos que você meça o feedback do usuário de maneira quantitativa e qualitativa. O framework HEART pode ajudar você a coletar o feedback dos usuários em cinco categorias:
- Felicidade
- Engajamento
- Adoção
- Retenção
- Tarefa concluída
Ao usar esse framework, você incentiva engenheiros com feedback baseado em dados, métricas centradas no usuário, insights acionáveis e uma compreensão clara das metas.