• Non ci sono risultati.

Università degli studi di Padova. Facoltà di Scienze MM.FF.NN. Corso di Laurea in Informatica

N/A
N/A
Protected

Academic year: 2022

Condividi "Università degli studi di Padova. Facoltà di Scienze MM.FF.NN. Corso di Laurea in Informatica"

Copied!
87
0
0

Testo completo

(1)

Luca Pasa

Università degli studi di Padova Facoltà di Scienze MM.FF.NN.

Corso di Laurea in Informatica

Tesi di laurea

Trasmissione di immagini su cloud con basso TCO grazie a Windows Azure AppFabric

Service Bus

Candidato: Pasa Luca Matricola: 593258

Ralatore: Dott.ssa Gaggi Ombretta

1 1 di 87

(2)

Glossario

Per ciò che concerne i termini tecnici utilizzati nel presente documento si faccia riferimento alla sessione glossario presente in coda al documento. Tali termini sono

riportati nel documento in corsivo almeno alla loro prima apparizione.

(3)

Indice

1 Introduzione 7

1.1 aKite . . . 7

1.2 Lo Stage . . . 9

1.3 l’azienda . . . 9

2 Cloud Computing 11 2.1 Costi del cloud computing . . . 11

2.2 Cloud e green computing . . . 12

3 Tecnologie utilizzate 15 3.1 Windows Comunication Fondation . . . 15

3.2 WCF e REST . . . 17

3.3 Feed . . . 19

3.3.1 Feed e WCF . . . 20

3.4 DirectShow . . . 22

3.5 Task Parallel Library . . . 24

3.6 System.Runtime.Caching . . . 26

3.7 Windows Phone 7 . . . 28

3.8 Windows Azure platform . . . 30

3.8.1 Windows Azure . . . 30

3.8.2 Windows Azure appFabric . . . 32

3.8.3 Windows Azure AppFabric Service Bus . . . 34

3.8.4 Windows azure AppFabric access control service . . . 39

4 Descrizione del problema 41 4.1 Analisi Requisiti . . . 42

4.1.1 Servizio . . . 42

4.1.2 Client Desktop . . . 44

4.1.3 Client Mobile . . . 45

5 Definizione Soluzione 47 5.1 Vantaggi di Windows Azure AppFabric Service Bus . . . 47

5.1.1 Minimizzare il TCO . . . . 49

5.1.2 Internet Of Thing . . . 49

5.2 Il servizio: ImageFabric . . . 51

5.2.1 Salvataggio e Gestione dati . . . 53

5.2.2 Interfacciamento con dispositivo di acquisizione immagini . . 54

5.2.3 configurazione e attivazione del servizio, e visualizzazione anteprima immagini . . . 55

5.2.4 Esposizione servizio . . . 57

5.2.5 log . . . 58

5.2.6 coordinamento e gestione dei componenti . . . 58 3

(4)

5.3 Il Client Desktop: ImageConsumer . . . 60

5.3.1 ricezione dati . . . 62

5.3.2 gestione interazione con il servizio . . . 63

5.3.3 gestione dei dati ricevuti . . . 64

5.3.4 visualizzazione dei dati . . . 65

5.3.5 Gestione log di sistema . . . 67

5.4 Il Client Windows Phone 7: ImageWP7 . . . 68

5.4.1 Windows Phone 7 e servizi RESTFul. . . 70

5.4.2 Connessione al servizio ricezione del feed . . . 71

5.4.3 Gestione delle informazioni ricavate dal feed e download delle immagini relative . . . 72

5.4.4 Salvataggio dei dati ricevuti . . . 72

5.4.5 Visualizzazione dei dati . . . 73

5.4.6 Gestione della disattivazione dell’applicazione . . . 75

6 Conclusioni 79

A Glossario 81

B Bibliografia 87

(5)

Elenco delle figure

1.1 Screen shoot diPOS.netin funzione. . . 8

1.2 Screen shoot diSHOP.netin funzione. . . 9

2.1 Il datacenter Microsoft di Dublino. . . 14

3.1 Comunicazione tra client e servizio in WCF. . . 17

3.2 Struttura dell’oggetto SyndicationFeed. . . 21

3.3 Ciclo di vita di un applicazioneWindows phone 7. . . 28

3.4 Struttura diWindows Azure Platform. . . 31

3.5 Service Bus . . . 33

3.6 Pattern ESB. . . 34

3.7 Schema Relay Service. . . 35

3.8 Interazione tra access controle service bus . . . 40

5.1 Schema riassuntivo soluzione. . . 48

5.2 Schema delle classi di ImageFabric. . . 52

5.3 Screen shoot diImageFabric in funzione. . . 56

5.4 Screen shoot della finestre di configurazione di ImageFabric. . . 56

5.5 Portale di gestione Windows Azure Service Bus dopo la creazione del namespace. . . 58

5.6 Schema delle classi di ImageConsumer. . . 61

5.7 Schema interazione tra componenti di ImageConsumer. . . 62

5.8 Screen shoot diImageConsumer in funzione. . . 65

5.9 Schema delle classi di ImageWP7. . . 69

5.10 Schema interazione componenti di ImageWP7. . . 70

5.11 Screen shoot diImageWP7in funzione. . . 74

6.1 Diagramma di Gantt che illustra la durata effettiva dell’attività di stage. . . 79

5

(6)
(7)

Capitolo 1

Introduzione

Questa tesi descrive l’attività di stage eseguita all’interno dell’aziendaBEDIN Shop Systems. L’attività di stage ha riguardato la realizzazione di un applicazione prototipale per l’invio di immagini catturate da un webcam senza che sia necessario effettuare modifiche a sistemi NAT, Firewall o Proxy. L’applicazione deve risultare scalabile e non richiedere interventi di tipo sistemistico per l’installazione. Deve inoltre minimizzare ilTCOed essere utilizzabile dalla quasi totalità dei possibili client.

La creazione di tale prototipo ha lo scopo di verificare la fattibilità di tale applicazione, al fine di decidere poi se inserire le funzionalità offerte all’interno di aKite, una soluzione software offerta dall’azienda ospitante. Tale funzione ha infatti lo scopo di rendere possibile il controllo della situazione dei negozi (ad esempio per valutare l’affollamento).

1.1 aKite

aKiteè il primo servizio software (SaaS Software as a Service) per punti di vendita progettato per sfruttare pienamente tutte le potenzialità di una moderna piattaforma (PaaS Platform as a Service) comeWindows Azure. È stato infatti rilasciato nel 2010,

contemporaneamente alla disponibilità pubblica del Cloud Computing di Microsoft ed è già in funzione in diverse catene e negozi indipendenti.

Il fenomeno del Cloud Computing, l’elaborazione sulle ‘‘nuvole’’ di Internet, è simile a quello dell’energia elettrica che, agli inizi del novecento, ha visto le fabbriche passare dalla produzione autonoma all’utenza a consumo attraverso reti di distribuzione. Ora anche per usare il software non è più necessario acquistare e gestire licenze e server.

Come è avvenuto per l’elettricità, il cambio di paradigma del Cloud Computing impone ai progettisti sia nuovi punti di vista da assimilare, che vecchie abitudini da dimenticare.

Rispetto agli approcci tradizionali, i vantaggi per gli utenti sono numerosi, importanti e riassumibili in una sola parola: semplicità.

Semplicità nell’acquisto, attraverso un canone per postazione tutto compreso e senza nessun investimento iniziale, come pure nell’installazione e nell’aggiornamento, gestiti automaticamente da Internet. La semplicità si estende ovviamente all’uso per mezzo di interfacce amichevoli e alla gestione quotidiana, in quanto la complessità dell’informatica viene eliminata dai negozi e spostata sul Cloud.

Ma forse la semplicità più importante sta nella condivisione dei dati relativi, ad esempio, alle carte fedeltà, eventualmente anche tra negozi e catene indipendenti e nell’integrazione con altri sistemi informatici, con i partner commerciali, con le associazioni d’appartenenza ed i clienti attraverso i Social Network, ecc. Tutto è reso possibile grazie all’architettura standard e aperta dei Retail Web Services, l’hub

7

(8)

intelligente su Cloud di aKite.

aKite permette la connessione tra i punti vendita ed il centro della distribuzione, facilitando così la condivisione dei dati comuni e la collaborazione, anche con altre aziende. Uno dei vantaggi che offre è eliminare la necessità di avere un server all’interno del negozio, riducendo così i costi, e spostando quindi i dati nel cloud, aumentando la sicurezza degli stessi. Per tale gestione tutti i terminali all’interno di un negozio sono connessi tra loro andando così a creare un rete paritetica. aKiteoffre servizi a più aziende condividendo le risorse hardware e software grazie al paradigma Multi-tenant che la piattaforma di cloudWindows Azurepermette di implementare, andando anche a diminuire i consumi in un’ottica di Green Computing.

aKite si compone di alcune applicazioni che ne permettono l’utilizzo nelle varie situazioni:

POS.net: è lo Smart Client che gestisce una vasta gamma di servizi nei Punti Cassa basati su normali PC, assicurando la massima sicurezza e velocità di servizio alla clientela per mezzo di un database in ogni postazione e il controllo diretto delle numerose apparecchiature periferiche, touch screen compresi.

L’attività prosegue anche in caso di guasti esterni, poiché i documenti di vendita vengono accodati in attesa della riconnessione automatica ai servizi centralizzati;

SHOP.net: è lo Smart Client di Back Store, utilizzabile sia nei negozi che al centro della catena per gestire i magazzini, i rifornimenti, gli inventari, analizzare i dati di vendita, stampare cartelli, etichette ed eventualmente aggiornare articoli, prezzi, promozioni e assortimenti, qualora tali dati non provengano già dal sistema centrale e a condizione che l’utente possieda la necessaria autorizzazione;

aDS, (aKite Digital Signage): è lo strumento marketing e promozionale che consente di definire delle sequenza di video e immagini (denominate palinsesti) e di inviarle su degli schermi nei negozi;

Vengono qui riportati alcuni immagini di aKitein funzione:

Figura 1.1: Screen shoot di POS.netin funzione.

Fonte: www.aKite.com

(9)

Luca Pasa 1.2. LO STAGE

Figura 1.2: Screen shoot diSHOP.netin funzione.

1.2 Lo Stage

La creazione del progetto ha richiesto un attività durata circa 8 settimane lavorative.

Tale attività è stata svolta all’interno dell’azienda con la collaborazione del tutor aziendale, e di altri impiegati dell’azienda che hanno dato supporto allo stagista. Per lo sviluppo dell’applicazione prototipale è risultato necessario un primo importante periodo di apprendimento delle numerose tecnologie necessarie, poi applicate con successo alla soluzione realizzata, e che verrà esposta in seguito.

A seguito dell’attività di apprendimento è seguito un lavoro volto ad analizzare il problema ed estrarne i requisiti fondamentali. Tale attività è stata seguita da un fase di progettazione dell’applicazione prototipale che ha portato ad un’agevole codifica della stessa.

L’applicativo realizzato è stato sviluppato su piattaforma .NET utilizzando il linguaggio vb.net.

1.3 l’azienda

Indirizzo Internet: www.akite.net

BEDIN Shop Systems ha oltre 20 anni di esperienza nello sviluppo di software per i Punti di Vendita ed una capacità di innovazione riconosciuta a livello internazionale.

Partner Microsoft dalla fondazione, è stata la prima Software House ad introdurre le tecnologie Windows e .NET nel Retail ed è coautrice del white paper “An overview of Software as a Service in Retail”, che ha aperto la strada al software erogato da mega-datacenter su Internet ai Negozi, dove le casse devono funzionare senza interruzione anche in caso di guasti esterni.

Prima del Premio Nazionale per l’Innovazione ricevuto dalle mani del Presi- dente Giorgio Napolitano, l’azienda ne aveva ricevuto uno da Confindustria per la collaborazione con l’Università di Padova e nel Luglio 2010 è stata citata come esempio di innovazione nell’uso del Cloud Computing ad un evento internazionale a Washington.

9 9 di 87

(10)
(11)

Capitolo 2

Cloud Computing

Ilcloud computingè un sistema che permette l’utilizzo di risorse remote ed eterogenee, senza che l’utente si accorga delle differenze, con benefici in termini di prestazioni e disponibilità. Si possono distinguere 3 principali tipi di cloud:

Software as a service (SaaS): è un modello di distribuzione del software applicativo dove un produttore di software sviluppa, opera (direttamente o tramite terze parti) e gestisce un’applicazione web che mette a disposizione dei propri clienti via internet.

Platform as a service (PaaS): è la distribuzione di piattaforme di elabo- razione come servizio. Gli elementi delPaaS permettono di sviluppare, testare, implementare e gestire le applicazioni aziendali senza i costi e la complessità asso- ciati all’acquisto, la configurazione, l’ottimizzazione e la gestione dell’hardware e del software di base.

Infrastructure as a Service (IaaS): è un modello che permette l’ utilizzo di risorse hardware in remoto. Questo tipo di Cloud è quasi un sinonimo di Grid Computing, ma con una caratteristica imprescindibile: le risorse vengono utilizzate su richiesta al momento in cui un cliente ne ha bisogno, non vengono assegnate a prescindere dal loro utilizzo effettivo.

Ilcloud computingporta con se molti vantaggi a livello di prestazioni, scalabilità, e costi. Ma soprattutto prevede un modello di sviluppo basato sul concetto della completa fallibilità di ogni singolo componente. Questo vuol dire che un’infrastruttura di cloud deve essere in grado di assicurare la piena disponibilità dei suoi servizi anche in caso di problemi e guasti, rendendo minino o nullo l’impatto dell’evento sulla condizione di chi usufruisce del servizio stesso.

2.1 Costi del cloud computing

Un concetto molto importante quando si parla dei costi di utilizzo del cloud, ed in particolare diWindows Azure Platform, è quello che in economia si definisceCapex vs Opex. L’utilizzo di una piattaforma di cloud permette il passaggio da un modello economico di tipoCapex, ossia basato su investimenti anticipati, ad un modelloOpex, che permette di pagare i soli servizi necessari per il tempo che vengono utilizzati.

Questo comporta di evitare di dover affrontare spese iniziali, come ad esempio l’acquisto di server e altre apparecchiature, andando invece ad avere una spesa basata su quando e cosa si utilizza. Oltre ad evitare spese iniziali si vanno anche ad evitare spese di eventuale manutenzione ed aggiornamento dell’hardware, e si evitano rischi di sovradimensionare o sottodimensionare l’hardware acquistato inizialmente.

11

(12)

Il Cloud offre infatti un forte versatilità per quanto riguarda l’hardware utilizzabile grazie anche all’auto-provisioning, che permette veloci variazioni sulle quantità hardware (quantità di storage, potenza di calcolo, ecc) richieste. Se ad esempio abbiamo necessità di disporre di più potenza di calcolo, a causa di una crescita dell’azienda, basterà richiedere l’utilizzo di uno o più core aggiuntivi. In caso contrario è facile poter ridurre la richiesta di hardware e quindi ridurre i costi.

Questo grazie al fatto che si paga solo ciò che si usa.

Un altro grande vantaggio è dato dal fatto che è possibile variare di poco la richiesta di hardware da utilizzare cosa non possibile in un modelloCapex. Si pensi ad esempio di avere acquistato un server che può gestire n utenti, nel caso in cui avessimo necessità di servire n+1 utenti dovremmo acquistare un altro server, avendo due conseguenze: l’aggiunta di un singolo utente ha avuto un costo molto elevato ed il nostro nuovo server è utilizzato solo in piccola parte. Inoltre l’acquisto ha comportato un grosso rischio, infatti se un o più utenti non utilizzassero più il servizio da noi offerto, avremmo attrezzatura hardware inutilizzata, ma che abbiamo pagato e di cui non riusciamo ad ammortizzare i costi.

