Versioni
| Pubblicato nella Rubriki Numero 1 - 21 Feb 2006 da Alessandro PetrozzelliCon l'acronimo SOA (Service Oriented Architecture) si identifica l'insieme delle caratteristiche architetturali necessarie ad un agente software per considerarne "ben fruibile" la capacità peculiare (service). La precedente definizione è estremamente generica (al limite dell'inutilità), tuttavia esprime l'esatta volontà di aderire a precisi requisiti di usabilità dell'artefatto software: la centralità della funzione è necessaria per comporre sistemi complessi a partire da ingredienti elementari. Proprio la caratteristica "sfuggente" di SOA rende più agevole descrivere cosa non sia piuttosto che l'opposto: non che manchi di identità concreta anzi, è esattamente l'essenzialità del concetto che ne è alla base a richiedere di essere minimalisti. Partiremo dunque da qualche punto fermo (sotto forma di definizione) per poi approfondire, utilizzando gli errori più comuni che si incontrano comunemente come guida, al fine di dettagliare progressivamente quali siano le caratteristiche desiderabili (e non) di un sistema software che si possa definire Service Oriented. Cos'è una architettura orientata al servizio? Innanzitutto occorre aver ben definito quali sono gli obiettivi che si propone un progettista che intenda abbracciare la filosofia orientata ai servizi, quale il contesto nel quale è appropriato proporla, quali le forze che si oppongono al raggiungimento del risultato ed infine quali i parametri che misurano i risultati. L'obiettivo che, in primo luogo, è dato al progettista di un sistema SOA è di armonizzare le funzionalità di un sistema IT con i processi di business aziendali: evitare di porre ostacoli al compimento ed all'evoluzione dei processi stessi ed anzi promuovere la composizione creativa delle funzionalità basilari verso funzionalità più complesse ed evolute. Cosa intendiamo dunque per servizio? Un servizio è una astrazione che individua ed identifica completamente una esigenza funzionale di alto livello (intendendo per "alto livello" la "vicinanza", anche concettuale, all'utente finale, sia esso umano che macchina). Parallelamente alle caratteristiche funzionali ve ne sono altre, desiderabili dal punto di vista tecnologico, che possiamo definire "operative" e che concorrono a realizzare concretamente un sistema flessibile e pronto ai cambiamenti: se è vero che ogni organizzazione IT può (e deve) fornire un ventaglio di servizi distinto e personalizzato ed è dunque raro che possa trovare soluzioni pronte all'uso, è altrettanto vero che dotandosi delle corrette infrastrutture (piattaforme, prodotti, servizi esterni) il compito di gestione diventa meno arduo. Ecco perchè si parla di architettura: l'essere orientato al servizio non prescrive requisiti funzionali aggiuntivi rispetto a quelli tradizionalmente catturati con le consuete fasi di analisi e design, tuttavia condurrà la scelta tra le varie soluzioni possibili. E' un lavoro di cernita nello spazio delle soluzioni. Tra le buone soluzioni ve ne sarà una migliore delle altre (preferibile) nei confronti degli obiettivi menzionati in precedenza. Perchè è difficile realizzare servizi? La parte difficile è "catturare" l'essenza della funzionalità stessa e mantenerne l'identità e la monoliticità, anche dopo che la canonica attività del processo di informatizzazione l'ha analizzata, sviscerata, scomposta, riorganizzata, distribuita, canalizzata ed irrigidita. Ma non solo. Una volta identificato (ed eventualmente realizzato) l'arsenale di propri servizi, ci si potrebbe rendere conto che la componibilità tanto agognata è resa difficoltosa da un subdolo ostacolo: come assicurarsi che il servizio sia compreso ed utilizzato facilmente? Come descrivere quali sono i concetti familiari al servizio stesso e che gli consentono di comunicare oltre i propri confini? Come evolvere il sistema garantendo comunque la compatibilità con quanti si siano affidati ad esso? In ultima analisi SOA descrive una particolare morfologia di sistemi distribuiti e pertanto ha principalmene a che fare con l'architettura orientata ai componenti dalla quale eredità tutte le esperienze quali ad esempio i design pattern. Proprio questi ultimi (ed i loro parenti, antipattern) forniscono indicazioni e soluzioni sicure alle quali ispirarsi. Quello che segue è un elenco, corredato da una sommaria descrizione di antipattern (2) facilmente rilevabili in ambito SOA. Antipatterns
Conclusioni Come si è visto, saremmo in buona compagnia se cedessimo alla tentazione di liquidare SOA come l'ennesima sigla priva di significato ed applicazioni pratiche, tuttavia cercando di evidenziarne le motivazioni basilari, spero di essere riuscito a solleticare la curiosità di colui che prima di mettersi a tracciare disegni e scrivere codice ama farsi domande, affinchè la prossima volta se ne faccia una di più e così possa realizzare un prodotto ancora migliore. Ispirazione tratta da 1) Toward a pattern language for Service-Oriented Architecture and Integration Part 1: Build a service ecosystem di Ali Arsanjani, Ph.D. e 2) SOA antipatterns di Jenny Ang, Luba Cherbakov e Dr. Mamdouh Ibrahim pubblicati presso IBM developerWorks 3) Oracle Service-Oriented Technology Center | UGIdotNETWikiUGIdotNETWiki è il WikiWiki italiano dedicato a .NET Se è la prima volta che senti parlare di Wiki, leggi il BenvenutoAiVisitatori e WikiInUnMinuto, oppure il ManualePassoPassoDelWiki. Argomenti Recenti | ||||||||||||||||||||||||||||||||||||||
| © 2008 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali | ||||||||||||||||||||||||||||||||||||||||