Una soluzione elegante ai suddetti problemi prevede l'uso di ambienti e framework standard, il riutilizzo delle conoscenze sviluppate nel corso degli anni, che forniscono pattern di software-developing molto sperimentati e di provata efficacia. Per questo motivo si è scelto di sviluppare il progetto in C++, ponendo un forte accento sulle problematiche di trasportabilità del codice su piattaforme eterogenee e sulla riutilizzabilità dei componenti. L'utilizzo poi di CORBA come layer di rete su cui si basa la comunicazione tra i componenti del progetto consente di rendere standardizzato ed intrinsecamente multi-platform il sottosistema di comunicazione.
Purtuttavia l'utilizzo di tali strumenti non dà di per sè una risposta alle problematiche di programmazione distribuita che sono coinvolte in un progetto di questo genere: sincronizzazione, parallelismo, sfruttamento delle risorse, gestione delle failures, replicazione, distribuzione del carico, topologia della rete, adattamento dinamico alla modifica delle risorse disponibili, etc.
Nella realizzazione del progetto si è cercato di tenere in considerazione questi aspetti, concentrandosi sullo sviluppo di una architettura modulare e facilmente scalabile, utile oltre che per affrontare i problemi succitati di network-programming anche per mantenere un livello accettabile di comprensibilità (il progetto è infatti soggetto a necessità pressanti di economia di fatiche/tempo, che obbligano a decomporre il problema in sottoparti il più possibile semplici ed ortogonali).
Inoltre i varî aspetti della programmazione di rete (problemi affrontati, risorse coinvolte, problemi di concorrenza specifici, scalabilità, reazione di un server ai comportamenti sbagliati degli altri server, ...) si manifestano in maniera assai diversa nelle diverse sottoparti che costituiscono l'architettura completa del sistema. Per questo si è scelto di realizzare il sistema come architettura fortemente client/server, cercando di individuare un insieme di servizî il più possibile scorrelati logicamente fra di loro, da realizzare separatamente. Questa scelta, unitamente all'utilizzo di tecniche di programmazione parallela (uso del multithreading e sincronizzazione lasca tra i diversi flussi di elaborazione) consente un grado di scalabilità molto elevato.
Il lavoro, pur risultando completo nei suoi aspetti fondamentali si presta a numerose modifiche/evoluzioni, che tengano in maggiore considerazione le problematiche di sicurezza o che implementino specifiche politiche di allocazione delle risorse (magari servendosi di agenti monitor che mantengano sotto controllo le risorse nella loro evoluzione temporale). In appendice si presentano spunti di sviluppo in queste direzioni.
Francesco V. Bassi