Tipos de Arquitetura no Desenvolvimento de Software
No que se refere a disciplina de arquitetura no desenvolvimento de software, nos deparamos com vários tipos de arquitetura. Cada qual, com suas características e especificidades.
Nesse artigo iremos abordar três tipos de arquitetura, são elas: Arquitetura de Software, Arquitetura de Soluções e Arquitetura Corporativa. Apesar de serem arquiteturas diferentes e terem funções específicas em algum momento durante o desenvolvimento elas acabam fazendo interface entre si.
Arquitetura de Software
Essa arquitetura é a que está mais próxima do código e do desenvolvedor. Concentra-se na organização interna de um sistema e aborda a divisão do sistema em componentes, como: classes, módulos ou serviços. Também define qual será a interação entre eles, sendo responsável por aspectos como a modularidade, escalabilidade, segurança e reutilização de código.
Algumas das definições dessa arquitetura:
• Qual a linguagem de programação será adotada;
Por exemplo: Java ou .NET C#.
• Quais frameworks e bibliotecas usar na solução;
Por exemplo, caso opte pela linguagem de programação Java, utilizar o Spring Boot Framework para facilitar e agilizar o desenvolvimento de aplicativos web e de microsserviços.
• Qual a forma de acesso a camada de dados, e de que maneira ocorrerá a persistência, se por algum framework de Mapeamento Objeto-Relacional ou manualmente. Caso opte por um ORM definir qual será a ferramenta utilizada;
Por exemplo: Hibernate ou EclipseLink.
• Qual o modelo arquitetural será usado na implementação e os padrões arquiteturais adequados que atendam aos requisitos do sistema.
Por exemplo: MVC, Arquitetura em Camadas, Cliente-Servidor, Hexagonal ou Orientada a Serviços.
• Qual a forma de comunicação entre os componentes do sistema;
Por exemplo: HTTP, REST ou Mensageria Assíncrona.
• De que forma se dará a escalabilidade e como o sistema será dimensionado para lidar com aumentos de carga e demanda;
Por exemplo: Balanceamento de Carga, Escalonamento Horizontal/Vertical ou Particionamento de Dados.
Qual seguir?
Esses tópicos listaram alguns exemplos de decisões arquiteturais que podem ser tomadas durante o processo de definição de uma arquitetura de software. Para essas definições não existe a resposta certa ou errada. Apenas a que melhor se encaixa para atender uma necessidade dentro de um contexto do negócio.
Essas decisões são muito importantes e devem ser tomadas com bastante embasamento e cautela, pois mudá-las mais tarde afetará toda a estrutura do sistema, ocasionando custos e atrasos indesejados no projeto. Por isso, é indicado a realização de Provas de Conceitos (POC's) para que as decisões tomadas sejam as mais assertivas possíveis e que garantam um sistema robusto, escalável e de alta qualidade.
É importante que o arquiteto de software tenha um bom conhecimento técnico e com base em suas experiências tome a melhor decisão para que o desenvolvimento seja fluido e cadenciado. Além do mais, o arquiteto deve estar preparado para agir em momentos de crise. Muitas vezes, ele poderá ser demandado para identificar problemas específicos e de complexidade elevada, como por exemplo debugar uma biblioteca ou framework para tomar uma decisão importante e corrigir um problema em produção, fazendo com que a operação volte a funcionar normalmente.
Arquitetura de Soluções
A Arquitetura de Soluções está em uma camada superior em relação a Arquitetura de Software, e é responsável por transformar o requisito do negócio em componentes de engenharia que irão atuar em conjunto para resolver o problema e atender as necessidades do negócio. Abrange a definição dos sistemas envolvidos, a integração entre eles, as interfaces de comunicação e as estratégias para garantir que a solução como um todo funcione de maneira eficaz e atinja seus objetivos.
Esse tipo de arquitetura é ideal para identificar áreas dentro de uma organização onde pode haver uma redução de custos, melhorar seu desempenho e automatizar os processos de modo a tornarem mais eficientes, otimizados e padronizados.
A principal diferença entre Arquitetura de Software e Arquitetura de Soluções é que a primeira trata apenas de questões relacionadas a engenharia, enquanto a segunda é responsável por garantir que um produto de software resolva um problema de negócio específico dentro da estratégia de uma empresa.
Atividades que estão associadas a esta disciplina:
• Compreender e analisar os requisitos do negócio e do sistema para identificar as necessidades e os objetivos da solução;
Por exemplo: Entrevistas/workshops, estudos de viabilidade e criação de diagramas de contexto.
• Criar e liderar os processos de integração entre sistemas para atender os requisitos de negócio;
Por exemplo: Definição de interfaces, serviços web (API's REST) e Middleware de integração (Kafka).
• Identificar e definir as medidas de segurança necessárias para proteger a solução contra ameaças;
Por exemplo: Autenticação, Autorização, Criptografia e proteção de dados sensíveis.
• Colaborar com stakeholders (desenvolvedores, analistas de negócios e gerentes de projeto), para garantir a compreensão e a adoção da arquitetura de soluções;
Por exemplo: Comunicação clara das decisões arquiteturais, realização de revisões técnicas e a obtenção de feedback dos envolvidos.
• Identificar os riscos associados à solução e desenvolver estratégia para mitigá-los;
Por exemplo: Análise de riscos técnicos, operacionais e segurança.
• Considerar os requisitos de desempenho, como tempo de resposta e capacidade de processamento, e também a capacidade de escalar a aplicação para lidar com picos de aumento de carga;
Por exemplo: Uso de caches, escalonamento horizontal, arquitetura de microsserviços ou serviços de mensageria.
Vínculo forte
Podemos concluir que a arquitetura de soluções está na divisão entre o técnico e o negócio, e que há um vínculo forte entre essas duas vertentes, considerando a importância de que a solução técnica está sendo definida para resolver um problema de negócio.
As habilidades de comunicação na arquitetura de soluções são imprescindíveis, pois há frequentemente um contato direto com a área de negócio, que normalmente tem o conhecimento técnico muito pequeno ou inexistente, com isso, cabe ao papel do arquiteto de soluções ser capaz de explicar e traduzir de forma simples toda a solução técnica que será construída, de uma forma abstrata o suficiente para que todos entendam.
Algo importante a se considerar é o conhecimento necessário para representar a arquitetura através de diagramas, como por exemplo o C4, e que ele possa representar de forma clara os componentes do software, a interface com outros sistemas, o fluxo de dados e demais informações que forem pertinentes tanto para a engenharia quanto para o negócio.
Arquitetura Corporativa
Define-se arquitetura corporativa como uma série de conhecimentos técnicos e habilidades de gestão que integram a tecnologia aos objetivos do negócio, é uma visão mais ampla que abrange a arquitetura de todo o ambiente de tecnologia da informação da organização.
Determina os princípios, políticas e os padrões de governança que orientam a estruturação dos sistemas de software e infraestrutura de uma empresa, se concentrando em como os diferentes sistemas e soluções se encaixam dentro do contexto organizacional, garantindo a consistência, a integração e a eficiência dos recursos de TI.
A arquitetura corporativa também considera fatores estratégicos e de negócios, alinhando a tecnologia da informação com os objetivos e necessidades da organização. Ela pode incluir a definição de modelos de processos de negócios, a gestão do portifólio de sistemas, a governança de TI e a definição de políticas de segurança da informação.
Decisões tomadas dentro desse tipo de arquitetura:
• Padronização de linguagem de programação e frameworks utilizados nas soluções dentro da empresa, delimitando quais tecnologias estarão habilitadas para serem utilizadas;
Por exemplo: Utilizar a stack Java com Spring Boot Framework em soluções de API.
• Padronização de bases de dados;
Por exemplo: SQLServer e Oracle.
• Processos de controle de mudança para auditoria de publicações em ambiente produtivo;
Por exemplo: Controle de acesso e permissões, revisão e aprovação de alterações.
• Definir e documentar um modelo de arquitetura que a organização irá trabalhar;
Por exemplo: Criar um diagrama que ilustre as principais camadas da arquitetura, abrangendo as camadas de apresentação, negócio e dados.
• Avaliar a implantação de novas tecnologias;
Por exemplo: Realização de Provas de Conceito (POC's) e pesquisas de mercado.
• Implementar soluções corporativas de DevOps;
Por exemplo: Automação de compilação e empacotamento utilizando o Jenkins como esteira de CI/CD.
Importância da arquitetura corporativa
Ter uma arquitetura corporativa é muito importante, pois define padrões que a empresa toda deve adotar e seguir, e ajuda a alinhar os objetivos estratégicos da organização com suas atividades operacionais, auxiliando na identificação de redundâncias, ineficiências e oportunidades de otimização, permitindo a simplificação, consolidação e racionalização dos recursos resultando em maior eficiência operacional e redução de custos.
A arquitetura corporativa auxilia na gestão do ciclo de vida dos sistemas de TI, desde o planejamento estratégico, estabelecendo padrões de qualidade, governança e conformidade para o desenvolvimento, implantação, operação e manutenção dos sistemas garantindo uma gestão efetiva e sustentável dos ativos de TI.
Conclusão
Nesse artigo, abordamos os três principais tipos de arquitetura existentes no desenvolvimento de software, os detalhes de cada tipo e como eles se relacionam entre si. Essa divisão é importante para que cada arquitetura foque em uma área específica de modo que as três juntas possam abranger todo o ciclo de desenvolvimento de um software.
Como vimos a arquitetura de software está mais próxima ao código e ao desenvolvedor, a arquitetura de soluções mais voltada ao negócio que a solução pretende resolver e a arquitetura corporativa para definir os padrões tecnológicos que a organização deve adotar para as soluções de software implementadas.
A aplicação desses tipos de arquitetura varia de acordo com o tamanho da organização, quanto maior, mais separado e específico os tipos de arquitetura, e quanto menor, menos separação entre os tipos de arquitetura, e muitas das vezes se fundindo em apenas um tipo.
É importante salientar que, para cada tipo de arquitetura, pode-se executar um papel diferente por parte do arquiteto, e cada qual com suas habilidades específicas para cada área, porém as habilidades de comunicação, senso crítico, proatividade e resiliência são comuns para todos os tipos de arquitetura.
Referências
https://blog.xpeducacao.com.br/o-que-e-arquitetura-de-software
https://www.infoq.com/br/articles/papel-arquiteto-solucao