Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Introduzione a XML e JSON
XML (Extensible Markup Language) è un metalinguaggio che permette di creare dei linguaggi personalizzati di markup. È estensibile.
JSON (JavaScript Object Notation) è un formato di scambio dati leggero. Si basa su un sottoinsieme di JavaScript ed è ideale per lo scambio dati.
Approccio AJAX
AJAX (Asynchronous JavaScript and XML) è un modello architetturale per integrare JavaScript, DOM e CSS al fine di migliorare il processo di sviluppo e usabilità delle applicazioni web. Offre la comunicazione asincrona tra client e server, permette di separare la struttura dai dati e non richiede installazioni aggiuntive.
Motivazioni per l'utilizzo di AJAX:
Computazionali:
- Si riducono il numero di connessioni al server
- L'interazione asincrona permette lo scambio di dati in background
Usabilità:
- Si arricchisce l'interazione con l'interfaccia grafica
- Evita il refresh della pagina
- Consente di sviluppare animazioni ed effetti grafici
Processo di sviluppo:
- Riduce la complessità dello sviluppo
- Permette di creare applicazioni web più dinamiche e interattive
- nuove funzioni User-agent:
- Gestione eventi
- Gestione delle risposte
- limita il server alla fornitura di dati e validazione di input
- Regola di sicurezza di base per gli user agent. Segue che uno script potrà caricare risorse solo se hanno la stessa origine:
- stesso host
- stesso URL
- stessa porta
- Dato che questa regola risulta molto restrittiva, sono stati sviluppati diversi modi per aggirarla:
- JSONP (JSON with padding), è un metodo implementato lato server per incapsulare dei dati JSON in una funzione di callback e funziona solamente in GET.
- usando document.domain è possibile che due script identificano il loro dominio in modo corrispondente
- Dato che entrambe le soluzioni sono temporanee e non sempre funzionanti, il W3C ha definito CORS (Cross-Origin Source Sharing) che definisce un meccanismo per effettuare richieste cross-origin lato client, semplicemente verificando che il browser
Ogni risorsa di cui ottiene la rappresentazione REST è un design pattern che prescrive l'uso di alcuni standard:
- HTTP
- URL 18
- XML, HTML o JSON (rappresentazione delle risorse)
- Tipi di risorsa (text/html, application/json)
Lavorando tramite risorse, un protocollo REST consente di astrarre dal linguaggio che sarà adoperato lato client o server per processare i dati.
HTTP è un protocollo CRUD (Create, Retrieve, Update, and Delete):
- GET → Retrieve
- POST → Update
- PUT → Create
- DELETE → Delete
Database NoSQL:
I database NoSQL risolvono il conflitto con il vincolo di consistenza. Si pongono quindi in alternativa al modello ACID dei database relazionali, non compatibile con un modello distribuito e decentralizzato e considerato come eccessivamente pessimistico.
- Basic availability: i datastore sono operativi per la maggior parte del tempo
- Soft-state: i datastore non devono necessariamente essere scritti in modo consistente e neppure eventuali
copie devono essere consistenti per la maggior parte del tempo
Eventual consistency, la consistenza deve essere esibita in un determinato momento successivo, ad es. al tempo di lettura. La consistenza va gestita a livello applicativo
Modulo 3 - Applicazioni distribuite
Linguaggi di scripting lato server
Distribuire i processi di esecuzione
Application server: insieme di componenti/servizi che integrano la logica di presentazione, di esecuzione e di connessione di un sistema → ogni scelta architetturale è valutata in base a delle dimensioni critiche:
- prestazioni
- scalabilità
- disponibilità
- complessità
- sicurezza
Obiettivo di un'architettura → massimizzare queste dimensioni
Architetture tipiche:
- singolo host
- Architettura: Un singolo host contiene:
- Web Server
- Script Engine
- Application Server
- Database Server
- Valutazione architettura:
- Prestazioni: dipendono dalla macchina. Tutte le applicazioni accedono alla stessa CPU
- Prestazioni: gestita una distribuzione del carico di lavoro sugli host bilanciata: Load-balancing
- Scalabilità: è possibile aggiungere nuove istanze degli host
- Disponibilità: in caso di indisponibilità di un host il suo carico di lavoro viene distribuito sui processi funzionanti: fail-over
- Complessità: costi e competenze elevati
- Sicurezza: si possono attivare politiche di sicurezza specifiche per singoli servizi
- expiration rules: definiscono la durata della validità di un oggetto in cache
- invalidation rules: stabiliscono se l'oggetto in cache non è conforme con l'originale
- Viene registrato l'evento del timeout all'interno dell'event handler
- Vengono eseguite le istruzioni successive del codice 21
- Quando l'event handler notifica che il timer si è concluso, allora...
- separazione di interfaccia e dati
- riduzione della latenza, esecuzione delle operazioni di modifica dei dati direttamente sul client attraverso una copia in cache della base di dati. Necessaria è la verifica dell'allineamento dei dati. Se risultano disallineati verrà aggiornata la cache del client
- reattività, contesto nel quale i dati modificati da un client vengono propagati a tutti i client che hanno implementato un metodo in ascolto su quel dato. Servono dei protocolli che lavorino in due fasi:
- i dati inviati vengono salvati in locale ed in remoto
- in seguito il dato è re-inviato per conferma da remoto verso il locale, i client ricevono una nuova versione dei dati e se tracciano delle differenze aggiornano la versione locale
- fusione delle tecnologie, che fornisce la
- Ritardare il caricamento di Javascript, posizionando l'inclusione degli script in fondo alla pagina.
Per garantire che la sessione sia mantenuta con coerenza è necessario che le richieste dello stesso client siano inviate allo stesso server. Per riconoscere le richieste di uno stesso utente si possono usare cookie, oppure tecniche di URL rewriting.
Gestione cache:È possibile migliorare le prestazioni riducendo i carichi e la latenza di
trasmissione attraverso la cache. politiche di aggiornamento della cache:
Scalabilità delle applicazioni web
Affermazione di un paradigma di programmazione: Programmazione ad Eventi
Quest'ultima modifica il flusso di esecuzione di un programma, basandosi su eventi generati da un gestore (event handler) spesso supportato da un chiamante (dispatcher).
Node.js supporta la programmazione ad eventi.
Javascript è un linguaggio a singolo thread (unica pila di chiamate (CallStack)) però consente di definire strutture non bloccanti. (Esempio slide)
Flusso di lavoro:
Verrà inserita nella call stack la funzione di callback del timeout ed eseguita. Stesso comportamento con le chiamate AJAX, solamente che la funzione di callback sarà inserita nell'event loop finché non sarà possibile inserirla nella call stack.
Node.js è un framework modulare (usa NPM) Javascript per l'utilizzo lato server, pensato per lavorare con un approccio ad eventi. Sfrutta il motore Javascript V8 progettato per avere performance elevate.
Process → oggetto più importante che traccia il processo in esecuzione.
Oggetti globali: Node è pensato per essere modulare ed estensibile → è possibile implementare oggetti o funzioni di altri moduli tramite l'oggetto export o module. (se non presenti nativamente, installazione attraverso npm)
Modulo HTTP → modulo fondamentale per le connessioni HTTP (esempio slide) 22
Deploy di un server Node.js (Guardo slide)
3.1.4 poiché è tutto pratico)Framework e Design Pattern evoluzione dei modelli architetturali sono caratterizzati da quattro principi fondamentali:
Possibilità di interrogare i dati usando gli stessi metodi lato client e lato server.
Templating → flussi per cui HTML fornisce la struttura, i dati vengono presi tramite API e le iterazioni sono gestite da procedure sia lato server che client.
Un framework molto conosciuto per il templating con Node.js è EJS.
Ottimizzazione di un'applicazione web:
Vi è il bisogno di ridurre le chiamate di rete che vengono effettuate all'interno delle applicazioni web.
Ridurre le dimensioni delle risorse usate dall'applicazione: