Caixa de ferramentas da Arquitetura de Software [Parte-1]
Tags: livro, arquiteturadesoftware, escalabilidade, desempenho
Published: 2024-03-25 15:54:55

Vou escrever uma série de publicações para descrever um pouco mais profundamente o conteúdo do meu livro "Caixa de ferramentas da Arquitetura de Software: Como tornar suas aplicações mais escaláveis, confiáveis e seguras" publicado pela Casa do Código no dia 19/03/2024.

Neste texto vou dar uma visão geral das duas primeiras partes do livro. O livro é dividido em 5 partes, a primeira parte é uma introdução a arquitetura de software, nela descrevo algumas visões sobre o que é arquitetura de software e mostro algumas das organizações mais comuns que são usadas para o desenvolvimento de software.

Depois, na segunda, terceira e quarta parte entro em cada um dos requisitos destacados no subtítulo do livro, que são **Escalabilidade**, **Confiabilidade** e **Segurança**. Esse requisitos são fortemente influenciados pela arquitetura de uma aplicação, e existem diversas ferramentas que podem ser utilizadas para atingir os objetivos da aplicação.

Na segunda parte eu foco em três requisitos importantes:

- Desempenho: Relacionado principalmente ao tempo de resposta da aplicação. Normalmente, esse tempo deve ser o menor possível, mas no mínimo ele deve atender as expectativas do usuário. Por exemplo, uma rota REST síncrona deve responder em alguns poucos segundos, se o tempo for muito maior que isso, será necessário pensar em alternativas para implementar essa rota, como por exemplo implementar uma rota assíncrona, que irá avisar o usuário quando o processamento está completo.
- Escalabilidade: Uma aplicação pode funcionar bem com poucos usuário, mas e se a carga aumentar, ela continua funcionando bem? Se sim, a aplicação é escalável, isso tem bastante relação com desempenho, normalmente algoritmos e aplicações eficientes são escaláveis, mas existem técnicas que podem aumentar a escalabilidade até de aplicações que podem ter desempenhos não tão bons, como cache e balanceamento de carga.
- Elasticidade: Muitas vezes é necessário usar uma grande infraestrutura para garantir a escalabilidade de uma aplicação. Porém, se a carga da aplicação varia muito, manter toda essa infraestrutura ligada o tempo todo pode desperdiçar muitos recursos. Imagine uma aplicação de entrega de comida, ela tem picos muito bem definidos nos horários do almoço e jantar, nessa hora a infraestrutura tem que estar toda funcionando, mas durante a madrugada, é possível atender toda a demanda com muito menos recursos. Isso pode diminuir drasticamente o custo para a execução da sua aplicação.

Esses três requisitos são extremamente importantes para manter a satisfação dos usuários da aplicação, mas sem que os custos explodam. Por exemplo, pode ser fácil garantir  desempenho e a escalabilidade de uma aplicação, basta executa-la em uma máquina com uma quantidade grade de recursos (memória, cpu, disco, rede, ...) ou em um cluster com uma grande quantidade de VMs. 

Porém, o custo disso pode ser muito alto. Por isso é extremamente importante conhecer técnicas que podem aumentar a capacidade de uma aplicação antes de simplesmente aumentar a quantidade de recursos utilizados para executar a aplicação.

No próximo post vou falar mais sobre a terceira parte do livro que foca na confiabilidade das aplicações. Até lá!