Arquitetura Hierárquica

A arquitetura hierárquica vê todo o sistema como uma estrutura hierárquica, na qual o sistema de software é decomposto em módulos ou subsistemas lógicos em diferentes níveis da hierarquia. Essa abordagem é normalmente usada no projeto de software de sistema, como protocolos de rede e sistemas operacionais.

No projeto de hierarquia de software do sistema, um subsistema de baixo nível fornece serviços para seus subsistemas de nível superior adjacentes, que invocam os métodos no nível inferior. A camada inferior fornece funcionalidades mais específicas, como serviços de E / S, transações, agendamento, serviços de segurança, etc. A camada intermediária fornece mais funções dependentes de domínio, como lógica de negócios e serviços de processamento de núcleo. E, a camada superior fornece mais funcionalidade abstrata na forma de interface do usuário, como GUIs, recursos de programação de shell, etc.

Ele também é usado na organização das bibliotecas de classes, como a biblioteca de classes .NET na hierarquia de namespace. Todos os tipos de design podem implementar essa arquitetura hierárquica e geralmente combinam com outros estilos de arquitetura.

Os estilos arquitetônicos hierárquicos são divididos como -

  • Main-subroutine
  • Master-slave
  • Máquina virtual

Sub-rotina principal

O objetivo deste estilo é reutilizar os módulos e desenvolver livremente módulos individuais ou sub-rotinas. Neste estilo, um sistema de software é dividido em sub-rotinas usando refinamento de cima para baixo de acordo com a funcionalidade desejada do sistema.

Esses refinamentos conduzem verticalmente até que os módulos decompostos sejam simples o suficiente para ter sua responsabilidade independente e exclusiva. A funcionalidade pode ser reutilizada e compartilhada por vários chamadores nas camadas superiores.

Existem duas maneiras pelas quais os dados são passados ​​como parâmetros para sub-rotinas, a saber -

  • Pass by Value - As sub-rotinas usam apenas os dados anteriores, mas não podem modificá-los.

  • Pass by Reference - As sub-rotinas usam bem como alteram o valor dos dados referenciados pelo parâmetro.

Vantagens

  • Fácil de decompor o sistema com base no refinamento da hierarquia.

  • Pode ser usado em um subsistema de design orientado a objetos.

Desvantagens

  • Vulnerável, pois contém dados compartilhados globalmente.

  • O acoplamento rígido pode causar mais efeitos em cascata de alterações.

Senhor de escravos

Essa abordagem aplica o princípio de 'dividir para conquistar' e oferece suporte à computação de falhas e à precisão computacional. É uma modificação da arquitetura da sub-rotina principal que fornece confiabilidade do sistema e tolerância a falhas.

Nessa arquitetura, os escravos fornecem serviços duplicados ao mestre, e o mestre escolhe um resultado particular entre os escravos por uma certa estratégia de seleção. Os escravos podem realizar a mesma tarefa funcional por diferentes algoritmos e métodos ou funcionalidade totalmente diferente. Inclui computação paralela na qual todos os escravos podem ser executados em paralelo.

A implementação do padrão Master-Slave segue cinco etapas -

  • Especifique como o cálculo da tarefa pode ser dividido em um conjunto de subtarefas iguais e identifique os sub-serviços que são necessários para processar uma subtarefa.

  • Especifique como o resultado final de todo o serviço pode ser calculado com a ajuda dos resultados obtidos no processamento de subtarefas individuais.

  • Defina uma interface para o sub-serviço identificado na etapa 1. Ela será implementada pelo escravo e usada pelo mestre para delegar o processamento de subtarefas individuais.

  • Implemente os componentes escravos de acordo com as especificações desenvolvidas na etapa anterior.

  • Implemente o mestre de acordo com as especificações desenvolvidas nas etapas 1 a 3.

Formulários

  • Adequado para aplicações onde a confiabilidade do software é um problema crítico.

  • Amplamente aplicado nas áreas de computação paralela e distribuída.

Vantagens

  • Cálculo mais rápido e escalabilidade fácil.

  • Oferece robustez, pois os escravos podem ser duplicados.

  • O escravo pode ser implementado de maneira diferente para minimizar erros semânticos.

Desvantagens

  • Sobrecarga de comunicação.

  • Nem todos os problemas podem ser divididos.

  • Difícil de implementar e problema de portabilidade.

Arquitetura de Máquina Virtual

A arquitetura da Máquina Virtual finge alguma funcionalidade, que não é nativa do hardware e / ou software no qual é implementada. Uma máquina virtual é construída sobre um sistema existente e fornece uma abstração virtual, um conjunto de atributos e operações.

