Esse pilar no Framework de arquitetura bem estruturada doGoogle Cloud fornece recomendações para otimizar o desempenho de 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 deste 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 tempos de resposta ficam mais rápidos para os usuários, o que pode aumentar a retenção de usuários e a 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 oferecer 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 carga baixa.
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:
- Definir requisitos: defina requisitos de desempenho granulares para cada camada da pilha de aplicativos antes de projetar e desenvolver os aplicativos. Para planejar a alocação de recursos, considere as principais características de carga de trabalho e as expectativas de desempenho.
- Projetar e implantar: use padrões de design elásticos e escalonáveis que podem ajudar a atender aos requisitos de desempenho.
- Monitorar e analisar: monitore a performance continuamente usando registros, rastreamento, métricas e alertas.
Otimizar: considere possíveis reformulações à medida que seus aplicativos evoluem. Dimensione os recursos da nuvem e use novos recursos para atender aos requisitos de desempenho em constante mudança.
Conforme mostrado no diagrama anterior, continue o ciclo de monitoramento, reavaliando os requisitos e ajustando os recursos da nuvem.
Para 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 estruturado.
Princípios básicos
As recomendações no pilar de otimização de desempenho do Framework bem estruturado são mapeadas para os seguintes princípios básicos:
- Planejar a alocação de recursos
- Aproveite a elasticidade
- Promove o design modular
- Monitorar e melhorar continuamente a performance
Colaboradores
Autores:
- Daniel Lees | Arquiteto de segurança do Cloud
- Gary Harmson | Engenheiro de clientes
- 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
- Wade Holmes | Diretor de soluções globais
Planejar a alocação de recursos
Esse princípio no pilar de otimização de desempenho do Google Cloud Framework bem estruturado 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 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 de processamento e as operações de E/S por segundo (IOPS) de que os aplicativos precisam.
Desde o início, planeje os designs de aplicativos pensando na performance e na escalonabilidade. Considere fatores como o número de usuários, o volume de dados e o potencial de 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 de componentes e serviços que têm 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 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 alinhados às metas de performance de cada carga de trabalho. Não existe uma única solução ideal para a otimização de performance. Ao otimizar cada carga de trabalho, todo o sistema pode alcançar o desempenho e a 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 a performance esperada do aplicativo.
- Colocação 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, aderir às 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 otimizem o acesso a dados e a entrega de conteúdo. Aproveite a rede global, as 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, é necessário avaliar as vantagens e desvantagens de desempenho de cada opção. Por exemplo, considere bare metal, máquinas virtuais, contêineres e plataformas 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, IOPS e throughput podem ter um impacto significativo no desempenho. 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 competências de desempenho necessárias para evitar efeitos imprevisíveis.
Recomendações
Para garantir a alocação ideal de recursos, considere as recomendações nas seções a seguir.
Configurar e gerenciar cotas
Confira 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 sub-alocação pode resultar em degradação do desempenho.
Para acomodar o escalonamento elástico e garantir que 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 superalocação e tomar decisões fundamentadas sobre a alocação de recursos.
Conscientizar e promover
Informe os usuários sobre os requisitos de desempenho e forneça recursos educacionais 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 pontos de interrupção em potencial e entender como escalonar o aplicativo.
Monitorar as métricas de desempenho
Use o Cloud Monitoring para analisar as tendências das 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 oferece insights e recomendações para otimizar a utilização de recursos. Essas recomendações podem ajudar você a ajustar a alocação de recursos e melhorar a performance.
Aproveite a elasticidade
Esse princípio no pilar de otimização de performance do Google Cloud Framework bem estruturado oferece 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 dimensionados 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 superprovisionar ou subprovisionar os recursos.
Visão geral do princípio
Os requisitos de desempenho de um sistema influenciam diretamente quando e como o sistema é dimensionado verticalmente ou horizontalmente. Você precisa avaliar a capacidade do sistema e determinar a carga que ele precisa processar no valor de referência. Em seguida, você precisa determinar como quer que o sistema responda aos aumentos e diminuições na carga.
Quando a carga aumenta, o sistema precisa fazer escalonamento horizontal, vertical ou ambos. Para escalonamento horizontal, adicione nós de réplica para garantir que o sistema tenha capacidade geral suficiente para atender à demanda aumentada. Para escalabilidade vertical, substitua os componentes atuais do aplicativo por componentes com mais capacidade, mais memória e mais armazenamento.
Quando a carga diminui, o sistema precisa ser reduzido (horizontalmente, verticalmente ou ambos).
Defina as circunstâncias em que o sistema aumenta ou diminui a escala. Planeje aumentar manualmente os sistemas para períodos conhecidos de tráfego intenso. 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 próximas seções.
Planejar períodos de pico de carga
Você precisa planejar um caminho de escalonamento eficiente para eventos conhecidos, como períodos de aumento esperado na demanda do cliente.
Considere aumentar o sistema antes de períodos conhecidos de tráfego intenso. Por exemplo, se você trabalha em uma organização de varejo, espera que a demanda aumente durante as vendas sazonais. Recomendamos que você aumente ou diminua manualmente os sistemas antes dessas vendas para garantir que o sistema possa processar imediatamente a carga aumentada ou ajustar imediatamente 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 seu aplicativo pode não aumentar rápido o suficiente e causar atrasos em alguns usuários.
Para eventos desconhecidos ou inesperados, como um aumento repentino na demanda ou no 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 a utilização da CPU, a capacidade de veiculação do balanceador de carga, a latência e até métricas personalizadas definidas no Cloud Monitoring.
Por exemplo, considere um aplicativo executado em um grupo gerenciado de instâncias (MIG, na sigla em inglês) do Compute Engine. Esse aplicativo tem um requisito de que cada instância tenha um desempenho ótimo 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 alcançado. 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 o escalonamento preditivo
Se os componentes do sistema incluem o Compute Engine, é necessário avaliar 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 métricas, por exemplo, a utilização da CPU. As previsões são recalculadas em intervalos de poucos minutos, para que o escalonador automático adapte rapidamente a previsão para alterações 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 sem servidor que são inerentemente elásticos, como estes:
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 ser reduzido para zero recursos.
Usar o modo Autopilot para Kubernetes
Para aplicativos complexos que exigem maior 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 os nós e os 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 Framework com boa arquitetura fornece recomendações para ajudar você a promover um design modular. Componentes modulares e interfaces claras podem permitir escalonamento flexível, atualizações independentes e separação de componentes futura.
Visão geral do princípio
Entenda as dependências entre os componentes do aplicativo e 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 dimensionar componentes individuais para atender a demandas específicas.
O escalonamento direcionado pode ajudar a otimizar o uso de recursos e reduzir custos das seguintes maneiras:
- Provisiona apenas os recursos necessários para cada componente e alocará 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 o desempenho.
O modularismo também melhora a 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 os módulos pode introduzir latência e sobrecarga. Procure um equilíbrio entre modularidade e desempenho. Um design altamente modular pode não ser adequado para todos os casos. Quando a performance é essencial, uma abordagem mais acoplada 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 próximas seções.
Crie designs com foco em acoplamento flexível
Projete uma arquitetura com acoplamento flexível. Componentes independentes com dependências mínimas podem ajudar a criar aplicativos escalonáveis e resilientes. Ao planejar os limites dos seus 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 suaves de subprocessos menos importantes ou serviços que não afetam o tempo de resposta dos serviços principais.
Projetar com foco em 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 o sistema. Divida tarefas grandes em partes menores que podem ser processadas ao mesmo tempo por várias instâncias de serviço. A simultaneidade de tarefas permite usar recursos como o escalonamento automático para aumentar a alocação de recursos em produtos como estes:
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 subalocação de recursos pode comprometer o desempenho.
Usar 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 das camadas de tradução ou do 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 independentemente 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
Escolha tecnologias que complementem o design modular. Avalie linguagens de programação, frameworks e bancos de dados para verificar o suporte à modularidade.
Para saber mais, acesse os recursos a seguir:
Monitorar e melhorar continuamente a performance
Esse princípio no pilar de otimização de desempenho do Google Cloud Framework de arquitetura bem estruturada fornece recomendações para ajudar você a monitorar e melhorar continuamente a performance.
Depois de implantar os aplicativos, monitore continuamente o desempenho deles usando registros, rastreamento, métricas e alertas. À medida que seus aplicativos crescem e evoluem, você pode usar as tendências desses pontos de dados para reavaliar seus requisitos de desempenho. Talvez seja necessário reformular partes dos aplicativos para manter ou melhorar o desempenho.
Visão geral do princípio
O processo de melhoria contínua de desempenho exige ferramentas e estratégias de monitoramento robustas. As ferramentas de observabilidade do Cloud podem ajudar você a coletar os principais indicadores de desempenho (KPIs), 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 requer uma abordagem multifacetada. Os principais mecanismos e processos a seguir podem ajudar a melhorar a performance:
- Para fornecer uma direção clara e ajudar a acompanhar o progresso, defina objetivos de desempenho que estejam alinhados às suas metas de negócios. Defina metas SMART: específicas, mensuráveis, alcançáveis, relevantes e com prazo.
- 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 processo 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 melhorias proativas e contínuas, 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 próximas seções.
Definir metas e métricas de desempenho claras
Defina objetivos de performance claros que estejam alinhados às suas metas de negócios. Isso exige um entendimento profundo da arquitetura do aplicativo e dos requisitos de desempenho de cada componente do aplicativo.
Como prioridade, otimize os componentes mais importantes que influenciam diretamente as funções principais da empresa e a experiência do usuário. Para garantir que esses componentes continuem funcionando de maneira eficiente e atendam às necessidades de negócios, defina metas de desempenho específicas e mensuráveis. Esses alvos podem incluir 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, oferecer uma experiência suave e de alto desempenho para os usuários.
Monitore o desempenho
Monitore continuamente seus sistemas de nuvem em busca de problemas de desempenho e configure alertas para possíveis problemas. O monitoramento e os alertas podem ajudar 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 da rede. Use a 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 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 seus funcionários oportunidades de treinamento e desenvolvimento que melhorem as habilidades e o conhecimento deles em técnicas de performance em serviços de nuvem. Estabeleça uma comunidade de prática (CoP, na sigla em inglês) e ofereça programas de mentoria 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 de funcionários, clientes e partes interessadas. Você pode considerar gamificar o processo rastreando KPIs de performance e apresentando essas métricas para as 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 medir o feedback do usuário de forma quantitativa e qualitativa. O modelo HEART pode ajudar você a coletar feedback dos usuários em cinco categorias:
- Felicidade
- Engajamento
- Adoção
- Retenção
- Sucesso da tarefa
Ao usar esse framework, você pode incentivar os engenheiros com feedback baseado em dados, métricas centradas no usuário, insights úteis e uma compreensão clara das metas.