Esse pilar do Google Cloud Well-Architected Framework fornece recomendações para otimizar a performance das cargas de trabalho no Google 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 de maneira eficiente, 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 aumentar a retenção de usuários e a receita.
O processo de otimização de performance pode envolver uma compensação entre performance e custo. No entanto, otimizar o desempenho às vezes pode ajudar você a reduzir custos. Por exemplo, quando a carga aumenta, o escalonamento automático ajuda 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 as seguintes etapas:
- Defina requisitos: defina requisitos de desempenho granulares para cada camada da pilha de aplicativos 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.
- Projetar e implantar: use padrões de design elásticos e escalonáveis que podem ajudar você a atender aos requisitos de performance.
- Monitorar e analisar: monitore o desempenho continuamente usando registros, rastreamento, métricas e alertas.
Otimize: considere possíveis reformulações à medida que seus aplicativos evoluem. Dimensionar corretamente os recursos da nuvem e usar novos recursos para atender aos requisitos de desempenho em constante mudança.
Conforme mostrado no diagrama anterior, continue o ciclo de monitoramento, reavaliação de requisitos e ajuste dos recursos da nuvem.
Para princípios e recomendações de otimização de performance específicos para cargas de trabalho de IA e ML, consulte Perspectiva de IA e ML: otimização de performance no Well-Architected Framework.
Princípios básicos
As recomendações no pilar de otimização de performance do framework bem arquitetado são mapeadas para os seguintes princípios básicos:
- Planejar a alocação de recursos
- Aproveite a elasticidade
- Promover o design modular
- Monitore e melhore o desempenho continuamente
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 empresarial
- 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 sênior de programas, GTM da nuvem
- Samantha He | Redatora técnica
- Wade Holmes | Diretor global de soluções
Planejar a alocação de recursos
Esse princípio no pilar de otimização de performance do Google Cloud Well-Architected Framework fornece 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 da sua empresa, é 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, você precisa considerar a capacidade de processamento e as operações de E/S por segundo (IOPS) que os aplicativos precisam.
Desde o início, planeje os designs de aplicativos com desempenho e escalonabilidade em mente. Considere fatores como o número de usuários, o volume de dados e o crescimento potencial ao longo do tempo.
Os requisitos de desempenho para cada carga de trabalho variam e dependem do tipo de carga. 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 em lote periódico de grandes conjuntos de dados tem demandas de desempenho diferentes de uma solução interativa de área de trabalho virtual. Suas estratégias de otimização precisam atender às necessidades específicas de cada carga de trabalho.
Selecione serviços e recursos que se alinham às metas de performance de cada carga de trabalho. Não existe uma solução única para otimizar a performance. Ao otimizar cada carga de trabalho, todo o sistema pode alcançar performance e eficiência ideais.
Considere as seguintes características de 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 a 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, obedecer às regulamentações de localidade de dados e garantir a disponibilidade dos Google Cloud produtos e serviços necessários.
- Conectividade de rede: escolha serviços de rede que otimizem 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, avalie as vantagens e desvantagens de desempenho de cada opção. Por exemplo, considere plataformas bare metal, máquinas virtuais, contêineres e sem servidor.
- Estratégia de armazenamento: escolha uma 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 na performance. Além disso, no início da fase de design, é necessário considerar os recursos de segurança adequados e o impacto deles nos recursos. Ao planejar recursos de segurança, esteja preparado para acomodar as compensações de performance 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 gerar despesas desnecessárias, enquanto a alocação insuficiente pode resultar em degradação da performance.
Para acomodar o escalonamento elástico e garantir que recursos adequados estejam disponíveis, monitore regularmente a capacidade das suas cotas. Além disso, acompanhe o uso da cota para identificar possíveis restrições de escalonamento ou problemas de alocação excessiva e tome decisões embasadas sobre a alocação de recursos.
Educar e promover a conscientização
Informe os usuários sobre os requisitos de desempenho e ofereça recursos educativos sobre técnicas eficazes de gerenciamento de desempenho.
Para avaliar o progresso e identificar áreas de melhoria, documente regularmente a performance desejada e a real. Faça um teste de carga no aplicativo para encontrar possíveis pontos de interrupção e entender como escalonar o aplicativo.
Monitorar as métricas de desempenho
Use o Cloud Monitoring para analisar tendências em métricas de desempenho, os efeitos dos experimentos, definir alertas para métricas importantes e realizar análises retrospectivas.
O Active Assist é um conjunto de ferramentas que podem fornecer insights e recomendações para ajudar a otimizar o uso de recursos. Essas recomendações podem ajudar você a ajustar a alocação de recursos e melhorar a performance.
Aproveitar a elasticidade
Esse princípio no pilar de otimização de performance do Google Cloud Well-Architected Framework fornece recomendações para ajudar você a incorporar a elasticidade, que é a capacidade de ajustar recursos dinamicamente com base em 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 a performance e a eficiência de custos, alocando recursos exatamente onde eles são necessários, sem provisionamento excessivo ou insuficiente.
Visão geral do princípio
Os requisitos de performance de um sistema influenciam diretamente quando e como ele é escalonado vertical ou horizontalmente. É necessário avaliar a capacidade do sistema e determinar a carga que ele deve processar no valor de referência. Em seguida, determine como você quer que o sistema responda aos aumentos e diminuições na carga.
Quando a carga aumenta, o sistema precisa escalonar horizontalmente horizontal, vertical ou ambos. Para o escalonamento horizontal, adicione nós de réplica para garantir que o sistema tenha capacidade geral suficiente para atender ao aumento da demanda. Para o escalonamento vertical, substitua os componentes atuais do aplicativo por componentes com mais capacidade, memória e armazenamento.
Quando a carga diminui, o sistema precisa reduzir escala vertical (horizontal, vertical ou ambos).
Defina as circunstâncias em que o sistema aumenta ou diminui a escala. Planeje aumentar manualmente a escala dos sistemas para períodos conhecidos de alto tráfego. Use ferramentas como o escalonamento automático, que responde a aumentos ou diminuições na carga.
Recomendações
Para aproveitar a elasticidade, considere as recomendações nas seções a seguir.
Planejar 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 dos clientes.
Considere aumentar a escala do sistema antes de períodos conhecidos de alto tráfego. Por exemplo, se você é uma organização de varejo, espera que a demanda aumente durante as promoções sazonais. Recomendamos que você faça escalonar verticalmente ou escalonar horizontalmente manual dos sistemas antes dessas vendas para garantir que eles possam lidar imediatamente com o aumento da carga ou ajustar os limites atuais. Caso contrário, o sistema pode levar vários minutos para adicionar recursos em resposta a mudanças em tempo real. A capacidade do aplicativo pode não aumentar rápido o suficiente e causar atrasos para alguns usuários.
Para eventos desconhecidos ou inesperados, como um aumento repentino na demanda ou no tráfego, use recursos de escalonamento automático para acionar o escalonamento elástico com base em métricas. Elas podem incluir utilização da CPU, capacidade de veiculação do balanceador de carga, latência e até mesmo métricas personalizadas definidas no Cloud Monitoring.
Por exemplo, considere um aplicativo que é executado em um grupo gerenciado de instâncias (MIG) do Compute Engine. Esse aplicativo exige que cada instância funcione de maneira ideal até que a utilização média da CPU atinja 75%. Neste exemplo, você pode 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 garante 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 para configurações de escalonamento automático no Spanner usando o escalonador automático gerenciado.
Usar o 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 poucos minutos, o que permite ao autoescalador adaptar rapidamente a previsão para mudanças muito recentes na carga. Sem o escalonamento automático preditivo, um autoescalador só pode escalonar um grupo de modo reativo, com base nas mudanças observadas na carga em tempo real. O escalonamento automático preditivo funciona com dados em tempo real e históricos para responder à carga atual e prevista.
Implementar arquiteturas sem servidor
Considere implementar uma arquitetura sem servidor com serviços que são inerentemente elásticos, como:
Ao contrário do escalonamento automático em outros serviços que exigem regras de ajuste (por exemplo, o Compute Engine), o escalonamento automático sem servidor é instantâneo e pode reduzir escala vertical para zero recursos.
Usar o modo Autopilot para Kubernetes
Para aplicativos complexos que exigem mais controle sobre o Kubernetes, considere 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 o design modular
Esse princípio no pilar de otimização de performance do Google Cloud Well-Architected Framework fornece recomendações para ajudar você a promover um design modular. Componentes modulares e interfaces claras permitem 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, independente de uma arquitetura monolítica ou de microsserviços ter sido implantada inicialmente. Ao decompor o sistema em módulos bem definidos e independentes com interfaces claras, é possível escalonar componentes individuais para atender a demandas específicas.
O escalonamento segmentado pode ajudar a otimizar o uso de recursos e reduzir 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 alto tráfego para manter a experiência do usuário.
- Remove recursos pouco utilizados sem comprometer a performance.
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 redução de riscos.
Embora a modularidade ofereça vantagens significativas, é preciso avaliar as possíveis compensações de desempenho. O aumento da comunicação entre módulos pode introduzir latência e sobrecarga. Busque um equilíbrio entre modularidade e desempenho. Um design altamente modular pode não ser adequado para todos os casos. Quando o desempenho é essencial, uma abordagem mais acoplada pode ser adequada. O design de sistema é um processo iterativo em que você revisa e refina continuamente seu 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
Projete 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á projetá-lo como um serviço independente. Implemente um plano para falhas normais em subprocessos ou serviços menos importantes que não afetam o tempo de resposta dos serviços principais.
Projetar para simultaneidade e paralelismo
Projete seu aplicativo para oferecer suporte a 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 seu sistema. Divida tarefas grandes em partes menores que podem ser processadas ao mesmo tempo por várias instâncias de serviço. Com a simultaneidade de tarefas, é possível usar recursos como o escalonamento automático para aumentar a alocação de recursos em produtos como:
Equilibre a modularidade para uma alocação flexível de recursos
Sempre que possível, verifique se cada componente usa 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, enquanto a alocação insuficiente pode comprometer o desempenho.
Usar interfaces bem definidas
Verifique se os componentes modulares se comunicam de maneira eficaz por interfaces claras e padronizadas (como APIs e filas de mensagens) para reduzir o overhead das camadas de tradução ou do tráfego desnecessário.
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, independentemente das solicitações anteriores. Esse modelo facilita a escalonabilidade e a recuperação, porque você pode aumentar, diminuir ou reiniciar o serviço sem perder os dados necessários para solicitações ou processos em andamento.
Escolher tecnologias complementares
Escolha tecnologias que complementem o design modular. Avalie linguagens de programação, frameworks e bancos de dados quanto ao suporte à modularidade.
Para saber mais, acesse os recursos a seguir:
Monitorar e melhorar o desempenho continuamente
Esse princípio no pilar de otimização de performance do Google Cloud Well-Architected Framework fornece recomendações para ajudar você a monitorar e melhorar continuamente a performance.
Depois de implantar os aplicativos, monitore continuamente a performance deles usando registros, rastreamento, métricas e alertas. À medida que seus aplicativos crescem e evoluem, você pode usar as tendências nesses pontos de dados para reavaliar seus requisitos de desempenho. Talvez seja necessário reformular algumas partes dos aplicativos para manter ou melhorar o desempenho.
Visão geral do princípio
O processo de melhoria contínua da performance exige ferramentas e estratégias de monitoramento robustas. As ferramentas de observabilidade do Cloud ajudam a coletar indicadores principais de desempenho (KPIs) importantes, como latência, capacidade de processamento, taxas de erro e utilização de recursos. Os ambientes de nuvem oferecem vários métodos para realizar avaliações de desempenho granulares no aplicativo, na rede e na experiência do usuário final.
Melhorar a performance é um esforço contínuo que exige uma abordagem multifacetada. Os seguintes mecanismos e processos principais podem ajudar você a aumentar a performance:
- Para dar uma direção clara e ajudar a acompanhar o progresso, defina objetivos de performance que estejam alinhados às suas metas de negócios. Defina metas SMART: específicas, mensuráveis, alcançáveis, relevantes e com prazo determinado.
- Para medir a performance e identificar áreas de melhoria, colete métricas de KPI.
- Para monitorar continuamente seus sistemas em busca de problemas, use fluxos de trabalho visualizados em 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, ofereça treinamentos 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 constante sobre o desempenho do aplicativo.
Recomendações
Para promover designs modulares, considere as recomendações nas seções a seguir.
Definir metas e métricas de performance claras
Defina objetivos de performance claros que estejam alinhados às metas de negócios. Isso exige um entendimento profundo da arquitetura do aplicativo e dos requisitos de performance de cada componente.
Priorize a otimização dos componentes mais importantes que influenciam diretamente as funções comerciais principais e a experiência do usuário. Para garantir que esses componentes continuem funcionando de maneira eficiente e atendam às necessidades da sua empresa, defina metas de performance específicas e mensuráveis. Essas metas podem incluir tempos de resposta, taxas de erro e limites de utilização de recursos.
Essa abordagem proativa ajuda a identificar e resolver possíveis gargalos, otimizar a alocação de recursos e, por fim, oferecer uma experiência perfeita e de alta performance para os usuários.
Monitore o desempenho
Monitore continuamente seus sistemas de nuvem para identificar problemas de desempenho e configure alertas para possíveis problemas. O monitoramento e os alertas podem ajudar você a detectar e corrigir problemas antes que eles afetem os usuários. O 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 o Google Cloud Observability para identificar áreas com alto consumo de CPU, memória ou rede. Esses recursos podem ajudar os desenvolvedores a melhorar a eficiência, reduzir custos e aprimorar a experiência do usuário. O Network Intelligence Center mostra visualizações da topologia da sua infraestrutura de rede e ajuda você a identificar caminhos de alta latência.
Incentivar a melhoria contínua
Crie uma cultura de melhoria contínua que beneficie 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 serviços de nuvem. Estabeleça uma comunidade de prática (CoP) e ofereça programas de mentoria e treinamento para apoiar o crescimento dos funcionários.
Para evitar o gerenciamento de desempenho reativo e incentivar o gerenciamento proativo, peça feedback contínuo dos funcionários, clientes e partes interessadas. Você pode gamificar o processo acompanhando os KPIs de desempenho e apresentando essas métricas às equipes com frequência na forma de uma tabela de classificação.
Para entender sua performance e a satisfação do usuário ao longo do tempo, recomendamos que você meça o feedback do usuário de forma quantitativa e qualitativa. O framework HEART ajuda a coletar feedback dos usuários em cinco categorias:
- Felicidade
- Engajamento
- Adoção
- Retenção
- Sucesso da tarefa
Ao usar um framework desse tipo, você pode incentivar os engenheiros com feedback baseado em dados, métricas centradas no usuário, insights práticos e uma compreensão clara das metas.