L’utilizzo di una piattaforma di cloud permette invece di aggiungere al bisogno una porzione di hardware per soddisfare le nostre nuove esigenze senza eccedere e pagare dell’hardware che non si utilizza. Nel caso in cui non si avesse più necessità di quella porzione di hardware sarà sufficiente abbassare la richiesta, senza dovere quindi ammortizzare alcun costo ingiustificato.

Si parla quindi di un modello di utilizzo e pagamento legato alla modalità economica SaaS pagando ciò che si utilizza, che oltre ad assicurare versatilità permette anche una forte prevedibilità della spesa, sia per chi sviluppa e fornisce l’applicazione e che quindi può prevedere i costi, sia per il cliente che consuma l’applicazione.

Infatti, il modello economico del cloud porta le aziende che sviluppano servizi in esso a fornirli ai loro clienti utilizzando lo stesso modello economico. Tutto ciò porta ad un abbassamento dei rischi d’impresa e quindi va a favorire le start-up.

Un altro indubbio vantaggio offerto dall’utilizzo di una piattaforma di cloud è l’affidabilità e la disponibilità di servizio che offre. Infatti il cloud è progettato per rendere trasparenti eventuali guasti e problemi hardware. Questo comporta anche di eliminare eventuali costi di manutenzione e riparazione legati a guasti avvenuti in un server che potremmo aver acquistato se non utilizzassimo il cloud computing.

Inoltre la forte disponibilità del servizio offerta protegge da eventuali perdite di denaro legate ad eventuali blocchi del servizio offerto da un azienda a i suoi clienti.

L’utilizzo di piattaforme di cloud porta anche vantaggi a livello di risparmio energetico.

infatti l’hardware è condiviso tra tutti gli utilizzatori di un piattaforma. Quando noi non utilizziamo l’hardware, lo stesso verrà utilizzato da altre aziende o fornitori di servizi. Questo in un contesto di business, dove l’utilizzo delle applicazioni avviene spesso per le otto ore lavorative, diventa una grossa fonte di risparmio energetico.

2.2 Cloud e green computing

L’utilizzo del paradigma del cloud computing oltre all’aspetto puramente tecnologico, va a favorire anche il risparmio energetico, andando di fatto ad attuare politiche di green computing. Ilgreen computing si riferisce a tecnologie informatiche ecologica- mente sostenibili, che abbiano quindi effetti sull’ambiente molto limitati o nulli.

Il primo motivo per cui il cloud computing porta ad avere un risparmio energetico è dato dal riutilizzo di hardware. Infatti i server contenuti nei datacenter, che fanno parte della piattaforma di cloud, vengono utilizzati da più utenti che vanno quindi a condividere la piattaforma hardware. Sì pensi ad esempio alla situazione di un

(13)

Luca Pasa 2.2. CLOUD E GREEN COMPUTING azienda media la quale opera per otto ore al giorno, e quindi sfrutta i servizi e l’hardware, per una sola parte della giornata. Nelle restanti ore però l’hardware non rimane inutilizzato (come invece accade utilizzando un server di proprietà o in affitto) ma verrà destinato ad un altro utilizzatore, portando così ad un abbattimento degli sprechi legati alla inattività.

È poi da considerare il fatto che l’utilizzo dei server presenti in un datacenter che implementa politiche di cloud computing è sempre molto elevato andando quindi a mantenere il server ad un livello di efficenza molto alto, cosa che invece non succede nei server personali dove tutto dipende dall’utilizzo, che è legato alla singola entità richiedente.

Anche la tipologia di server presenti in un datacenter segue precise caratteristiche, la prima tra tutte è di certo l’efficenza. Altra importante caratteristica dell’hardware è che deve essere di facile reperibilità e a poco costo in modo da ammortizzare eventuali guasti. Vengono inoltre preferiti molti server con buona potenza piuttosto che pochi server di potenza eccelsa, al fine di implementare più efficacemente politiche di scala- bilità orizzontale e mantenere il costo dell’hardware, e la sua eventuale sostituzione per guasti, vantaggioso a livello economico.

Altro importante aspetto nel cloud computing è la collocazione dei datacenter in specifiche zone geografiche. Tali zone geografiche vengono scelte per vari motivi:

• condizioni climatiche favorevoli;

• vicinanza con dorsali che facilitano la connessione;

• vicinanza a fonti energetiche;

• legislatura favorevole per la sicurezza dei dati.

Talvolta queste scelte portano importanti vantaggi, si pensi ad esempio come con- dizioni climatiche particolarmente fredde e ventose possano portare ad una sostanziale riduzione della necessità di utilizzare sistemi di climatizzazione o addirittura elim- inarli. Un esempio in questo senso è il datacenter Microsoft di Dublino, uno dei datacenter in cui viene mantenuta la piattaforma di cloud Windows Azure e non solo. In questo caso è stato sfruttato fortemente il freddo clima irlandese andando a migliorare l’efficenza dell’impianto, riducendo l’emissione di carbonio ed elimi- nando quasi la necessità di consumare acqua. Dal punto di vista della gestione del raffreddamento dei server è stato utilizzato il clima favorevole (con temperature che variano da -5°C a 27°C) insieme all’innovativoair-side economization, messo appunto da Microsoft, che permette di eliminare la necessità di utilizzare impianti di climatizzazione rendendo sufficiente il ricircolo dell’aria esterna per raffreddare quella interna al datacenter. Questo sistema ha portato a diminuire fortemente i consumi rispetto al classico approccio legato all’utilizzo di sistemi di climatizzazione.

In Figura 2.1 viene riportata un foto del datacenter Microsoft di Dublino.

13 13 di 87

(14)

Figura 2.1: Il datacenter Microsoft di Dublino.

(15)

Capitolo 3

Tecnologie utilizzate

3.1 Windows Comunication Fondation

WCF (Windows cominication fondation) è un modello di programmazione unificato promosso daMicrosoftche permette la creazione di applicazioni orientate ai servizi, rendendo possibile lo sviluppo di soluzioni sicure, affidabili con la possibilità di integrare piattaforme diverse ed interpolarsi con soluzioni già esistenti. La nascita diWCFè da imputare anche alla volontà di Microsoft di unificare tutte le tecnologie esistenti per creare tecnologie distribuite, ma anche alla volontà di creare una tecnologia capace di adattarsi ai cambiamenti, e quindi fortemente estensibile ed inoltre orientata all’utilizzo delle tecnologie standard più diffuse (come ad esempio SOAP, WSDL, WS-*).

Uno dei concetti che sta alla base della filosofia di sviluppo di soluzioni basate suWCF è il concetto di servizio. Un servizio può essere definito come una parte di codice con la quale si interagisce tramite messaggi. Esso è passivo, infatti un servizio si mette in attesa di messaggi entranti con la quale gli verrà richiesto di eseguire una o più operazioni, saranno quindi i client che andranno ad inizializzare il servizio e, tramite l’utilizzo dei messaggi, a richiede l’esecuzione di un operazione. Tutti i messaggi vengono ricevuti e spediti daendpoint. Unendpoint e costituito da:

un address, il quale specifica dove dovranno essere inviati i messaggi.

un binding, il quale specificherà come dovranno essere inviati i messaggi.

un contract, il quale specificherà cosa conterrà un messaggio

Ogni client che vuole accedere al servizio necessita di conoscere queste informazioni per poter comunicare con esso. Uno dei metodi utilizzati dai servizi per condividere tali informazioni con i client è l’utilizzo diWSDL (Web service definition language). In questo ambito trova spazio il concetto di Software as a Service (SaaS), infatti WCFpermette di implementare e sviluppare software che verrà fornito ai client come servizio accessibile tramite una rete. Solitamente ai client non è richiesto il pagamento per il possesso del software, ma viene invece pagato il suo utilizzo. Un servizio può esporre uno o piùendpointcon i quali può comunicare con diversi client.

WCFha lo scopo di portare in primo piano i concetti dell’architettura orientata ai servizi, e per fare ciò è stato creato il namespace System.ServiceModel il quale contiene una nuova libreria di classi che rende possibile l’utilizzo del modello di programmazione conosciuto come WCF programming model.

WCFoltre a permettere la creazione di servizi, permette anche di creare i client che gli andranno ad utilizzare. L’utilizzo avviene sempre attraverso endpoint, i quali

15

(16)

risultano essere un concetto fondamentale per definire l’infrastruttura propria dei prodotti WCF.

Nell’implementazione di un servizio WCF il primo passo è andare a creare il componente fondamentale: l’endpoint. Andiamo quindi a descrivere endpoint andando a definire il contratto, l’indirizzo ed il binding. Per descrivere il contratto si andranno ad utilizzare interfacce le quali tramite l’utilizzo di appositi comandi andranno a segnalare quale parte di contratto riguarda il servizio e quale le operazioni.

L’implementazione di tale classe andrà a definire il comportamento del servizio relativo allo specifico endpoint. Verrano poi definiti l’indirizzo ed il binding, e infine, tramite l’infrastruttura di hosting offerta da WCF andremmo ad esporre il servizio rendendo quindi possibile agli eventuali client l’interazione con esso.

Anche nella creazione di un client l’endpoint va a coprire un ruolo fondamentale, infatti il client dovrà conosce la descrizione dell’endpoint(che può essere resa nota tramite WSDL ma non solo) per poter comunicare con esso. Una volta ottenuti questi dati il client potrà generare (anche dinamicamente tramite un tool messo a disposizione da WCF) i meccanismi necessari alla creazione di messaggi utili alla comunicazione con il servizio.

I tre elementi di cui si compone un endpoint sono:

l’indirizzo (address): che conterrà l’indirizzo alla quale il servizio risulta disponibile, e dove i client che lo vogliono utilizzare dovranno inviare i messaggi per richiedere l’esecuzione di un lavoro. la definizione di quest’ultimo può essere fatta sia da codice che mediante il file di configurazione (presente in tutte le applicazioni .NET);

binding: esso va a definire come il servizio comunica all’esterno. in questo caso WCF mette a disposizione varie classi che vanno ad implementare vari protocolli di comunicazione. Anche in questo caso sarà possibile specificare tale informazione sia da codice che tramite file di configurazione;

contratto: il più importante dei 3, specifica l’insieme di funzionalità esposte dal servizio nonché la forma che i messaggi dovranno avere, i modi per modellare tale contratto sono molteplici, tra i più utilizzati c’è la possibilità di utilizzare interfacce e classi, dalle quelli verrano estratte le funzionalità disponibili ed il formato dei messaggi. Perché tale estrapolazione di informazioni avvenga è necessario specificare tramite attributi quale significato hanno i costrutti sintat- tici contenuti nelle classi e interfacce. In .Net gli attributi hanno il principale scopo di collegare metadati a determinate parti del programma. Gli attributi principalmente utilizzati nella stesura di un servizio sono<ServiceContract>

e <OperationContract>, il primo andrà ad indicare il contratto di un servizio WCF, mentre tramite il secondo si andranno a specificare quali funzionalità si vuole esporre. Per quanto riguarda una qualsiasi funzionalità sembra ovvio che saranno 2 i messaggi ad essa associati: uno riguardante la richiesta dell’ese- cuzione di tale funzionalità, che verrà modellato in base alla lista dei parametri d’ingresso, ed uno che riguarderà il risultato del’ invocazione che sarà modellato in base al valore di ritorno. Per quanto riguarda la tipologia di dati che verrano passati tramite i messaggi è importante tenere in considerazione che WCFè in grado di tradurre in maniera automatica solo i tipi .NET predefiniti, sarà invece compito dello sviluppatore segnalare come tradurre i tipi non predefiniti sempre tramite l’uso di opportuni attributi quali <DataContract> e <DataMember> i quali andranno a specificare rispettivamente, anche grazie ad alcune proprietà in essi contenute (modificabili dallo sviluppatore), le modalità di traduzione di un intera classe e di un singolo campo dati.

(17)

Luca Pasa 3.2. WCF E REST Come già detto per esporre un servizio è necessario utilizzare l’infrastruttura di hosting offerta da WCF. Tale infrastruttura è offerta da WCF tramite gli oggetti ServiceHost e WebServiceHost. Ad ogni host possono venire aggiunti uno o più endpoint, che verranno così esposti verso i client. A seguito dell’apertura dell’host il servizio rimarrà in attesa di ricevere messaggi che andranno a scatenare l’esecuzione di una o più operazioni.

Figura 3.1: Comunicazione tra client e servizio in WCF.

Molte delle operazioni necessarie per istanziare e consumare il servizio, grazie aWCF vengono eseguite in maniera trasparente all’utente, in modo da rendere trasparente ad esso un parte importante della complessità che porta con se l’utilizzo dell’architettura SOA ed in particolare alla comunicazione con il servizio. Tale livello di astrazione è possibile grazie al Channel layer, un insieme di classi che vengono istanziate in maniera automatica in base alle scelte fatte dallo sviluppatore utilizzando i costrutti presenti nella libreria System.ServiceModel precedentemente citati. Le principali operazioni eseguite dal Chanel Layerriguardano le operazioni di serializzazione di messaggi, il trasposto degli stessi nel metodo definito dallo specificoendpoint e la scelta dell’opportuna funzionalità da eseguire in base ai dati presenti nel messaggio (dispacing)

3.2 WCF e REST

REST(Representational Transfer State) è un paradigma per la realizzazione di appli- cazioni e servizi web che permette la comunicazione e la manipolazione di risorse tramite metodi propri del protocollo http. Dal punto di vista dei serviziREST può essere utilizzato per creare software in cui i client possono effettuare richieste a servizi. Un servizio che utilizza architetturaREST e dettoRESTful, questi servizi sono più semplici e meno strutturati rispetto ai servizi basati su tecnologia RPC come ad esempio SOAP ma, contrariamente a quanto si possa pensare, negli ultimi tempi sono diventati più popolari dei loro più diretti rivali andando di fatto a contro quella che era stata la tendenza portata aventi dalla maggior parte dei fornitori di servizi fino a qualche anno fa.

Le motivazioni di tale ritorno alla basi del protocollo http sono date dalla volontà di potersi interfacciare con client sempre meno complessi (come ad esempio i browser), inoltre l’utilizzo diREST rende possibile l’invio di dati tramite protocolli standard e meno complessi (ad esempio XML). Non è da sottovalutare la possibilità di poter

17 17 di 87

(18)

accedere a servizi e dati tramite semplici url. I serviziRESTfulereditano molti dei vantaggi che porta con se la piattaforma Web, come ad esempio le caratteristiche di sicurezza in essa incluse, il controllo della cache, la compressione dei dati e scalabilità.

In questo progetto la scelta di utilizzare l’architettura RESTè stata inoltre favorita dal fatto che si è interessati a poter gestire il servizio tramite feed (RSS o Atom).

La creazione di serviziRESTful è supportata daWCFe anche in questo caso hanno un ruolo importante gli endpoint, in questo caso è importante capire quali sono le risorse che interessa rappresentare e quale sarà la loro rappresentazione e le uri associate a tali risorse, è infatti importante associare una URI relativa ad ogni risorsa che, associata allaURIrappresentante l’indirizzo a cui è disponibile il servizio darà la possibilità di accedere alla risorsa. Oltre alle URI associate alla varie risorse è necessario associare un operazione base http (ed esempio GET, POST, PUT ecc.) tali metodi vanno a formare un interfaccia uniforme per effettuare l’interazione con risorse nel web, infatti la quasi totalità di applicazioni e sistemi che sono presenti nel web possono capire tali metodi. Inoltre l’utilizzo di questa interfaccia uniforme per la comunicazione rende le applicazioni stabili, in quanto le modifiche a questo metodo di comunicazioni avvengono molto raramente, e quindi difficilmente lo sviluppatore dovrà mettere mano a tale aspetto della sua applicazione.

Per eseguire la creazione del servizio è necessario creare l’interfaccia http del servizio al fine definire quali operazioni e quali dati verranno esposti da esso, ora il principale scopo sarà assegnare alla varie operazioni un URI e un metodo http.Per eseguire tale operazione verrano utilizzati degli attributi <ServiceContract()> e

<OperationContract()> la quale principale funzione sarà associare metodi http e parametri alle funzionalità esposte e per fare ciò verrano usati in collaborazione con gli attributi quali <WebGet> (per le operazioni GET) o <WebInvoke> (in cui è possibile definire il metodo http associato). All’interno di quest’ultimi attributi sarà inoltre possibile definire quali URIsaranno associati alle operazioni esposte e quali parametri saranno ad essi associati. Tali attributi sono contenuti nel namespace System.ServiceModel.Webil quale contiene inoltre metodi e strutture le quali rendono più semplice la creazione di un buon servizio RESTful. È importante considerare anche il tipo di binding, che in questo caso sarà di tipo WebHttpBinding il quale assicura l’utilizzo di tecnologie proprie della piattaforma web nella comunicazione.

La principale differenza rispetto ad un servizio creato con un’architettura di tipo RPC è nel client, infatti, nei servizi RESTful1il client non necessità più di conoscere la descrizione del servizio per comunicare con esso, rendendo necessario comunicare, ad esempio tramite WSDL, tale descrizione, ed in seguito, in base ad essa (in maniera automatica) creare messaggi con una precisa struttura. Nei serviziRESTful WCFmette a disposizione un astrazione sul protocollo http. Per utilizzarla si necessita di un inter- faccia all’interno lato client contenente le definizioni delle funzionalità che si vogliono consumare precedute dagli attributi <WebGet>e/o<WebInvoke> corrispondenti. Fatto ciò è possibile creare un canale di comunicazioneWCFtramiteWebChannelFactory che si occuperà di aprire il canale di comunicazione gestendo le richieste in base a quanto definito tramite gli attributi. Quando saranno eseguite modifiche all’interfaccia http delle operazioni esposte nel server, sarà necessario comunicare ai client tale modifica ed adeguarle le sue interfacce. Purtroppo non esistono strumenti per automatizzare questa operazione. Questo problema però non si presenta ovviamente se usiamo browers o altri client che utilizzano di default le web API per comunicare.

(19)

Luca Pasa 3.3. FEED

3.3 Feed

Ifeed web sono unità di informazioni formattata secondo specifiche stabilite prece- dentemente, infatti essi risultano interoperabili ed aventi contenuto interscambiabile fra le diverse applicazioni o piattaforme. La distribuzione di questi contenuti web può avvenire tramite due principali formati: RSSeAtom. Entrambi sono basati sullo standard XML.

Il formatoAtom è il più recente tra i due, ed ora è disponibile nella sua versione 1.0.

La sua giovane età è uno dei fattori che giustificano la minor diffusione rispetto alla concorrenza, e quindi anche una minore disponibilità di framework, parser e risorse che lo supportano. Sempre la recente creazione di questo formato non assicura la sua stabilità (ad esempio l’attuale versione 1.0 non presenta retro-compatibilità con le precedenti).

Il formato RSS (Really Simple Syndication) è sicuramente più maturo del suo di- retto concorrente, ed inoltre esso si presenta come meno restrittivo, e quindi più versatile in presenza di contenuti che non siano semplicemente testo RSSdefinisce una struttura adatta a contenere un insieme di notizie o informazioni, ciascuna delle quali composta da vari campi. essendo esso un formato predefinito, un qualunque lettore RSS potrà presentare in una maniera omogenea i dati provenienti dalle fonti più diverse. Questo formato nasce all’interno di netscape dove veniva utilizzato per gestire i contenuti del portalemy netscape network, successivamente fu adottato dalle comunità di blogger, cosa che aiutò molto la sua affermazione, facendolo di- ventare oggi un standard di fatto per quanto riguarda l’esportazione di contenuti web.Nel 2000 il W3C pubblicò la prima versione ufficiale diRSS: la 1.0. Contemporanea- mente veniva pubblicata un versione più vicina alla versione adottata inizialmente da Netscape, denominata 0.91, successivamente evolutasi nella versione 0.92 e attual- mente nella versione 2.0. Quest’ultima risulta attualmente la più diffusa e, anche per questo motivo, è stata adottata per la realizzazione del progetto in esame.

Ifeed rsssono facilmente fruibili da strumenti software chiamati aggregatori di feed o feed reader. Essi sono molto comuni e molte volte addirittura integrati nel browser. Essi per interpretare unfeed rss ne eseguono il parser andando ad identificare i tag ed estraendo i valori utili alla visualizzazione. Questa operazione può essere facilmente implementata anche da entità client che rispondono ad un servizio che espone risorse tramite questa tecnologia.

I servizi che utilizzano tale tecnologia per esporre i dati hanno inoltre alcuni importan- ti vantaggi. Il primo tra tutti è l’utilizzo di un formato che risulta essere facilmente interpretabile da molte entità senza richiedere una approfondita conoscenza del servizio stesso, essendo ormai il formatoRSSuno standard di fatto.

L’utilizzo di un linguaggio standardizzato, come XML, per esporre le proprie risorse rende le risorse più facilmente consumabili. La semplicità intrinseca del formatoRSS rende possibile consumare il servizio anche per client molto semplici. Unfeed RSS è realizzato utilizzando lo standard XML ed è quindi composto da alcuni tag e attributi, alcuni di essi riguardanti il contesto globale, altri locali. Per quanto riguarda l’intero feed segnaliamo quelli richiesti come obbligatori:

title, che conterrà il titolo del nostro feed;

link, che conterrà l’indirizzo del sito web corrispondente al feed;

description, dove viene inserita la descrizione del servizio.

19 19 di 87

(20)

Per quanto riguarda gli elementi che compongo il feed, le informazioni ad essi collegate sono contenute all’interno del tag<item> il quale si compone di numerosi tag ‘‘figli’’, tra i quali i più rilevanti (e utilizzati al fine del progetto) sono:

title, contente il titolo del elemento;

link, contente il link all’ elemento;

description, dove è presente la descrizione dell’elemento;

pubData, riportante la data di pubblicazione del elemento;

enclosure, dove sono presenti gli elementi multimediali collegate all’item.

Si vuole fare notare che quanto appena descritto e valido per il formatoRSS. Nel caso di utilizzo del formatoAtom, in virtù della della più stringente e precisa rappresentazione delle informazioni, gli elementi obbligatori risultano essere in numero maggiore.

3.3.1 Feed e WCF

I feed sono semplicemente dati XML esposti tramite un URI HTTP. ed è il lettore di feed responsabile dell’esecuzione delle richieste tramite L’uri per mantenere ag- giornato il feed visualizzato dell’utente. È indubbio che lo scenario che si presenta con l’utilizzo di feed semplifica di molto l’invio e la ricezione di dati, unito poi alla grossa diffusione dei feed reader ha portato a considerare l’utilizzo di tale tecnologia non limitatamente all’esposizione di dati provenienti da blog e simili, ma anche per l’utilizzo in accoppiata con servizi e non solo.

Quindi, la creazione di un servizio, in particolare di un servizio RESTful, propone l’attrattiva di esporre tale servizio tramite feed rsso Atom (se il servizio è di sola lettura, altrimenti utilizzando il protocollo atomPub se il servizio prevede anche attività di scrittura).

WCFoltre a dare la possibilità di esporre servizi RESTful dà anche la possibilità di esporre feed, infatti creando un endpoint http-based sarà possibile esporre feed utilizzando entrambi i formati RSS e Atom. Per rendere l’esposizione dei feed più agevole,WCFmette a disposizione un infrastruttura ad oggetti che rende possibile la creazione di tali elementi senza dover conoscere a fondo la loro struttura, rendendone di fatto trasparente la complessità. Tale infrastruttura mette inoltre a disposizione metodi che si occupano della traduzione dei nostri oggetti nel corrispondente formato richiesto (sia esso Atom oRSS), rendendo trasparenti allo sviluppatore anche future modifiche al formato stesso.

