Os desafios de desenvolver um software escalável

Com o passar do tempo, e o crescimento das empresas os softwares vão sendo cada vez mais utilizados, desse modo o volume de transações que passa pelos softwares crescem. Aumentar o poder de processamento de um servidor, comprando hardware mais robusto, não é uma forma econômica de resolver gargalos. Investir em Engenharia de Software , pode ser uma solução melhor. Visto que depois de um tempo, você irá precisar comprar hardware robusto novamente.

Para criar um bom software escalável lembre-se de alguns pontos:

– Entenda onde existem gargalos: Entenda sua demanda, e veja onde existe locais que a requisição demora, quais os motivos. Query ? Limite do banco de dados? Complexidade do código? Escalar código ineficiente, não é uma prática aconselhada.
– Paralelizar processamentos : Encontre processos que podem ser executados de forma paralela, sem impactos ao negócio. Promova uma arquitetura que consiga realizar esse processamento. Use mensagerias (rabbitmq, kafka, sqs..) para ter mais poder nessa etapa.
– Trate erros: Os erros não devem se espalhar, nem impedir a continuidade dos outros processamentos. As mensagerias também apoiam nesse ponto, filas DLQ guardam mensagens com erros, afim de processadas depois.
Tentativas: Não é porque não processou uma vez que a mensagem nunca irá processar, visto que pode existir uma falha no outro serviço que você esta usando, utilize de técnicas que possam permitir o retry.
– Monitoramento: Nunca é demais ter logos, métricas e tracing numa aplicação. Identifique como metrificar da melhor forma a saúde e os limites para escale-up/down da sua aplicação. Adicione alarmes para você ser avisado de qualquer instabilidade. ( tem post falando disso aqui)

Escalabilidade horizontal: Aumenta a quantidade de servidores iguais, sem precisar aumentar a performance. Vertical: Aumenta a capacidade do servidor, como memória ram e processador.
Infográfico sobre escalabilidade