Promover o design modular

Last reviewed 2024-12-06 UTC

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: