Esse princípio no pilar de otimização de desempenho do Google Cloud Framework de arquitetura oferece 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 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: