Una definizione di sistema distribuito
“Il mio programma gira su un sistema distribuito quando non funziona per colpa di una macchina di cui non ho mai sentito parlare”
L. Lamport
I sistemi distribuiti sono in generale eterogenei.
L’eterogeneità dei computer e delle tecnologie – hardware e software – è da considerarsi la norma, non l’eccezione, anche all’interno di una stessa grande azienda o organizzazione, pubblica o privata.
Il paradigma di elaborazione più generale prevede componenti interoperanti in ambiente distribuito ed eterogeneo (heterogeneous distributed computing).
In ambiente distribuito vari fattori aumentano la complessità dello sviluppo di software di qualità:
I dati sono distribuiti su più nodi di elaborazione, memorizzati in archivi o con sistemi di gestione di basi di dati (DBMS) diversi, e in generale condivisi da applicazioni locali e remote.
Nello sviluppo di software su rete – anche in ambiente omogeneo – occorre fronteggiare problematiche quali
che si presentano ben più complessi che per i sistemi centralizzati; l’eterogeneità aggiunge ulteriore complessità a questi stessi problemi.
Sistemi complessi funzionanti raramente vengono sviluppati integralmente ex novo; tipicamente essi evolvono a partire da sistemi esistenti già funzionanti.
L’integrazione di sistemi informativi sviluppati in momenti, con linguaggi e con tecniche diversi, ed operanti su piattaforme eterogenee, è un problema centrale delle tecnologie software.
Si richiede sempre più di:
L’integrazione di applicazioni, siano esse sistemi di nuovo sviluppo, sistemi ereditati o sistemi COTS, è da considerarsi lo scenario tipico di sviluppo software su larga scala.
L’integrazione di applicazioni (EAI) è un processo sovente più complesso dello sviluppo ex novo.
In questa prospettiva dello sviluppo software, la programmazione (intesa come codifica di moduli software in un linguaggio di programmazione) è, ancor meno che in passato, una fase critica del ciclo di vita del software, in termini sia di risorse sia di competenze tecnologiche richieste.
Assume maggiore importanza la capacità di adattare componenti esistenti e non originariamente pensati per interoperare, mediante l’attenta progettazione delle interfacce.
Molte tecnologie middleware sono nate con il preciso obiettivo di fornire una risposta al problema dell’EAI.
Con il termine middleware si intende uno strato software interposto tra il sistema operativo e le applicazioni, in grado di fornire le astrazioni ed i servizi utili per lo sviluppo di applicazioni distribuite.
Lo strato middleware offre ai programmatori di applicazioni distribuite librerie di funzioni, o middleware API (Application Programming Interface), in grado di mascherare i problemi dovuti all’eterogeneità dei sistemi su rete.
Le piattaforme middleware vengono anche definite software di connettività tra applicazioni, o anche “glue technologies” (tecnologie collante), evidenziando la loro caratteristica di tecnologie di integrazione di applicazioni.
Il livello middleware può mascherare le eterogeneità mediante meccanismi di:
trasparenza del sistema operativo:
trasparenza del linguaggio di programmazione:
Il livello middleware può mascherare le eterogeneità mediante meccanismi di:
trasparenza della locazione:
trasparenza della migrazione:
Il livello middleware può mascherare le eterogeneità mediante meccanismi di:
trasparenza ai guasti:
trasparenza della replicazione:
Il livello middleware può mascherare le eterogeneità mediante meccanismi di:
trasparenza delle implementazioni commerciali:
Nell’ultimo decennio sono state realizzate numerose tipologie di piattaforme middleware, sia in forma prototipale in ambito di ricerca, sia in forma commerciale.
Principali modelli di programmazione:
2. La modellazione a oggetti e il linguaggio UML (richiami)
3. Generalità su Java e la programmazione ad oggetti
6. Regole di traduzione da UML a Java/C++
7. Programmazione multi-thread
8. Sincronizzazione tra thread
9. Programmazione client-server con socket TCP/IP (Java networkin...
10. Programmazione di applicazioni client-server: il Pattern Proxy...
12. Design Patterns
13. Pattern architetturali - Esempi
14. Design pattern creazionali. Esempi
15. Design pattern strutturali. Esempi
16. Introduzione alle tecnologie middleware
17. Modelli di middleware: RPC, MOM, TP, TS
AA. VV., Java Server Programming – J2EE Edition, Wrox Press, 2000.
Bernstein P.A., Middleware: A Model for Distributed Services, Communications of the ACM, Vol. 39, N. 2, 1996.
Birrell A.D., Nelson B.J., Implementing Remote Procedure Calls, ACM Transactions on Computer Systems, Vol. 2, N. 1, 1984.
Gelernter D., Generative Communication in Linda, ACM Transactions on Programming Languages and Systems, Vol. 7, N. 1, 1985.
Carriero N., Gelernter D., How to Write Parallel Programs: A Guide to the Perplexed, ACM Computing Surveys, 1989.
Coulouris G., Dollimore J., Kindberg T., Distributed Systems: Concepts and Design, Addison-Wesley, 1998.
Edwards W.K., Joy B., Core Jini – 2nd ed., Prentice Hall, 2001.
Lehman T.J. et al., Hitting the distributed computing sweet spot with TSpaces, Computer Networks, Vol. 35, 2001.
Monson-Haefel R., Enterprise Java Beans, O’Reilly, 2000.
Mullender S., Distributed Systems, Addison-Wesley, 1993.
Natis Y., Pezzini M., Shulte R., Middleware Deployment Trends: Survey of Real-World Enterprise Applications, Gartner Strategic Report, 1999.
Sing Li, Professional Jini, Wrox Press, 2000.