arquitetura de software é a estrutura fundamental de um sistema, servindo como um mapa em que a construção do sistema se baseia e se mantém. ela descreve decisões estratégicas que afetam a organização, o comportamento e a qualidade do sistema num geral, incluindo:
- divisão em componentes
- ferramentas de comunicação e integração entre os componentes
- padrões e restrições de design
- decisões de alto nível de tecnologia e frameworks
a arquitetura de software é essencial para garantir que o sistema seja robusto, sustentável e alinhado aos objetivos do negócio. ao equilibrar decisões técnicas com requisitos funcionais e não-funcionais, ela assegura que o software possa evoluir com qualidade e eficiência ao longo do tempo.
importância
- base para tomadas de decisões estratégicas: ajuda a definir as tecnologias que serão usadas e como os componentes irão interagir;
- reusabilidade e manutenção: facilita a evolução e manutenção do sistema ao longo do tempo;
- comunicação entre stakeholders: serve como uma linguagem em comum entre desenvolvedores, gerentes e clientes;
- redução de riscos: identifica possíveis gargalos e desafios técnicos com antecedência
- alinhamento com requisitos não-funcionais: desempenho, segurança e escalabilidade, por exemplo.
os “ities” da arquitetura
os “ilities” são características cruciais para avaliar a qualidade da arquitetura. são qualidades que influenciam diretamente o sucesso do sistema em ambientes reais, e guiam as escolhas arquiteturais desde o início do projeto.
- availability: capacidade de estar disponível quando necessário;
- reliability: nível de funcionamento correto sem falhas inesperadas;
- testability: facilidade com que o sistema pode ser testado (incluindo testes automatizados)
- scalability: capacidade do sistema de lidar com aumentos de carga sem perda de desempenho;
- security: proteção contra acessos não autorizados, ataques, vazamentos e falhas maliciosas;
- agility: facilidade de adaptação do sistema a mudanças nos requisitos e no negócio;
- fault tolerance: capacidade do sistema de continuar funcionando mesmo quando uma parte dele estiver falhando;
- elasticity: capacidade de aumentar ou reduzir automaticamente os recursos computacionais, conforme a demanda;
- recoverability: tempo e facilidade com quem um sistema se recupera de falhas e incidentes, restaurando os níveis de serviço normais;
- performance: tempo de resposta e uso eficiente de recursos;
- deployability: velocidade com que novas versões podem ser implantadas em produção com o mínimo de impacto;
- learnability: facilidade de aprendizagem para construção e manutenção do sistema;
- maintainability: facilidade na manutenção e evolução do sistema, com eficiência de custos;
- observability: capacidade do sistema de fornecer métricas e logs que facilitem o monitoramento e diagnóstico de problemas;
- interoperability: facilidade de integração com outros sistemas internos e externos;
- extensibility: facilidade de adicionar novas funcionalidades sem grandes impactos;
- portability: facilidade de rodar em diferentes ambientes.