Promover o design modular

Last reviewed 2024-12-06 UTC

Este 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 podem permitir escalonamento flexível, atualizações independentes e separação de componentes futuros.

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 bem definidos e independentes 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 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, é necessário avaliar as possíveis compensações de performance. O aumento da comunicação entre os módulos pode introduzir latência e sobrecarga. Busque um equilíbrio entre modularidade e performance. Um design altamente modular pode não ser universalmente adequado. Quando a performance é fundamental, uma abordagem mais fortemente 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 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 podem ajudar 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 de subprocessos ou serviços menos importantes que não afetam o tempo de resposta dos serviços principais.

Crie designs 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 os seguintes:

Equilibre a modularidade para 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 de recursos pode comprometer a performance.

Use 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 a sobrecarga de camadas de tradução ou de tráfego estranho.

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.

Escolha tecnologias complementares

Escolha tecnologias que complementam o design modular. Avalie linguagens de programação, frameworks e bancos de dados para o suporte de modularidade.

Para saber mais, acesse os recursos a seguir: