Architettura gerarchica

L'architettura gerarchica vede l'intero sistema come una struttura gerarchica, in cui il sistema software è scomposto in moduli logici o sottosistemi a diversi livelli nella gerarchia. Questo approccio viene generalmente utilizzato nella progettazione di software di sistema come protocolli di rete e sistemi operativi.

Nella progettazione della gerarchia del software di sistema, un sottosistema di basso livello fornisce servizi ai sottosistemi di livello superiore adiacenti, che invocano i metodi del livello inferiore. Il livello inferiore fornisce funzionalità più specifiche come servizi di I / O, transazioni, pianificazione, servizi di sicurezza, ecc. Il livello intermedio fornisce funzioni più dipendenti dal dominio come la logica aziendale e i servizi di elaborazione di base. Inoltre, il livello superiore fornisce funzionalità più astratte sotto forma di interfaccia utente come GUI, funzionalità di programmazione della shell, ecc.

Viene anche utilizzato nell'organizzazione delle librerie di classi come la libreria di classi .NET nella gerarchia dello spazio dei nomi. Tutti i tipi di progettazione possono implementare questa architettura gerarchica e spesso combinarsi con altri stili di architettura.

Gli stili architettonici gerarchici sono suddivisi in:

  • Main-subroutine
  • Master-slave
  • Macchina virtuale

Main-subroutine

Lo scopo di questo stile è riutilizzare i moduli e sviluppare liberamente singoli moduli o subroutine. In questo stile, un sistema software è suddiviso in subroutine utilizzando il raffinamento top-down in base alla funzionalità desiderata del sistema.

Questi perfezionamenti portano verticalmente fino a quando i moduli scomposti sono abbastanza semplici da avere la sua esclusiva responsabilità indipendente. La funzionalità può essere riutilizzata e condivisa da più chiamanti negli strati superiori.

Esistono due modi in cui i dati vengono passati come parametri alle subroutine, vale a dire:

  • Pass by Value - Le subroutine utilizzano solo i dati passati, ma non possono modificarli.

  • Pass by Reference - Le subroutine utilizzano e modificano il valore dei dati a cui fa riferimento il parametro.

Vantaggi

  • Facile da scomporre il sistema in base al perfezionamento della gerarchia.

  • Può essere utilizzato in un sottosistema di progettazione orientata agli oggetti.

Svantaggi

  • Vulnerabile in quanto contiene dati condivisi a livello globale.

  • Un accoppiamento stretto può causare più effetti a catena dei cambiamenti.

Master-Slave

Questo approccio applica il principio "divide et impera" e supporta il calcolo dei guasti e l'accuratezza computazionale. È una modifica dell'architettura della subroutine principale che fornisce affidabilità del sistema e tolleranza ai guasti.

In questa architettura, gli slave forniscono servizi duplicati al master e il master sceglie un particolare risultato tra gli schiavi in ​​base a una certa strategia di selezione. Gli schiavi possono eseguire lo stesso compito funzionale con algoritmi e metodi diversi o funzionalità completamente diverse. Include il calcolo parallelo in cui tutti gli slave possono essere eseguiti in parallelo.

L'implementazione del pattern Master-Slave segue cinque passaggi:

  • Specificare in che modo il calcolo dell'attività può essere suddiviso in un insieme di sottoattività uguali e identificare i servizi secondari necessari per elaborare una sottoattività.

  • Specificare come calcolare il risultato finale dell'intero servizio con l'aiuto dei risultati ottenuti dall'elaborazione delle singole sotto-attività.

  • Definire un'interfaccia per il servizio secondario identificato nel passaggio 1. Verrà implementato dallo slave e utilizzato dal master per delegare l'elaborazione delle singole sotto-attività.

  • Implementare i componenti slave secondo le specifiche sviluppate nel passaggio precedente.

  • Implementare il master secondo le specifiche sviluppate nei passaggi da 1 a 3.

Applicazioni

  • Adatto per applicazioni in cui l'affidabilità del software è un problema critico.

  • Ampiamente applicato nelle aree del calcolo parallelo e distribuito.

Vantaggi

  • Calcolo più veloce e facile scalabilità.

  • Fornisce robustezza in quanto gli slave possono essere duplicati.

  • Lo slave può essere implementato in modo diverso per ridurre al minimo gli errori semantici.

Svantaggi

  • Overhead di comunicazione.

  • Non tutti i problemi possono essere divisi.

  • Difficile da implementare e problema di portabilità.

Architettura della macchina virtuale

L'architettura della macchina virtuale pretende alcune funzionalità, che non sono native dell'hardware e / o del software su cui è implementata. Una macchina virtuale è costruita su un sistema esistente e fornisce un'astrazione virtuale, una serie di attributi e operazioni.

Nell'architettura della macchina virtuale, il master utilizza lo "stesso" sottoservizio "dello slave ed esegue funzioni come il lavoro diviso, la chiamata degli slave e la combinazione dei risultati. Consente agli sviluppatori di simulare e testare piattaforme, che non sono ancora state costruite, e simulare modalità "disastrose" che sarebbero troppo complesse, costose o pericolose da testare con il sistema reale.

Nella maggior parte dei casi, una macchina virtuale divide un linguaggio di programmazione o un ambiente applicativo da una piattaforma di esecuzione. L'obiettivo principale è fornireportability. L'interpretazione di un particolare modulo tramite una macchina virtuale può essere percepita come:

  • Il motore di interpretazione sceglie un'istruzione dal modulo da interpretare.

  • In base alle istruzioni, il motore aggiorna lo stato interno della macchina virtuale e il processo sopra viene ripetuto.

La figura seguente mostra l'architettura di un'infrastruttura VM standard su una singola macchina fisica.

Il hypervisor, chiamato anche virtual machine monitor, viene eseguito sul sistema operativo host e alloca le risorse corrispondenti a ciascun sistema operativo guest. Quando l'ospite effettua una chiamata di sistema, l'hypervisor la intercetta e la traduce nella corrispondente chiamata di sistema supportata dal sistema operativo host. L'hypervisor controlla l'accesso di ogni macchina virtuale alla CPU, alla memoria, all'archiviazione persistente, ai dispositivi I / O e alla rete.

Applicazioni

L'architettura della macchina virtuale è adatta nei seguenti domini:

  • Adatto per risolvere un problema mediante simulazione o traduzione se non esiste una soluzione diretta.

  • Le applicazioni di esempio includono interpreti di microprogrammazione, elaborazione XML, esecuzione del linguaggio di comando di script, esecuzione del sistema basato su regole, Smalltalk e linguaggio di programmazione tipizzato da interprete Java.

  • Esempi comuni di macchine virtuali sono interpreti, sistemi basati su regole, shell sintattiche e processori del linguaggio di comando.

Vantaggi

  • Portabilità e indipendenza dalla piattaforma della macchina.

  • Semplicità di sviluppo del software.

  • Fornisce flessibilità grazie alla possibilità di interrompere e interrogare il programma.

  • Simulazione per modello di lavoro disastro.

  • Introdurre modifiche in fase di esecuzione.

Svantaggi

  • Lenta esecuzione dell'interprete a causa della natura dell'interprete.

  • C'è un costo in termini di prestazioni a causa del calcolo aggiuntivo coinvolto nell'esecuzione.

Stile a strati

In questo approccio, il sistema è scomposto in un numero di livelli superiori e inferiori in una gerarchia e ogni livello ha la propria responsabilità esclusiva nel sistema.

  • Ogni livello è costituito da un gruppo di classi correlate che sono incapsulate in un pacchetto, in un componente distribuito o come un gruppo di subroutine nel formato della libreria dei metodi o del file di intestazione.

  • Ciascun livello fornisce un servizio al livello superiore e funge da client per il livello sottostante, ovvero la richiesta al livello i +1 richiama i servizi forniti dal livello i tramite l'interfaccia del livello i. La risposta può tornare al livello i +1 se l'attività è completata; altrimenti il ​​livello i richiama continuamente i servizi dal livello i -1 sottostante.

Applicazioni

Lo stile a strati è adatto nelle seguenti aree:

  • Applicazioni che coinvolgono classi di servizi distinte che possono essere organizzate gerarchicamente.

  • Qualsiasi applicazione che può essere scomposta in parti specifiche dell'applicazione e della piattaforma.

  • Applicazioni che hanno chiare divisioni tra servizi principali, servizi critici e servizi di interfaccia utente, ecc.

Vantaggi

  • Design basato su livelli incrementali di astrazione.

  • Fornisce indipendenza dal miglioramento poiché le modifiche alla funzione di un livello interessano al massimo altri due livelli.

  • Separazione dell'interfaccia standard e sua implementazione.

  • Implementato utilizzando la tecnologia basata sui componenti che rende il sistema molto più semplice per consentire plug-and-play di nuovi componenti.

  • Ogni livello può essere una macchina astratta distribuita in modo indipendente che supporta la portabilità.

  • Facile scomporre il sistema in base alla definizione dei compiti in maniera raffinata top-down

  • Diverse implementazioni (con interfacce identiche) dello stesso livello possono essere utilizzate in modo intercambiabile

Svantaggi

  • Molte applicazioni o sistemi non sono facilmente strutturati in modo stratificato.

  • Prestazioni di runtime inferiori poiché la richiesta di un client o una risposta al client deve attraversare potenzialmente diversi livelli.

  • Esistono anche problemi di prestazioni relativi all'overhead del marshalling e del buffering dei dati da parte di ogni livello.

  • L'apertura della comunicazione tra gli strati può causare deadlock e il "bridging" può causare un accoppiamento stretto.

  • Le eccezioni e la gestione degli errori sono un problema nell'architettura a più livelli, poiché i guasti in un livello devono diffondersi verso l'alto a tutti i livelli chiamanti