Arquitetura é um conjunto de partes que compõem o sistema e o ambiente em que está inserido, suas responsabilidades e seus relacionamentos.
Estilos e Padrões Arquiteturais de Software
Os sistemas seguem um estilo de organização estrutural, ou seja, são como "templates" para arquiteturas concretas que expressam uma organização estrutural, apresentando um conjunto pré-definidos de subsistemas e suas responsabilidades.
Um padrão arquitetural é uma solução que já foi estudada, testada e documentada de um problema recorrente. O modelo ajuda na tomada de decisões do projeto de software, como qual será sua utilidade e as funções e relacionamentos de cada subsistema, ou seja, é quem define a estrutura fundamental do programa.
Segue um resumo dos principais estilos e padrões de arquitetura de software:
Camadas: estrutura aplicações que podem ser decompostas em grupos de subtarefas hierarquicamente. Cada camada oferece serviço à camada acima dela, e serve como cliente da camada inferior. Suas vantagens são: permite particionar problemas complexos em uma sequência de passos incrementais; mudanças em uma camada afetam, no máximo, duas camadas adjacentes; permite projetos baseados em níveis crescentes de abstrações; suas desvantagens são: é difícil encontrar níveis corretos de abstração; nem todos os sistemas são facilmente estruturas em forma de camadas. Exemplo: Modelo OSI;
Cliente-Servidor: é baseado em programas servidores (aguarda mensagens, executa serviços e retorna resultados) e programas clientes (estabelece conexão, envia mensagens para servidor, aguarda mensagens de resposta). Vantagens: utilização dos recursos do servidor; escalabilidade; aumentando a capacidade computacional do servidor; Desvantagens: aumenta a complexidade e os custos de comunicação;
Tubos e filtros: divide a tarefa entre várias etapas de processamento sequencial, pois a saída de uma etapa é a entrada da etapa seguinte. Cada etapa de processamento é implementada pelo filtro, que consome e entrega os dados de forma incremental, em vez de todos os dados de uma só vez. O fluxo de dados é implementado pelos tubos. Exemplo: compilador; Vantagens: flexibilidade na troca de filtros e recombinação; eficiência em processamento em paralelo; vários filtros consumindo e produzindo dados em paralelos. Desvantagens: gerenciamento de erros e ausência de um estado global compartilhado;
Micro serviços: refere-se a um estilo de arquitetura para construção de software que decompõe o domínio de negócio em pequenos blocos, transaccionalmente consistentes e com contexto próprio;
Publish-Subscriber: é um modelo de comunicação assíncrono e fracamente acoplado, no qual uma aplicação gera eventos que serão processados por outras aplicações que tiverem interesse nele;
Representational State Transfer (REST): é um estilo de arquitetura utilizado para fornecer padrões entre sistemas de computador na web, facilitando a comunicação entre os mesmos. Neste estilo, a implementação do cliente e do servidor pode ser feita de forma independente, sem que um conheça o outro. A grande vantagem é que isso permite que o código de um dos lados pode ser alterado sem afetar o outro;
Arquitetura Orientada a Serviços (SOA): é um tipo de design de software que torna os componentes reutilizáveis, utilizando interfaces de serviços como uma linguagem de comunicação em uma rede. Ou seja, o SOA integra os componentes de software que foram implementados e são mantidos separadamente, permitindo que eles se comuniquem e trabalhem juntos para formar aplicações que funcionam em sistemas diferentes;
Model-View-Controller: neste estilo a aplicação é dividida em 3 camadas - Model (contém as funcionalidades principais e os dados), View (camada de exibição dos dados aos usuários), Controller (liga a model e a view, trafegando os dados entre as camadas). Vantagens: organização clara das abstrações, permite múltiplas views em um mesmo modelo e as views são sincronizadas. Desvantagens: aumenta a complexidade;
Broker: estrutura sistemas distribuídos que precisam interagir através de invocação remota de serviços (desacopla servidores de clientes e coordena a comunicação entre componentes). Exemplo: serviços de busca. Vantagens: transparência de localização dos serviços, flexibilidade, portabilidade. Desvantagens: sobrecarga de processamento;
Arquitetura Orientada a Eventos: é um método de desenvolvimento de software para criar aplicações que se comunicam ou se integram de forma assíncrona com outras aplicações e sistemas através de eventos. Ela é composta por produtores de eventos (enviam as mensagens), canais de eventos e seus consumidores (consomem as mensagens). A utilização de canais de eventos como intermediário permite que os produtores sejam dissociados dos consumidores, permitindo assim, que eles possam agir independentemente uns dos outros (o que possibilita maior escalabilidade e tolerância a falhas). Além disso, a organização de aplicações envolvendo eventos também permite que o código seja executado de forma assíncrona e automática, sem interação do usuário;
CQRS (Comand and Query Responsibility Segregation): este padrão é sobre separar a responsabilidade e escrita e leitura de seus dados. A ideia é segregar as responsabilidades da aplicação em Command (operações que modificam o estado dos dados na aplicação) e Query (operações que recuperam informações dos dados na aplicação);
Top comments (0)