Implementare un servizio che espone un feed richiede la creazione di un servizio RESTfulil quale contenga un metodo che ritorni il feed nel formato desiderato. La gestione del feed avverrà tramite l’utilizzo dei metodi e gli oggetti contenuti all’ inter- no del namespace System.ServiceModel.Syndication, il quale contiene in particolare l’oggetto principale per la rappresentazione di un feed: SyndicationFeed. la struttura di tale oggetto è riportata in Figura 3.2.

Questo oggetto ha lo scopo di implementare un feed generico (anche se il modello è in parte orientato verso l’utilizzo dello standardAtom), nel quale è possibile impostare proprietà, che andranno a popolare alcuni tag propri della strutture del nostro feed, ed inoltre tramite una collezione di oggetti FeedItemè possibile impostare la collezione di item contenuta nel feed. A seguito della creazione di un feed generico è possibile utilizzare le funzioniGetRss20FormatteroAtom10FeedFormatterper ottenere il feed rispettivamente in formatoRSSoAtom, e quindi renderlo disponibile per essere restituito tramite un servizio RESTful.

(21)

Luca Pasa 3.3. FEED

Figura 3.2: Struttura dell’oggetto SyndicationFeed.

Il namespace System.ServiceModel.Syndication contiene anche metodi per con- sumare un feed, infatti esso rende possibile la creazione di un oggettoSyndicationFeed, a partire dal codice XML che è possibile ottenere tramite una richiesta al servizio RESTfulche espone un feed. L’oggetto creato, rappresentante il feed, permette una semplice manipolazione dei dati rendendo possibile presentarli o processarli nella maniera desiderata.

21 21 di 87

(22)

3.4 DirectShow

DirectShow è un framework prodotto da Microsoft contente numerose API le quali permettono la gestione di file multimediali e degli stream audio e video. Il principale scopo è fornire un’interfaccia comune per la gestione dei file multimediali in molti linguaggi di programmazione. Il framework in questione è basato sul concetto di filtro, che rende possibile aggiungere file multimediali su richiesta degli utenti o degli sviluppatori. Tale framework all’interno del progetto è stato utilizzato per gestire l’utilizzo di una webcam al fine di catturare le immagini che fanno parte delle informazioni esposte dal servizio che è stato implementato.

Nello sviluppo del progetto si è in particolare utilizzato DirectShow.net, il quale è espressamente creato al fine di poter accedere alla funzionalità messe a disposizione del framework tramite applicazioni.NET.

DirectShow possiede un’architettura modulare dove ogni operazione è eseguita tramite un oggetto COM che prende il nome di ‘‘filtro’’. Directshow mette a disposizione un insieme di filtri preimpostati, me rende comunque possibile l’estensione delle proprie funzionalità creandone di nuovi.

L’esecuzione di operazioni complesse richiede l’utilizzo di più filtri collegati tra loro, tale connessione avviene anch’essa tramite oggetti COM detti ‘‘pin’’, i filtri usano i pin per spostare i dati da un filtro al successivo. Un insieme di filtri collegati tra loro è detto’’grafo di filtri’’. Un filtro può essere in 3 possibili stati:

running, in questo stato vengono processati i dati multimediali che lo riguardano

stop, il filtro non sta processando i dati

pause, il filtro sta preparando i dati per passare allo stato dirunning

Solitamente i filtri contenuti in uno stesso grafo passano da uno stato all’altro contemporaneamente. I filtri contenuti in un grafo vengono controllati da un ulteriore oggetto COM : ilfilter graph manageril quale esegue molte operazioni tra le quali, coordinare il cambiamento di stato dei filtri contenuti nel grafo, creare uno stesso clock che verrà poi utilizzato da tutti i filtri, comunicare eventi all’applicazione che sta usando il filter graph controllato e mettere a disposizione un metodo all’applicazione per creare il grafo.

Ilmedia type è il sistema con cui è possibile descrivere i formati multimediali digitali, esso viene usato per descrivere i tipi gestiti dai vari filtri che sono contenuti in un grafo. I filtri connessi tra loro devono concordare sui loromedia types, se questo non succede i 2 filtri non possono essere connessi. Ogni media typecontiene informazioni in proposito alla categoria dei dati che rappresenta (Major type), il formato dei dati (Subtype) e un blocco di dati che definisco il formato in modo dettagliato (Format

block).

Per eseguire lo spostamento dei dati da un pin di output di un filtro ad un pin di input di un altro filtro può essere usato il metodo IMemInputPin.Receive, oppure tramite l’allocazione in memoria dei dati che viene eseguita tramite l’oggetto allocator, che andrà a creare un insieme di buffer che verrano riempiti e letti. Il pin che esegue la lettura per conoscere la posizione in memoria dei filtri può usare l’oggetto media samplescreato dall’allocatorallo scopo di gestire i buffer.

Un componente hardware, per entrare a far parte di un grafo di direct show deve essere rappresentato tramite un filtro. Per farlo si utilizza un filtro wrappermesso a disposizione da DirectShow, il quale permette di gestire dispositivi di vario genere tramite i specifici filtri. Il filtro mette a disposizione un interfaccia la quale espone funzionalità per accedere alla diverse possibilità messe a disposizione dall’hardware

(23)

Luca Pasa 3.4. DIRECTSHOW rappresentato. Sempre il wrapper si occupa di tradurre le richieste fatte tramite l’interfaccia in richieste fatte al driver del dispositivo utilizzato e viceversa.

23 23 di 87

(24)

3.5 Task Parallel Library

Task Parallel Library,(TPL) è un insieme di API contenute nel framework .net 4.0 le quali permettono di eseguire attività in parallelo, e quindi di implementare il concetto di parallel computing. Il principale vantaggio portato daTask Parallel Libraryè dato dal fatto di rendere possibile l’ottimizzazione dell’esecuzione di più task sia grazie almultihreading, sia grazie all’esecuzione parallela, ossia la possibilità di eseguire uno o più task su diversi processori, andando ad ottimizzare al meglio l’esecuzione sulle nuove piattaforme hardware multi-core. TPLva a scalare dinamica- mente il grado di parallelismo tra le varie attività andando a ottimizzare l’utilizzo di ogni processore disponibile. Infatti al momento della richiesta di esecuzione di un’attività, .Net va a controllare se nel Thread Poolci sono dei posti liberi. In caso affermativo, apre uno o più thread al fine di lanciare le attività in parallelo, In caso contrario accoda le stesse.

Questa Libreria è stata introdotta a partire dalla versione .Net 4.0, ed ha anche il merito di unificare i numerosi sistemi di gestione del parallelismo presenti in tale framework.

Uno dei principali concetti su cuiTPLsi basa è il concetto di task. A livello di codice, un task è un’istanza della classe System.Threading.Tasks.Task, che mantiene un riferimento a un delegate, il quale poi esegue l’effettivo lavoro da svolgere in modalità concorrente. Questo concetto differisce dal concetto di thread, centrale nel mondo del multithreading classico, infatti un thread può eseguire più task, ed ogni task può essere distribuito su più processori dando vita al concetto di programmazione parallela.

TPLsi basa principalmente sulle classi e sui metodi presenti nei namespace System.

ThreadingeSystem.Threading.Tasks. Nella prima sono presenti le classi e le interfac- ce che rendono possibile la programmazione in multithreading, comprese le classi per la sincronizzazione dei vari thread. Nel secondo troviamo i tipi che rendono possibile astrarre la complessità nella scrittura di codice per l’esecuzione di task in parallelo.

Per inizializzare ed avviare un task esistono 2 metodologie: una implicita e l’altra esplicita. Il metodo implicito prevede l’utilizzo del metodoinvoke, tale metodo riceve in input un array di oggettiSystem.action, Ogni oggetto dell’array viene poi tradotto in un task che, se possibile, viene eseguito in parallelo.

Per l’inizializzazione delleSystem.action è possibile utilizzare le lambda expression, questo perché ogni oggetto System.action viene tradotto in un delegate che non restituisce valore e lelambda expressionrappresentano un delegate anonimo che non restituisce valore. Un limite di tale metodo è il fatto che non permette di controllare i task, ai quali non permesso nemmeno restituire un valore.