Na arquitetura da máquina virtual, o mestre usa o 'mesmo' subserviço 'do escravo e executa funções como dividir o trabalho, chamar escravos e combinar resultados. Ele permite aos desenvolvedores simular e testar plataformas, que ainda não foram construídas, e simular modos de "desastre" que seriam muito complexos, caros ou perigosos para serem testados com o sistema real.

Na maioria dos casos, uma máquina virtual divide uma linguagem de programação ou ambiente de aplicativo de uma plataforma de execução. O objetivo principal é fornecerportability. A interpretação de um módulo específico por meio de uma máquina virtual pode ser percebida como -

  • O mecanismo de interpretação escolhe uma instrução do módulo que está sendo interpretado.

  • Com base na instrução, o mecanismo atualiza o estado interno da máquina virtual e o processo acima é repetido.

A figura a seguir mostra a arquitetura de uma infraestrutura VM padrão em uma única máquina física.

o hypervisor, também chamado de virtual machine monitor, é executado no sistema operacional host e aloca recursos correspondentes a cada sistema operacional convidado. Quando o convidado faz uma chamada de sistema, o hipervisor a intercepta e traduz na chamada de sistema correspondente suportada pelo sistema operacional host. O hipervisor controla o acesso de cada máquina virtual à CPU, memória, armazenamento persistente, dispositivos de E / S e rede.

Formulários

A arquitetura da máquina virtual é adequada nos seguintes domínios -

  • Adequado para resolver um problema por simulação ou tradução se não houver solução direta.

  • Os aplicativos de amostra incluem intérpretes de microprogramação, processamento XML, execução de linguagem de comando de script, execução de sistema baseada em regras, Smalltalk e linguagem de programação digitada por interpretador Java.

  • Exemplos comuns de máquinas virtuais são intérpretes, sistemas baseados em regras, shells sintáticos e processadores de linguagem de comando.

Vantagens

  • Portabilidade e independência da plataforma da máquina.

  • Simplicidade de desenvolvimento de software.

  • Oferece flexibilidade por meio da capacidade de interromper e consultar o programa.

  • Simulação para modelo de funcionamento de desastres.

  • Introduzir modificações em tempo de execução.

Desvantagens

  • Execução lenta do intérprete devido à natureza do intérprete.

  • Há um custo de desempenho devido à computação adicional envolvida na execução.

Estilo em camadas

Nessa abordagem, o sistema é decomposto em várias camadas superiores e inferiores em uma hierarquia, e cada camada tem sua própria responsabilidade no sistema.

  • Cada camada consiste em um grupo de classes relacionadas que são encapsuladas em um pacote, em um componente implantado ou como um grupo de sub-rotinas no formato de biblioteca de método ou arquivo de cabeçalho.

  • Cada camada fornece serviço para a camada acima dela e serve como um cliente para a camada inferior, ou seja, a solicitação para a camada i +1 invoca os serviços fornecidos pela camada i através da interface da camada i. A resposta pode voltar para a camada i +1 se a tarefa for concluída; caso contrário, a camada i continuamente invoca serviços da camada i -1 abaixo.

Formulários

O estilo em camadas é adequado nas seguintes áreas -

  • Aplicativos que envolvem classes distintas de serviços que podem ser organizados hierarquicamente.

  • Qualquer aplicativo que pode ser decomposto em partes específicas do aplicativo e específicas da plataforma.

  • Aplicativos que têm divisões claras entre serviços essenciais, serviços críticos e serviços de interface de usuário, etc.

Vantagens

  • Projete com base em níveis incrementais de abstração.

  • Fornece independência de aprimoramento, pois as alterações na função de uma camada afetam no máximo duas outras camadas.

  • Separação da interface padrão e sua implementação.

  • Implementado usando tecnologia baseada em componentes que torna o sistema muito mais fácil para permitir plug-and-play de novos componentes.

  • Cada camada pode ser uma máquina abstrata implantada de forma independente, que oferece suporte à portabilidade.

  • Fácil de decompor o sistema com base na definição das tarefas de uma maneira de refinamento de cima para baixo

  • Diferentes implementações (com interfaces idênticas) da mesma camada podem ser usadas indistintamente

Desvantagens

  • Muitos aplicativos ou sistemas não são facilmente estruturados em camadas.

  • Baixo desempenho de tempo de execução, pois a solicitação de um cliente ou uma resposta ao cliente deve passar por várias camadas.

  • Também existem preocupações de desempenho em sobrecarga no empacotamento e armazenamento em buffer de dados por cada camada.

  • A abertura da comunicação entre camadas pode causar bloqueios e a “ponte” pode causar um acoplamento rígido.

  • Exceções e tratamento de erros são um problema na arquitetura em camadas, uma vez que as falhas em uma camada devem se espalhar para cima, para todas as camadas de chamada