Este pilar da Google Cloud estrutura bem arquitetada fornece recomendações para otimizar o desempenho das cargas de trabalho no Google Cloud.
Este documento destina-se a arquitetos, programadores e administradores que planeiam, concebem, implementam e gerem cargas de trabalho no Google Cloud.
As recomendações neste pilar podem ajudar a sua organização a operar de forma eficiente, melhorar a satisfação do cliente, aumentar a receita e reduzir os custos. Por exemplo, quando o tempo de processamento de back-end de uma aplicação diminui, os utilizadores têm tempos de resposta mais rápidos, o que pode levar a uma maior retenção de utilizadores e mais receita.
O processo de otimização do desempenho pode envolver um equilíbrio entre o desempenho e o custo. No entanto, a otimização do desempenho pode, por vezes, ajudar a reduzir os custos. Por exemplo, quando a carga aumenta, o dimensionamento automático pode ajudar a oferecer um desempenho previsível, garantindo que os recursos do sistema não ficam sobrecarregados. A escala automática também ajuda a reduzir os custos removendo recursos não usados durante períodos de carga baixa.
A otimização do desempenho é um processo contínuo e não uma atividade única. O diagrama seguinte mostra as fases do processo de otimização do desempenho:
O processo de otimização do desempenho é um ciclo contínuo que inclui as seguintes fases:
- Defina requisitos: defina requisitos de desempenho detalhados para cada camada da pilha de aplicações antes de conceber e desenvolver as suas aplicações. Para planear a atribuição de recursos, considere as principais características da carga de trabalho e as expetativas de desempenho.
- Conceba e implemente: use padrões de conceção elásticos e escaláveis que podem ajudar a cumprir os seus requisitos de desempenho.
- Monitorize e analise: monitorize o desempenho continuamente através de registos, rastreio, métricas e alertas.
Otimize: considere potenciais reformulações à medida que as suas aplicações evoluem. Ajuste os recursos da nuvem e use novas funcionalidades para cumprir os requisitos de desempenho em constante mudança.
Conforme mostrado no diagrama anterior, continue o ciclo de monitorização, reavaliação dos requisitos e ajuste dos recursos da nuvem.
Para ver princípios e recomendações de otimização do desempenho específicos das cargas de trabalho de IA e ML, consulte o artigo Perspetiva de IA e ML: otimização do desempenho no Well-Architected Framework.
Princípios fundamentais
As recomendações no pilar de otimização do desempenho da Well-Architected Framework estão mapeadas para os seguintes princípios essenciais:
- Planeie a atribuição de recursos
- Tire partido da elasticidade
- Promova o design modular
- Monitorize e melhore continuamente o desempenho
Colaboradores
Autores:
- Daniel Lees | Arquiteto de segurança da nuvem
- Gary Harmson | Principal Architect
- Luis Urena | Developer Relations Engineer
- Zach Seils | Especialista em redes
Outros colaboradores:
- Filipe Gracio, PhD | Engenheiro de clientes, especialista em IA/AA
- Jose Andrade | Customer Engineer, SRE Specialist
- Kumar Dhanagopal | Cross-Product Solution Developer
- Marwan Al Shawi | Partner Customer Engineer
- Nicolas Pintaux | Customer Engineer, Application Modernization Specialist
- Ryan Cox | Principal Architect
- Radhika Kanakam | Program Lead, Google Cloud Well-Architected Framework
- Samantha He | Redatora técnica
- Wade Holmes | Global Solutions Director
Planeie a atribuição de recursos
Este princípio no pilar de otimização do desempenho do Google Cloud Well-Architected Framework fornece recomendações para ajudar a planear recursos para as suas cargas de trabalho no Google Cloud. Enfatiza a importância de definir requisitos detalhados antes de conceber e desenvolver aplicações para implementação ou migração na nuvem.
Vista geral do princípio
Para cumprir os requisitos da sua empresa, é importante que defina os requisitos de desempenho das suas aplicações antes da conceção e do desenvolvimento. Defina estes requisitos da forma mais detalhada possível para a aplicação como um todo e para cada camada da pilha de aplicações. Por exemplo, na camada de armazenamento, tem de considerar o débito e as operações de I/O por segundo (IOPS) de que as aplicações precisam.
Desde o início, planeie designs de aplicações tendo em conta o desempenho e a escalabilidade. Considere fatores como o número de utilizadores, 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 que têm conjuntos únicos de características de desempenho. Por exemplo, um sistema responsável pelo processamento em lote periódico de grandes conjuntos de dados tem requisitos de desempenho diferentes de uma solução de computador virtual interativa. As suas estratégias de otimização têm de abordar as necessidades específicas de cada carga de trabalho.
Selecione serviços e funcionalidades que estejam alinhados com os objetivos de desempenho de cada carga de trabalho. Para a otimização do desempenho, não existe uma solução única. Quando otimiza cada carga de trabalho, todo o sistema pode alcançar o desempenho e a eficiência ideais.
Considere as seguintes caraterísticas da carga de trabalho que podem influenciar os seus requisitos de desempenho:
- Arquétipo de implementação: o arquétipo de implementação que selecionar para uma aplicação pode influenciar a sua escolha de produtos e funcionalidades, que, por sua vez, determinam o desempenho que pode esperar da sua aplicação.
- Posicionamento de recursos: quando seleciona uma Google Cloud região para os recursos da sua aplicação, recomendamos que dê prioridade à baixa latência para os utilizadores finais, cumpra os regulamentos de localidade dos dados e garanta a disponibilidade dos Google Cloud produtos e serviços necessários.
- Conetividade de rede: escolha serviços de rede que otimizam o acesso aos dados e o fornecimento de conteúdo. Tire partido da rede global da Google Cloud, das redes de alta velocidade, das localizações de interconexão e dos serviços de colocação em cache.
- Opções de alojamento de aplicações: quando seleciona uma plataforma de alojamento, tem de avaliar as vantagens e as desvantagens de desempenho de cada opção. Por exemplo, considere plataformas bare metal, máquinas virtuais, contentores 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 o débito podem ter um impacto significativo no desempenho. Além disso, no início da fase de design, tem de considerar as capacidades de segurança adequadas e o respetivo impacto nos recursos. Quando planear funcionalidades de segurança, prepare-se para acomodar as compensações de desempenho necessárias para evitar efeitos imprevistos.
Recomendações
Para garantir uma atribuição de recursos ideal, considere as recomendações nas secções seguintes.
Configure e faça a gestão de quotas
Certifique-se de que a sua aplicação usa apenas os recursos necessários, como memória, armazenamento e capacidade de processamento. A atribuição excessiva pode gerar despesas desnecessárias, enquanto a atribuição insuficiente pode resultar na degradação do desempenho.
Para acomodar o dimensionamento elástico e garantir que existem recursos adequados, monitorize regularmente a capacidade das suas quotas. Além disso, acompanhe a utilização da quota para identificar potenciais restrições de escalabilidade ou problemas de atribuição excessiva e, em seguida, tome decisões informadas sobre a atribuição de recursos.
Eduque e promova a sensibilização
Informe os seus utilizadores acerca dos requisitos de desempenho e faculte recursos educativos sobre técnicas eficazes de gestão do desempenho.
Para avaliar o progresso e identificar áreas de melhoria, documente regularmente o desempenho alvo e o desempenho real. Faça um teste de carga da sua aplicação para encontrar potenciais pontos de rutura e compreender como pode dimensionar a aplicação.
Monitorize as métricas de desempenho
Use o Cloud Monitoring para analisar tendências nas métricas de desempenho, analisar os efeitos das experiências, definir alertas para métricas críticas e realizar análises retrospetivas.
O Active Assist é um conjunto de ferramentas que podem fornecer estatísticas e recomendações para ajudar a otimizar a utilização de recursos. Estas recomendações podem ajudar a ajustar a atribuição de recursos e melhorar o desempenho.
Tire partido da elasticidade
Este princípio no pilar de otimização do desempenho da Google Cloud estrutura bem arquitetada fornece recomendações para ajudar a incorporar a elasticidade, que é a capacidade de ajustar os recursos dinamicamente com base nas alterações nos requisitos da carga de trabalho.
A elasticidade permite que diferentes componentes de um sistema sejam dimensionados de forma independente. Esta expansão segmentada pode ajudar a melhorar o desempenho e a eficiência de custos através da atribuição de recursos precisamente onde são necessários, sem aprovisionar em excesso ou em falta os seus recursos.
Vista geral do princípio
Os requisitos de desempenho de um sistema influenciam diretamente quando e como o sistema é dimensionado verticalmente ou horizontalmente. Tem de avaliar a capacidade do sistema e determinar a carga que o sistema deve processar na linha de base. Em seguida, tem de determinar como quer que o sistema responda aos aumentos e diminuições na carga.
Quando a carga aumenta, o sistema tem de escalar na horizontal, escalar na vertical ou ambas as opções. Para a escalabilidade horizontal, adicione nós de réplica para garantir que o sistema tem capacidade geral suficiente para satisfazer o aumento da procura. Para a escalabilidade vertical, substitua os componentes existentes da aplicação por componentes que contenham mais capacidade, mais memória e mais armazenamento.
Quando a carga diminui, o sistema tem de ser reduzido (horizontalmente, verticalmente ou ambos).
Defina as circunstâncias em que o sistema aumenta ou diminui a escala. Planeie aumentar manualmente a escala dos sistemas para períodos conhecidos de tráfego elevado. Use ferramentas como o dimensionamento automático, que responde a aumentos ou diminuições na carga.
Recomendações
Para tirar partido da elasticidade, considere as recomendações nas secções seguintes.
Planeie períodos de carga máxima
Tem de planear um caminho de escalabilidade eficiente para eventos conhecidos, como períodos esperados de aumento da procura dos clientes.
Considere dimensionar o seu sistema antes de períodos conhecidos de tráfego elevado. Por exemplo, se for uma organização de retalho, espera que a procura aumente durante as vendas sazonais. Recomendamos que aumente ou expanda manualmente os seus sistemas antes dessas vendas para garantir que o sistema consegue processar imediatamente o aumento da carga ou ajustar imediatamente os limites existentes. Caso contrário, o sistema pode demorar vários minutos a adicionar recursos em resposta a alterações em tempo real. A capacidade da sua aplicação pode não aumentar com rapidez suficiente e causar atrasos para alguns utilizadores.
Para eventos desconhecidos ou inesperados, como um aumento súbito na procura ou no tráfego, pode usar funcionalidades de dimensionamento automático para acionar o dimensionamento elástico com base em métricas. Estas métricas podem incluir a utilização da CPU, a capacidade de publicação do balanceador de carga, a latência e até métricas personalizadas que define no Cloud Monitoring.
Por exemplo, considere uma aplicação que é executada num grupo de instâncias geridas (GIG) do Compute Engine. Esta aplicação tem um requisito de que cada instância tenha um desempenho ideal até a utilização média da CPU atingir 75%. Neste exemplo, pode definir uma política de escalamento automático que cria mais instâncias quando a utilização da CPU atinge o limite. Estas instâncias recém-criadas ajudam a absorver a carga, o que ajuda a garantir que a utilização média da CPU permanece a uma taxa ideal até ser atingido o número máximo de instâncias que configurou para o MIG. Quando a procura diminui, a política de escala automática remove as instâncias que já não são necessárias.
Planeie reservas de recursos de slots no BigQuery ou ajuste os limites das configurações de escalamento automático no Spanner através do escalamento automático gerido.
Use o ajuste de escala preditivo
Se os componentes do seu sistema incluírem o Compute Engine, tem de avaliar se o dimensionamento automático preditivo é adequado para a sua carga de trabalho. O dimensionamento automático preditivo prevê a carga futura com base nas tendências históricas das suas métricas, por exemplo, a utilização da CPU. As previsões são recalculadas a cada poucos minutos, pelo que o ajuste automático adapta rapidamente a respetiva previsão às alterações de carga muito recentes. Sem o dimensionamento automático preditivo, um dimensionador automático só pode dimensionar um grupo de forma reativa, com base nas alterações em tempo real observadas na carga. O dimensionamento automático preditivo funciona com dados em tempo real e dados do histórico para responder à carga atual e prevista.
Implemente 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 da escala automática noutros serviços que requerem regras de ajuste preciso (por exemplo, o Compute Engine), a escala automática sem servidor é instantânea e pode ser reduzida para zero recursos.
Use o modo Autopilot para o Kubernetes
Para aplicações complexas que requerem um maior controlo sobre o Kubernetes, considere o modo Autopilot no Google Kubernetes Engine (GKE). O modo de piloto automático oferece automatização e escalabilidade por predefinição. O GKE dimensiona automaticamente os nós e os recursos com base no tráfego. O GKE gere os nós, cria novos nós para as suas aplicações e configura atualizações e reparações automáticas.
Promova o design modular
Este princípio no pilar de otimização do desempenho da Google Cloud estrutura bem arquitetada oferece recomendações para ajudar a promover um design modular. Os componentes modulares e as interfaces claras podem permitir um dimensionamento flexível, atualizações independentes e a separação de componentes no futuro.
Vista geral do princípio
Compreender as dependências entre os componentes da aplicação e os componentes do sistema para criar um sistema escalável.
O design modular permite flexibilidade e resiliência, independentemente de ter sido implementada inicialmente uma arquitetura monolítica ou de microserviços. Ao decompor o sistema em módulos bem definidos e independentes com interfaces claras, pode dimensionar componentes individuais para satisfazer exigências específicas.
O dimensionamento segmentado pode ajudar a otimizar a utilização de recursos e reduzir os custos das seguintes formas:
- Aprovisiona apenas os recursos necessários a cada componente e afeta menos recursos a componentes menos exigentes.
- Adiciona mais recursos durante períodos de tráfego elevado para manter a experiência do utilizador.
- Remove recursos pouco usados sem comprometer o desempenho.
A modularidade também melhora a capacidade de manutenção. As unidades mais pequenas e autónomas são mais fáceis de compreender, depurar e atualizar, o que pode levar a ciclos de desenvolvimento mais rápidos e a um risco reduzido.
Embora a modularidade ofereça vantagens significativas, tem de avaliar as potenciais compromissos de desempenho. O aumento da comunicação entre os módulos pode introduzir latência e sobrecarga. Procure um equilíbrio entre a modularidade e o desempenho. Um design altamente modular pode não ser universalmente adequado. Quando o desempenho é fundamental, uma abordagem mais estreitamente associada pode ser adequada. O design do sistema é um processo iterativo no qual revê e refina continuamente o seu design modular.
Recomendações
Para promover designs modulares, considere as recomendações nas secções seguintes.
Crie a pensar no acoplamento fraco
Crie uma arquitetura com acoplamento fraco. Os componentes independentes com o mínimo de dependências podem ajudar a criar aplicações escaláveis e resilientes. Ao planear os limites dos seus serviços, tem de considerar os requisitos de disponibilidade e escalabilidade. Por exemplo, se um componente tiver requisitos diferentes dos outros componentes, pode conceber o componente como um serviço autónomo. Implemente um plano para falhas elegantes para subprocessos menos importantes ou serviços que não afetam o tempo de resposta dos serviços principais.
Crie em função da simultaneidade e do paralelismo
Conceba a sua aplicação para suportar várias tarefas em simultâneo, como o processamento de vários pedidos de utilizadores ou a execução de tarefas em segundo plano enquanto os utilizadores interagem com o seu sistema. Dividir tarefas grandes em partes mais pequenas que podem ser processadas ao mesmo tempo por várias instâncias de serviço. A simultaneidade de tarefas permite-lhe usar funcionalidades como o dimensionamento automático para aumentar a atribuição de recursos em produtos como os seguintes:
Equilibre a modularidade para uma atribuição de recursos flexível
Sempre que possível, certifique-se de que cada componente usa apenas os recursos necessários (como memória, armazenamento e capacidade de processamento) para operações específicas. A atribuição excessiva de recursos pode resultar em custos desnecessários, enquanto a atribuição insuficiente de recursos pode comprometer o desempenho.
Use interfaces bem definidas
Certifique-se de que os componentes modulares comunicam eficazmente através de interfaces claras e padronizadas (como APIs e filas de mensagens) para reduzir a sobrecarga das camadas de tradução ou do tráfego estranho.
Use modelos sem estado
Um modelo sem estado pode ajudar a garantir que consegue processar cada pedido ou interação com o serviço independentemente dos pedidos anteriores. Este modelo facilita a escalabilidade e a capacidade de recuperação, porque pode aumentar, diminuir ou reiniciar o serviço sem perder os dados necessários para pedidos ou processos em curso.
Escolha tecnologias complementares
Escolha tecnologias que complementem o design modular. Avalie as linguagens de programação, as estruturas e as bases de dados quanto ao respetivo suporte de modularidade.
Para obter mais informações, consulte os seguintes recursos:
Monitorize e melhore continuamente o desempenho
Este princípio no pilar de otimização do desempenho da Google Cloud estrutura bem arquitetada fornece recomendações para ajudar a monitorizar e melhorar continuamente o desempenho.
Depois de implementar aplicações, monitorize continuamente o respetivo desempenho através de registos, rastreio, métricas e alertas. À medida que as suas aplicações crescem e evoluem, pode usar as tendências nestes pontos de dados para reavaliar os seus requisitos de desempenho. Eventualmente, pode ter de reformular partes das suas aplicações para manter ou melhorar o respetivo desempenho.
Vista geral do princípio
O processo de melhoria contínua do desempenho requer ferramentas e estratégias de monitorização robustas. As ferramentas de observabilidade na nuvem podem ajudar a recolher indicadores essenciais de desempenho (IEDs), como a latência, o débito, as taxas de erro e a utilização de recursos. Os ambientes de nuvem oferecem vários métodos para realizar avaliações de desempenho detalhadas na aplicação, na rede e na experiência do utilizador final.
A melhoria do desempenho é um esforço contínuo que requer uma abordagem multifacetada. Os seguintes mecanismos e processos principais podem ajudar a melhorar o desempenho:
- Para dar uma orientação clara e ajudar a acompanhar o progresso, defina objetivos de desempenho que se alinhem com os objetivos da sua empresa. Defina objetivos SMART: específicos, mensuráveis, alcançáveis, relevantes e com prazos.
- Para medir o desempenho e identificar áreas de melhoria, recolha métricas de IEDs.
- Para monitorizar continuamente os seus sistemas quanto a problemas, use fluxos de trabalho visualizados em ferramentas de monitorização. 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 formação e programas que apoiem o crescimento dos seus funcionários.
- Para incentivar a melhoria proativa e contínua, motive os seus funcionários e clientes a fornecerem feedback contínuo sobre o desempenho da sua aplicação.
Recomendações
Para promover designs modulares, considere as recomendações nas secções seguintes.
Defina métricas e objetivos de desempenho claros
Defina objetivos de desempenho claros que se alinhem com os objetivos da sua empresa. Isto requer uma compreensão profunda da arquitetura da sua aplicação e dos requisitos de desempenho de cada componente da aplicação.
Como prioridade, otimize os componentes mais críticos que influenciam diretamente as funções empresariais essenciais e a experiência do utilizador. Para ajudar a garantir que estes componentes continuam a ser executados de forma eficiente e a satisfazer as necessidades da sua empresa, defina alvos de desempenho específicos e mensuráveis. Estes alvos podem incluir tempos de resposta, taxas de erro e limites de utilização de recursos.
Esta abordagem proativa pode ajudar a identificar e resolver potenciais gargalos, otimizar a atribuição de recursos e, em última análise, oferecer uma experiência integrada e de alto desempenho aos seus utilizadores.
Monitorize o desempenho
Monitorize continuamente os seus sistemas na nuvem para detetar problemas de desempenho e configure alertas para potenciais problemas. A monitorização e os alertas podem ajudar a detetar e corrigir problemas antes que afetem os utilizadores. A criação de perfis de aplicações pode ajudar a identificar restrições e a otimizar a utilização de recursos.
Pode usar ferramentas que facilitam a resolução de problemas eficaz e a otimização da rede. Use o Google Cloud Observability para identificar áreas com consumo elevado de CPU, consumo de memória ou consumo de rede. Estas capacidades podem ajudar os programadores a melhorar a eficiência, reduzir os custos e melhorar a experiência do utilizador. O Network Intelligence Center mostra visualizações da topologia da sua infraestrutura de rede e pode ajudar a identificar caminhos de latência elevada.
Incentive a melhoria contínua
Crie uma cultura de melhoria contínua que possa beneficiar a aplicação e a experiência do utilizador.
Ofereça aos seus funcionários oportunidades de formação e desenvolvimento que melhoram as suas competências e conhecimentos em técnicas de desempenho nos serviços na nuvem. Estabeleça uma comunidade de prática (CoP) e ofereça programas de mentoria e coaching para apoiar o crescimento dos funcionários.
Para evitar a gestão do desempenho reativa e incentivar a gestão do desempenho proativa, incentive o feedback contínuo dos seus funcionários, clientes e partes interessadas. Pode considerar a gamificação do processo através da monitorização dos IEDs de desempenho e da apresentação dessas métricas às equipas com frequência sob a forma de uma tabela de classificação.
Para compreender o seu desempenho e a satisfação dos utilizadores ao longo do tempo, recomendamos que meça o feedback dos utilizadores de forma quantitativa e qualitativa. A estrutura HEART pode ajudar a captar o feedback dos utilizadores em cinco categorias:
- Felicidade
- Relação
- Adoção
- Retenção
- Êxito da tarefa
Ao usar uma estrutura deste tipo, pode incentivar os engenheiros com feedback orientado por dados, métricas centradas no utilizador, estatísticas acionáveis e uma compreensão clara dos objetivos.