Questi 2 limiti possono essere risolti andando a creare in maniera esplicita un istanza della classe task. La creazione di un istanza di task avviene anch’essa tramite il metodoinvoke, ma non essendo esplicita non e possibile controllore tale entità. anche qui è possibile utilizzare una lambda expressionoppure un delegate (che si occupa di eseguire le operazioni asincrone richieste) per costruire un oggettotask, in seguito è possibile avviare tale attività utilizzando il metodo Start.

Per avere maggior controllo durante l’esecuzione dei vari task è possibile usare la factory messa a disposizione daTPL: TaskFactory.

Per quanto riguarda invece la possibilità di eseguire task in maniera parallela che però ritornino un valore è possibile utilizzare gli oggetti System.Threading.Tasks.

Task(Of TResult)tramite i quali è possibile ottenere un valore del tipo specificato nella definizione dell’oggetto stesso. L’interazione con tali oggetti è la stessa che viene utilizzata con gli oggettiTask classici.

(25)

Luca Pasa 3.5. TASK PARALLEL LIBRARY Nell’esecuzione deitask è possibile che una o più eccezioni si verifichino contempo- raneamente, e molte volte non è facile capire da quale istruzione siano provocate.

Per gestire tali casi .NET mette a disposizione l’eccezioneAggregateException, nella quale vengono raggruppate tutte le eventuali eccezioni che si verificano durante l’ese- cuzione di un attività su 2 o più thread o processori. Le eccezioni vengono collezionate all’interno della proprietàInnerExceptionsdove, scorrendo tale collezione, è possibile risalire alla causa che ha portato al sollevamento delle eccezioni contenute.

25 25 di 87

(26)

3.6 System.Runtime.Caching

Dalla versione 4.0 del framework .Net sono stati introdotti meccanismi per imple- mentare politiche di caching. Il namespace System.Runtime.Cachingcontiene tipi e metodi utili ad implementare tali sistemi.

Gli oggetti qui contenuti danno la possibilità allo sviluppatore di gestire in maniera facile e trasparente i dati in una cache, inoltre permettono di mantenere un ottimo livello di controllo su quest’ultima. L’utilizzo di tale cache avviene tramite l’istanzi- azione di un oggetto di tipo MemoryCache, il quale è un implementazione concreta della classe astrattaObjectCache. Dopo tale operazione è possibile configurare alcuni valori della cache come ad esempio:

Name che contiene il nome della cache

CacheMemoryLimit, che rappresenta la quantità di memoria nel computer, in byte, che può essere utilizzata dalla cache

PhysicalMemoryLimitche definisce la percentuale di memoria fisica che la cache può utilizzare

PollingIntervalche rappresenta periodo massimo di tempo dopo il quale la cache aggiorna le statistiche relative alla memoria

Tali caratteristiche sono configurabili sia attraverso il codice, al momento dell’is- tanziazione della cache, sia a priori tramite il file di configurazione.

Per popolare la cache vengono usati oggetti di tipo CacheItemi quali sono caratteriz- zati principalmente da 2 valori: una chiave (key) che conterrà un identificativo ai dati che si andranno ad inserire nella cache, e un valore (value) contenente i dati veri e propri.

Ad ogni oggetto inserito in cache è possibile assegnare un oggetto CacheItemPolicy, che permette di controllare un set di dettagli di eliminazione e scadenza per una voce della cache specifica. Tali dettagli sono controllati tramite proprietà di tale oggetto, che poi verrà assegnato ad una specifica voce di cache al momento dell’istanziazione delCacheItemstesso. Alcune delle principali proprietà utilizzabili sono:

AbsoluteExpiration, che specifica un valore che indica se una voce della cache deve essere eliminata dopo una durata specificata.

Priority, che specifica un impostazione di priorità utilizzata per stabilire se eliminare una voce della cache.

SlidingExpiration contiene un valore indicante se deve essere eliminata una voce della cache se non vi è stato effettuato l’accesso in un determinato intervallo di tempo.

RemovedCallbackottiene o imposta un riferimento a un delegato CacheEntry- RemovedCallback chiamato dopo la rimozione di una voce dalla cache.

In particolare RemovedCallback risulta comoda nella gestione delle voci in cache, infatti una peculiarità del sistema di caching è dato dal fatto che l’eliminazione di una voce dalla cache è fatta in maniera completamente automatica, quindi senza richiedere la chiamata ad un metodo. Ad esempio si può immaginare di voler mantenere in memoria un certa quantità di dati che può essere settata tramite la proprietà dell’oggetto ObjectCache CacheMemoryLimit. Il sistema di caching si preoccuperà di eliminare gli oggetti quando la loro mole supera il limite impostato.

(27)

Luca Pasa 3.6. SYSTEM.RUNTIME.CACHING Al momento dell’eliminazione però è possibile essere informati dell’evento, questo grazie alla RemovedCallback che ci permette di impostare un delegate nel quale è possibile ottenere la voce di cache eliminata ed eseguire le operazioni per gestire tale evenienza (ad esempio salvare l’oggetto nella memoria di massa).

27 27 di 87

(28)

3.7 Windows Phone 7

Windows Phone 7 è il nuovo sistema operativo che Microsoft offre per l’utilizzo su smartphone. Lo sviluppo di applicazioni avviene tramite l’utilizzo della piattaforma Silverlight, utilizzandoVB.NEToC#come linguaggio. Lo sviluppo di tali applicazioni deve tenere conto di alcune importanti linee guida, legata anche al ciclo di vità dell’applicazione. Il ciclo di vita dell’applicazione è regolato da un preciso modello d’esecuzione che governa lo stato dell’applicazione dal momento dell’attivazione al suo spegnimento. Questo modello d’esecuzione si pone lo scopo di mantenere l’esperienza dell’utente sempre veloce e reattiva. Bisogna tenere conto che Windows Phone 7 permette l’esecuzione di un sola applicazione alla volta, ed il sistema operativo mette le applicazioni in stato dormiente quando essa non sono più in primo piano.

Questo stato dormiente è dettotombstoning. Il sistema operativo permette però di far ripartire l’applicazione ricreando lo stato precedentemente lasciato dall’utente.

I motivi per cui il sistema operativo si trovi nella situazione di dover mettere un applicazione in stato dormiente sono molteplici:

• ricezione di una chiamata;

• lo smartphone va in standby;

• l’utente preme il bottone start o search;

• l’applicazione richiede un operazione da parte di un altra applicazione esterna;

Rigenerare la pagine a seguito del tombstoning porta a perseguire l’obbiettivo di nascondere all’utente che l’applicazione è stata disattivata.

Il sistema operativo mette a disposizione quattro eventi che permettono di gestire queste situazioni: Launching, Closing, Deactivated, e Activated. Questi eventi sono fortemente legati al ciclo di vita dell’applicazione, in Figura 3.3 è riportata tale connessione.

Figura 3.3: Ciclo di vita di un applicazione Windows phone 7.

Questi eventi vengono sollevati in particolari momenti del ciclo di vita in particolari condizioni:

(29)

Luca Pasa 3.7. WINDOWS PHONE 7

Launching:quando l’applicazione viene avviata dall’utente;

Closing:quando l’applicazione viene chiusa, ossia quando l’utente preme il pulsante ‘‘back’’;

Deativated:quando l’applicazione viene disattivata e non chiusa;

Activated: quando un’applicazione dopo essere stata disattivata e messa in tombstoning viene riattivata tramite la pressione da parte dell’utente del pulsante ‘‘back’’.

Per arrivare all’obbiettivo di non far notare all’utente che l’applicazione è stata disattivata bisogna salvaguardare 2 tipi d’informazione:

page state: rappresenta lo stato grafico di una pagina dell’applicazione. Viene utilizzato in quanto al rientro in un’applicazione precedentemente disattivata viene visualizzata l’ultima pagina che visibile al momento della disattivazione, è quindi importante fare in modo che al rientro la pagina risulti nello stesso stato in cui era stata lasciata precedentemente. Per eseguire il salvataggio dello stato della pagina vengono usati gli eventiOnNavigatedTo e OnNavigatedFrom che vengono sollevati rispettivamente quando si va a navigare nella pagina a cui l’evento fa riferimento, e quando si lascia quella pagina.

application state: rappresenta lo stato dell’applicazione non legato ad un specifica pagina. Le informazione riguardanti l’application state sono le informazioni globali (come ad esempio informazioni legate al loggin di un utente) e quindi utilizzate da più pagine dell’applicazione. Quando un applicazione viene messa intombstoning i dati per non essere persi devono essere salvati in maniera esplicita. A questo scopo il sistema operativo mette a disposizione una struttura dati di tipo dizionario che viene identificata con la proprietà PhoneApplicationService.State.

Se l’applicazione presenta dati che devono essere persistenti è possibile salvarli all’interno delisolated storage, un’area protetta di memoria posizionata nel disco del dispositivo, l’equivalente del filesystem nei computer desktop. La velocità di caricamento dei dati da quest’area di memoria può richiedere alcuni secondi, è quindi consigliabile utilizzarla solo per dati che richiedono di essere mantenuti per lungo tempo, o per oggetti non serializzabili.

Come già riportato all’inizio, lo sviluppo di applicazioni perWindows Phone 7avviene utilizzando la piattaforma Silverlight. Quest’ultimo per la creazione delle interfacce grafiche va ad utilizzare il linguaggioXAML. XAMLè un linguaggio dichiarativo basato suXML, e come nel HTML gestisce gli elementi tramite attributi.

29 29 di 87

(30)

3.8 Windows Azure platform

Windows Azure Platformè una piattaforma che fornisce servizi di cloud computing ospitata all’interno dei datacenter microsoft.

Windows Azure Platformva inoltre a ridurre, nelle prime fasi, la necessità di acquisto di tecnologie, e rende possibile agli sviluppatori creare applicazioni che possono essere eseguite nel cloud in maniera semplice, sfruttando le loro conoscenze di sviluppo con .NET Framework. Inoltre facilita la manutenzione e la gestione delle applicazioni fornendo un sistema on-demand per ospitare, scalare e gestire le stesse. L’infras- truttura di gestione è automatizzata con una piattaforma pensata per assicurare un alta disponibilità e scalabilità dinamica in base alla necessità di utilizzo. Inoltre l’ambiente di hosting è progettato per essere interpolabile e basato su standard, supportando numerosi protocolli internet come HTTP, REST, SOAP, e XML.

Windows Azure Platformcomprende diversi servizi per gli sviluppatori, tra i quali:

Windows Azure: un sistema operativo per servizi cloud che viene utilizzato come ambiente di sviluppo, di hosting e gestione di servizi perWindows Azure Platform. Esso rende disponibile un sistema che permette di ospitare, eseguire, manipolare e rendere scalabili web application e servizi in internet all’interno deidatacenter Microsoft.

Windows Azure AppFabric: un insieme di servizi, fortemente scalabili, fonda- mentali nello sviluppo della maggior parte delle applicazione cloud-based e cloud-aware. Windows Azure AppFabric fornisce applicazioni con un interfaccia comune e semplice nella gestione, ricerca, ed esposizione di web service, dando così la possibilità agli sviluppatori di concentrarsi sulla logica dei loro servizi senza doversi preoccupare della gestione e dello sviluppo dell’infrastruttura di cloud in cui essi operano.

Windows SQL Azure: è un database relazionale (SQL Server) fornito come servizio su piattaforma Cloud. Esso si presenta come un servizio scalabile e assicura una alta disponibilità. L’utilizzo diWindows SQL Azure permette di evitare l’installazione di applicazioni, la configurazione e la gestione delle stesse, facilitando quindi l’utilizzo delle applicazioni che richiedono l’utilizzo di una base dati.

In Figura 3.4 è riportata la struttura di Windows Azure Patform

3.8.1 Windows Azure

È il sistema operativo che funge da ambiente di sviluppo, hosting e controllo per windows Azure Platform. Windows Azure gestisce in automatico il bilanciamento di carico, delle risorse, ed il ciclo di vita dei servizi basandosi sulle scelte fatte dal gestore del servizio. Per esporre un servizio tramite Windows Azure è importante specificare la tecnologia del servizio e la sua configurazione, sarà peròWindows Azure a gestire gli aggiornamenti e gli eventuali errori assicurando la disponibilità continua del servizio. Windows Azuresi compone dei seguenti strumenti:

Windows Azure Compute: Hosting Services: è l’ambiente d’esecuzione in cui viene gestito il codice di un applicazione o di un servizio. Esso è contenuto nell’ambiente di hosting messo a disposizione da Windows azure, che si presenta scalabile e geograficamente distribuito tra diversi datacenter.

Windows Azure Compute Servicesi compone di ruoli. Un ruolo si definisce come

(31)

Luca Pasa 3.8. WINDOWS AZURE PLATFORM

Figura 3.4: Struttura di Windows Azure Platform.

un componente che può essere eseguito nell’ambiente d’esecuzione. È possibile che per ogni ruolo esistano una o più istanze. Sono presenti 3 tipi di ruoli:

Web Role: è specializzato per applicazioni web e supporta IIS 7 e asp.net.

La sua principale funzione è l’interfacciamento verso i client, e quindi, si comporta come un componente front-end.

worker role: il principale compito è eseguire lavori in background of- frendo quindi il massimo del disaccoppiamento in termini di ricezione ed elaborazione del dato.

Virtual Machine Role: offre la possibilità di creare localmente la propria Virtual Machine, o utilizzarne una già esistente, e poi pubblicare l’intera macchina virtuale nell’ambiente di cloud computing di Windows Azure.

Questo ruolo si dimostra molto utile per poter migrare sull’ambiente di cloud applicazioni ‘‘monolitiche’’ preesistenti, sviluppate ad esempio per windows server.

Il servizio di host fornito permette tutte le possibili combinazione di questi ruoli, e anche l’utilizzo di 2 o più ruoli dello stesso tipo.

Windows Azure Storage Services: questi servizi sono forniti alla scopo di ren- dere dati persistenti. Essi sono accessibili da qualsiasi applicazione, anche se essa non è distribuita suwindows Azure Platform. I Windows Azure Storage Servicessono divisi in 3 principali categorie:

Table Storage Services: forniscono uno storage strutturato per entità. Il Table Storage è costituito essenzialmente da colonne e righe. Il concetto di base è far persistere una o più entità del nostro dominio in una tabella.

Ogni colonna corrisponde a una proprietà di quella entità e ogni riga a un’istanza diversa. L’approccio risulta efficace nel determinare il corretto funzionamento del meccanismo di scalabilità e di replica dei dati, aumen- tando decisamente il livello di affidabilità della piattaforma di storage di Windows Azure.

31 31 di 87

Riferimenti

Documenti correlati

Allo scopo di approfondire la caratterizzazione del basamento cristallino affiorante nelle Serre meridionali e le strutture geologiche a scala locale e regionale qui

Ne sono un esempio la definizione di un modello di riferimento per la gestione forestale e la semplificazione delle procedure inventariali (ottenibile misurando solo

• ottenere dati quantitativi sulla popolazione riproduttiva delle diverse specie di silvidi in ambienti della parte veneta del Delta del Po che avessero

Analizzando i risultati, il punto più rilevante è che non tutti i campioni positivi all’analisi microbiologica sono poi risultati positivi a quella biomolecolare (tabella 5.2), come

In figura 6 vengono rappresentati per ciascuno dei pesticidi analizzati i livelli di contaminazione nelle diverse specie. Anche in questo caso, si può notare che il lindano presenta

L'attività delle chinasi che fosforilano LHCII non è, però, controllata solo dallo stato redox del PQ tramite il suo legame al cyt b6 f , ma è regolata anche dalla riduzione

Questo risultato comunque non fa che supportare la precedente analisi condotta con il software SAM che ha consentito di identificare un numero abbastanza ristretto di geni

È stata identificata una sostituzione arginina -&gt; cisteina nel collagene tipo I (α1(I)-R134C) in due pazienti non imparentati con EDS di tipo classico [Nuytinck et al.,