Arquitetura de Sistemas


 

Quando falamos em desenvolvimento de sistemas pensamos logo em programas, estruturas de dados, bancos de dados e diagramas. No entanto, para que todas essas partes funcionem corretamente precisamos definir a arquitetura do sistema e isso é feito a partir da identificação das necessidades do próprio sistema em relação aos objetivos do usuário.

Um bom ponto de partida é levantar os requisitos não-funcionais porque muitos desses são necessidades de infraestrutura para o sistema o que pode guiar as decisões necessárias. Suponhamos que um requisito não-funcional seja a comunicação com um mainframe para obter certos dados, esse tipo de comunicação é realizado geralmente através de uma fila de mensagens na qual podemos encaminhar requisições e da qual podemos consumir respostas do processamento.

Atualmente já existem vários padrões de arquitetura de sistemas documentados para trabalharmos, existem também linguagens de descrição de arquitetura de forma que possamos especificar como as diversas partes do sistema se relacionam. O uso de tais linguagens no entanto não é tão amplo ainda (na indústria) por ainda enfrentarmos muitas dificuldades em relação a especificação padronizada de interfaces entre componentes, isso se deve em grande parte por ainda vivermos a era do artesanato de software.

Como exemplos de arquiteturas já consagradas temos:

  • Monolítico – uma aplicação que integra em si todas as funcionalidades do sistema não apresentando características de integração com outros componentes externos. Todas as necessidades são providas pela própria aplicação.
  • Cliente-Servidor – este modelo separa aplicações que precisam de certos serviços de aplicações capazes de oferecer esse serviço. Um exemplo tradicional é o de aplicações de duas camadas onde as regras de negócio estão integradas ao sistema cliente (muitas vezes chamado de heavy-client ou rich-client, pois sendo uma aplicação completa permite total controle da aplicação), esta aplicação cliente precisa ser instalada em todas as máquinas que vão executar o sistema. Por outro lado o servidor de banco de dados é isolado em uma camada própria sendo acessado por todas as máquinas clientes que armazenam suas informações em um banco compartilhado.
  • Peer-to-Peer ou P2P – este modelo não faz distinção clara entre os papéis de cliente e servidor, todos os participantes do processamento tem capacidades semelhates de funcionalidades podendo assumir qualquer dos dois papéis. Esse modelo é muito empregado em redes de compartilhamento de arquivos e informações.
  • Três Camadas – este modelo é derivado do modelo de várias camadas, e tido como uma evolução em relação ao modelo de duas camadas. Neste caso as regras de negócio que estavam presentes na aplicação cliente são extraídas e agrupadas em módulos de aplicação que podem ser instalados em um servidor próprio sendo acessados pelos clientes via rede (neste caso thin-clients por não apresentarem todas as funcionalidades para executar o sistema). Uma grande vantagem desse modelo é garantir o acesso de muitos usuários ao sistema sem que seja necessário instalar aplicações em suas máquinas, isto porque normalmente esse modelo é implementado através de tecnologia web, ou seja, a aplicação cliente é o navegador web que dá acesso as telas do sistema propriamente dito. Uma discussão que deriva dessa característica é que a tecnologia web tem uma série de restrições que tornam a experiência do usuário em relação ao sistema muito pobre. Atualmente contamos com uma série de tecnologias que tem como objetivo prover recursos web mais poderosos a fim de melhorar as interfaces em uma busca de rich-clients para web tais como os que existiam para aplicações duas camadas.
  • Arquitetura Orientada a Serviço – uma vez identificadas partes do sistema que possam prover alguma funcionalidade para vários clientes podemos adotar uma postura de isolar essas partes em componentes e este é o primeiro passo em direção do fornecimento de um serviço. Um serviço é uma interface para uma certa funcionalidade do sistema que é capaz de forma independente (ou o mais independente possível) oferecer um processamento para o cliente. Uma tecnologia que ganhou muito destaque nesse contexto foram os web services, que são interfaces web para componentes que prestam algum serviço, assim podemos integrar sistemas distintos utilizando a tecnologia web como base. Quando juntamos esses serviços de forma ordenada tal que passamos a ter uma visão mais ampla estamos orientando nosso sistema para serviços.

Além desses existem outros modelos de arquitetura de sistemas que se aplicam aos mais diversos tipos de problemas que encontramos no desenvolvimento de sistemas de informação. A importância da identificação e do estudo desses modelos está no fato de que esses modelos definem as formas de interação entre as diversas (e podem ser muitas) partes do sistema. Tal como as estruturas de dados agilizam o trabalho de programar, os modelos de arquitetura agilizam o trabalho definir as interações do sistema.

Leave a Reply