Esse princípio do pilar de otimização de performance do Google Cloud framework bem arquitetado fornece recomendações para ajudar a promover um design modular. Componentes modulares e interfaces claras podem permitir 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, 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 escalonar componentes individuais para atender a demandas específicas.
O escalonamento direcionado pode ajudar a otimizar a utilização de recursos e reduzir os 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 tráfego intenso para manter a experiência do usuário.
- Remove recursos subutilizados sem comprometer o desempenho.
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 reduzir o risco.
Ainda que a modularidade ofereça vantagens significativas, é preciso avaliar as possíveis vantagens e desvantagens de desempenho. O aumento da comunicação entre os módulos pode introduzir latência e sobrecarga. Busque o equilíbrio entre modularidade e desempenho. Um design altamente modular pode não ser universalmente adequado. Quando o desempenho é essencial, uma abordagem com acoplamento mais rígido 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
Projetar 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á projetar o componente como um serviço independente. Implemente um plano para falhas suaves para subprocessos ou serviços menos importantes que não afetem o tempo de resposta dos serviços principais.
Projetar com foco em simultaneidade e paralelismo
Projete seu aplicativo para aceitar 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 possam ser processadas ao mesmo tempo por várias instâncias de serviço. A simultaneidade de tarefas permite usar recursos como escalonamento automático para aumentar a alocação de recursos em produtos como os seguintes:
Equilibre a modularidade para a alocação flexível de recursos
Sempre que possível, garanta que cada componente use 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, e a subalocação de recursos pode comprometer o desempenho.
Use 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 de camadas de conversão ou de 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 de maneira independente 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
Escolher tecnologias que complementem o design modular. Avaliar se as linguagens de programação, frameworks e bancos de dados são compatíveis com a modularidade.
Para saber mais, acesse os recursos a seguir: