Scarica Protocollo HTTP e Comunicazione Client-Server e più Schemi e mappe concettuali in PDF di Elementi di Informatica solo su Docsity!
HTTP
- Il protocollo http sta per “HyperText Transfer Protocol”.
- È un protocollo che lavora a livello di applicazione, permette alle applicazioni web di comunicare e scambiare dati.
- È basato su TCP/IP.
- È utilizzato per consegnare contenuti come immagini, video, audio, documenti ecc.
- Ovviamente due computer per poter comunicare tramite protocollo http devono parlare usando protocollo http.
- Adotta un modello client server.
- http è stateless cioè è privo di stato, non conserva informazioni sulle richieste dei clienti precedenti. Tramite un cookie però, il client mantiene lo stato di precedenti connessioni.
- Le risorse HTTP sono localizzate e identificate nel web grazie al sistema dell' Uniform Resource Identifiers (URI) e più specificatamente con l' Uniform Resource Locators (URL), ovvero il comune “indirizzo web”. CONNESSIONE HTTP Quando client e server si mettono in contatto l'uno con l'altro si stabilisce una sessione HTTP. Una sessione ha inizio quando il client stabilisce una connessione TCP con una particolare porta del server inviando una richiesta di informazioni o risorse. L’http usa la connessione TCP in due modalità:
- Connessione non persistente à il server analizza una richiesta, la serve e chiude la connessione. Round trip time (rtt) è il viaggio di un piccolo pacchetto dal client al server. Vengono richiesti 2 rtt per risorsa, sovraccaricando il sistema operativo per ogni connessione TCP.
- Connessione persistente à Il server mantiene attiva una connessione TCP fino allo scadere di un timeout. Si hanno meno rrt. Si può utilizzare la tecnica pipelining in cui più richieste http vengono inviate su una singola connessione TCP, senza attendere le risposte corrispondenti. MESSAGGIO HTTP Più nello specifico un messaggio http è formato da 3 parti principali: start line, header e body. Le informazioni contenute nelle 3 sezioni dipendono dal tipo di messaggio, il quale può essere una richiesta o una risposta. Un messaggio di richiesta contiene:
- Nella start line è indicato: metodo, url e la versione http.
- Nell’header è indicato: host, accepte, useragent, referer
- Il body non è necessario Un messaggio di risposta contiene:
- Nella start line è indicato: versione http contentuta nello status code
- Nell’header è indicato: server, autentificazione, accepte-range
- Il body contiene il file richiesto Affinché lo scambio di informazioni vada a buon fine, il client deve inviare le proprie richieste seguendo una grammatica specifica e articolata. All'interno di questo schema troviamo alcune parole chiave dette metodi che identificano l'azione richiesta dal client al server. I metodi si possono classificare in sicuri o idempotenti:
- Un metodo idempotente è un metodo http che può essere chiamato molte volte senza risultati diversi.
- Un metodo sicuro , un metodo http che non modifica le risorse. Tra i metodi più importanti troviamo: get, post, put, delete e head. WEB SERVER un web server è un applicazione software in esecuzione sul server. Il compito di un server web è quello di servire siti web su Internet. Per raggiungere questo obiettivo, funge da intermediario tra il server e le macchine client. La sfida più grande di un web server è quella di servire molti utenti web diversi contemporaneamente, ognuno dei quali richiede pagine diverse.
Un aspetto fondamentale dei Web Server è la capacità di gestire contemporaneamente più richieste che provengono da qualsiasi client in giro per il mondo. Distinguiamo 2 tipi di server http: Proxi server e Apache server. PROXY Un proxy è un server che funge da intermediario tra client e pagine web. Il procedimento è il seguente:
- L’utente (client) si collega al proxy e gli invia le richieste.
- Il proxy si collega al server ospitante il sito web e gli inoltra la richiesta dell’utente.
- Ricevuta la risposta, il proxy manda la risposta al client. In pratica, non siamo più connessi direttamente al server del sito che visitiamo ma passiamo attraverso questo filtro chiamato proxy sia in entrata che in uscita. L’utilizzo di un server proxy ha un’influenza positiva per due motivi principali:
- Maggiore sicurezza in quanto l’indirizzo IP del computer o della rete da cui l’utente naviga non comparirà mai direttamente nel corso della navigazione, risulterà visibile soltanto quello associato al server proxy.
- Velocizza la navigazion e in quanto i siti visitati recentemente da qualunque utente, vengono memorizzati nel proxy che in questo modo evita di scaricarli nuovamente. Il proxi può essere:
- Trasparente à non modifica la richiesta o la risposta
- Non trasparente à modifica la richiesta o la risposta. Web Caching à è una tecnica utilizzata per ridurre il traffico e accelerare l’accesso alle informazioni. I proxi server memorizzano le risorse che sono state richieste recentemente e ne fanno una copia locale migliorando così il tempo di recupero delle risorse a cui si accede più frequentemente. APACHE SERVER http Il server HTTP Apache è un software open source che viene eseguito su un server http. Il server e il client comunicano tramite il protocollo HTTP e il server web Apache è responsabile della comunicazione fluida e sicura tra le due macchine. Architettura : Una delle caratteristiche del Web Server Apache è l’architettura modulare:
• Moduli à Le funzionalità del server sono rese disponibili tramite dei moduli. Ogni modulo svolge funzioni
specifiche e indipendenti che ricoprono una singola funzionalità.
- Apache httpd à implementa il ciclo di elaborazione della richiesta. È il nucleo software.
- Modulo multi-processing (MPM) à strato intermedio tra Apache e il sistema operativo per la gestione dei processi.
- Apache Portable Runtime (ARP) à Librerie che permettono di chiedere funzioni del sistema operativo. Configurazione Apache Il server HTTP Apache viene configurato tramite semplici file di testo. Il file di configurazione predefinito è solitamente chiamato httpd.conf. La configurazione è spesso suddivisa in più file più piccoli, per facilità di gestione. Questi file vengono caricati tramite la direttiva Include. Il server viene configurato inserendo le direttive di configurazione in questi file di configurazione. Una configurazione minimale richiede 5 direttive:
- La direttiva User imposta l’ID, utente con cui il server risponderà alle richieste.
- La direttiva Group imposta il gruppo in cui il server risponderà alle richieste.
- La direttiva ServerName imposta lo schema di richiesta, hostname e porta che il server usa per identificarsi. Se non è accessibile a Internet si può inserire l’hostname nel file hosts per eseguire la risoluzione locale.
- La direttiva DocumentRoot imposta la directory da cui Apache httpd servirà i file.
- La direttiva listen indica ad Apache httpd di accettare le richieste in arrivo solo sulle porte specificate.
XML
- Sta per eXtensible Markup Language.
- La funzione primaria di XML è quella di memorizzare e trasportare i dati.
- Non fa nulla da solo. Tutto ciò che fa è memorizzare dati. Ha bisogno di interagire con un’altra applicazione per visualizzare, spostare o utilizzare in altro modo il codice memorizzato
- XML lo usiamo per: separare i dati da HTML, semplificare l’archiviazione dei dati, semplificare la condivisione dei dati dati e per semplificare le modifiche alla piattaforma. La principale differenza tra XML e HTML è che il codice HTML è fatto specificamente per progettare pagine web da visualizzare nei browser. XML è pensato solo per il trasporto e la memorizzazione dei dati. Struttura XML Un documento XML è formato da una struttura ad albero che si ramifica. Esso è composto da componenti denominati elementi. Gli elementi possono avere associate altre informazioni che ne descrivono le proprietà. Queste informazioni sono chiamate attributi. L'organizzazione degli elementi segue un ordine gerarchico o arboreo che prevede un elemento principale, chiamato root element. Sintassi XML Gli elementi sono rappresentati tramite tag, cioè sequenze di caratteri delimitate dai segni < > proprio come avviene per l'HTML. A differenza dell'HTML in cui i tag sono predefiniti, XML ci lascia liberi di definire i tag che vogliamo. Es: input output Un DTD ( Document Type Definition ) è una descrizione formale della grammatica di un linguaggio di markup. Esso descrive gli elementi utilizzabili in un documento XML e le informazioni sugli attributi di ciascun elemento. JSON
- Sta per JavaScript Object Notation
- È divenuto nel corso degli anni un popolare formato per lo scambio dei dati in applicazioni client-server.
- È comodo, ordinato e facilmente leggibile Sintassi JSON JSON prende origine dalla sintassi degli oggetti letterali in JavaScript. Un oggetto letterale può essere definito così: A differenza di XML, JSON adotta un approccio semplice per rappresentare i dati della struttura senza complesse notazioni matematiche e algoritmi, inoltre è facile da imparare, il che lo rende un modo ideale per creare pagine più interattive. Inoltre JSON è diverso da XML perché privo di tag di chiusura, più breve, più veloce, presenza di arrays. SEARCH ENGINES (MOTORI DI RICERCA) Un motore di ricerca (o search engine) è un programma che analizza una grande quantità di dati. Dopo aver inserito delle parole chiave, restituisce un elenco delle informazioni raccolte. Il motore di ricerca più famoso al mondo è Google e Youtube. I motori di ricerca operano tramite 3 processi principali:
- Scansione (crawling) à effettuata tramite un programma chiamato crowler che esamina il codice di milioni di pagine web. Un crawler consiste in una coda di URI da visitare.
La sua modalità di funzionamento consiste nell’inizializzare la coda con gli URI delle pagine conosciute e poi ripetere: prendere l’URI dalla coda, recuperare e analizzare le pagine, estrarre gli URI dalle pagine, aggiungere nuovi URI alla coda e inviare la pagina all’indicizzatore. Dato che il web è grande abbiamo bisogno di un crawler altamente scalabile.
- Indicizzazione (indexing) à i dati raccolti durante la scansione vengono ordinati e raccolti in un indice che verrà poi usato nella fase successiva di ranking tramite algoritmi avanzati. L'indice deve essere regolarmente aggiornato: nuove pagine web, pagine web cancellate o modificate.
- Creazione delle pagine dei risultati di ricerca (ranking) à la pagina con i risultati della ricerca è la selezione finale: quando l’utente inserisce nel box di ricerca una richiesta (query), ti viene restituito un elenco con i migliori risultati classificati (ranking) in ordine di importanza. Possiamo suddividere il web in 3 parti:
- L’ Internet di superficie à parte a cui accediamo tutti i giorni, è la parte della Rete che viene mappata dai motori di ricerca tradizionali, come Google o Bing.
- Il Deep Web à porzione di Internet che non viene indicizzata dai motori di ricerca, per cui non la troveremo mai tramite Google. 3. Dark Web à piccola porzione di web non indicizzato che possiamo considerare un sottoinsieme del Deep Web. Tra i principali algoritmi che permettono il funzionamento di un motore di ricerca troviamo:
- Knowledge Graph à esso utilizza la semantica e altri criteri per raggruppare e collegare informazioni. Queste informazioni consentono a Google di visualizzare risultati pertinenti e accurati. Pertanto, quando un utente invia una query di ricerca per un termine specifico, Google esegue la scansione del Web per estrarre e analizzare le informazioni trovate.
- Page Rank à algoritmo utilizzato da Google per attribuire un punteggio alle pagine web (e non ai siti web), basandosi sulla quantità e sulla qualità dei link in ingresso. Il suo scopo è determinare l’importanza relativa di una determinata pagina web in una rete (ad esempio, il World Wide Web) e comprendere la sua rilevanza rispetto ad una query.
- Hits (Hyperlink induced Topic Search) à algoritmo che valuta una pagina secondo due principi distinti:
- come hub (puntatori all’authority, tanti link uscenti)
- oppure secondo l’autorità dei contenuti, quindi secondo la qualità e la ricchezza delle informazioni fornite all’utente (fonti autoritarie sull’argomento, tanti link entranti). C’`e una relazione di reinforcement: hub di qualità puntano ad authorities di qualità. Seguono due fasi:
- Fase di campionamento (Sampling phase) à in questa fase le parole della query sono utilizzate per costruire un insieme di pagine detto radice (root), utilizzando un motore che analizza il contenuto testuale. Successivamente l'insieme radice viene espanso ad un insieme base aggiungendo tutte le pagine che collegano o sono collegate dalle pagine dell'insieme radice. L'insieme base dovrebbe contenere tutte le pagine che meglio si adattano alla query.
- Fase di propagazione dei pesi (Weight-propagation phase) à ap è il peso dell'authority e hp è il peso
dell'hub, entrambi inizializzati con valore 1. Ad ogni pagina dell'insieme base si assegnano questi due pesi. La regola di aggiornamento dei pesi è: ap è la somma di tutti i pesi degli hub delle pagine che si collegano a p mentre hp è la somma dei pesi di tutti i pesi delle authority che sono aggiunte a p. Si effettua la loro normalizzazione e si itera finché i due pesi non convergono. Alla fine vengono prodotti due tipi di ranking, uno per l'authority e l'altro per l'hub. HITS vs PageRank: pageRank può essere precalcolato, HITS deve essere calcolato al momento della query. Per questo HITS è molto costoso. Ci possono essere poi scelte diverse per quanto riguarda il modello formale: HITS usa hub e authority e usa un sottoinsieme del graph web. JAVASCRIPT Un documento HTML è composto per lo più da testo e immagini statiche che vengono visualizzate nella finestra del browser. Questa caratteristica dell'HTML rende impossibile l’interazione con l'utente.
- javascript è un linguaggio di programmazione.
CLIENT-SIDE JS (WINDOW, DOM)
Quando visualizziamo le nostre pagine web da casa ci sono dunque due computer che si parlano: il server e il client. JavaScript viene eseguito sul nostro computer di casa dal browser (è un linguaggio client side o lato client). Dire che JavaScript è un linguaggio lato client, significa che gli script avranno validità all'interno delle singole pagine web, e non da una pagina all'altra. Inoltre JavaScript è un linguaggio di scripting : questo significa che la sintassi JavaScript potete scriverla direttamente dentro la pagina HTML, senza bisogno di produrre alcun file compilato. Gestione eventi I programmi JavaScript lato client sono generalmente basati su eventi, i quali consentono di gestire il comportamento delle nostre applicazioni al verificarsi di una certa interazione dell'utente, oppure di rispondere alle sollecitazioni che vengono da altre applicazioni o dal sistema stesso. Tipi di eventi
- Onload/onunload à si attivano quando l’utente entra o esce dalla pagina, possono essere usati per gestire i cookies o per controllare il browser.
- Onchange à usato in combinazione con la convalida dei campi di input.
- Onmouseover/onmouseout à attivano una funzione quando l’utente sposta il mouse sull’elemento.
- Onmousedown/onmouseup/onclick à parti del click del mouse: il primo è il down, poi up, infine click. Propagazione degli eventi Distinguiamo 2 modi di propagazione degli eventi (ordine elementi quando si verifica un evento) nel HTML DOM:
1. Bubbling à Questa è la fase in cui l'evento risale l'albero del DOM partendo dall'elemento più interno fino a
raggiungere la radice, passando quindi dagli stessi nodi attraversati nella fase di cattura.
2. Capturing à In questa fase l'evento si propaga dalla radice del DOM verso l'elemento destinatario effettivo.
Intercettazione eventi Per intercettare gli eventi che vengono scatenati, utilizziamo il meccanismo degli handler. Possiamo definire come handler una funzione di callback che viene associata ad un certo evento. La funzione di callback prende sempre un parametro chiamato event. Si tratta di un oggetto che contiene alcune informazioni circa l'evento che è stato scatenato. HTML DINAMICO L’ HTML dinamico (DHTML) è una combinazione di CSS e JavaScript: CSS permette di posizionare gli oggetti in qualunque punto della pagina, specificandone i valori di altezza, larghezza, le coordinate e profondità. Con JavaScript questi parametri possono essere modificati in tempo reale, anche sulla base dell’input dell’utente o sul verificarsi di specifiche condizioni. Ogni programma è un processo in esecuzione nel processore. Ogni singolo processo può essere spezzato in sotto- processi indipendenti. Questi sotto processi prendono il nome di thread. Il linguaggio di JS è a single-thread. Es: Se un programma deve scaricare una pagina da un sito, prima di poter iniziare l'analisi della stessa dovrà attendere che sia finito lo scaricamento. Same Origin Policy : meccanismo di sicurezza che limita il modo in cui un documento o uno script caricato da un'origine può interagire con una risorsa di un'altra origine cioè regola le interazioni del codice javascript in una finestra. La policy è applicata alle richieste HTTP fatte con l’oggetto XMLHttpRequest, che permette al codice JS client-side di fare richieste HTTP al server Web da cui è stato caricato il documento, ma non consente agli script di comunicare con altri server web. Per richieste cross-origin bisogna attivare Cross-Origin Resource Sharing. WINDOWS L'interazione con il browser viene realizzata tramite un'API che, grazie ad alcuni oggetti, consente di acquisire informazioni sull'ambiente di esecuzione.
L'oggetto principale per l'interazione con il browser è window : esso rappresenta una finestra che contiene un documento HTML. L’oggetto window è quindi l’oggetto globale per il client-side JS, le cui proprietà sono collegate a:
• Timers à Il metodo setTimeout() crea un timer che eseguirà la funzione specificata come primo parametro dopo
un numero definito di millisecondi. Se intendiamo fermare l'esecuzione della funzione prima che venga eseguita dobbiamo utilizzare il metodo clearTimeout().
• History à è un oggetto che tiene traccia delle pagine visitate dall'utente all'interno di una finestra durante una
sessione di navigazione. Grazie a questo oggetto possiamo conoscere il numero di pagine visitate dall'utente accedendo alla proprietà length.
• Location à oggetto utile per controllare l'URL del documento caricato nella finestra corrente, permette di
sezionare gli elementi che compongono l'URL del documento, consentendoci di ricavare: il nome del server, la porta HTTP
• Navigator à fornisce informazioni che dovrebbero consentirci di identificare il browser ed il sistema operativo
su cui è in esecuzione.
• Browser informations à analisi del contenuto dell'intestazione HTTP inviata dal browser al server.
• Dialogs (finestra di dialogo) à permette a computer ed utente di comunicare fra loro tramite la visualizzazione
di informazioni. Fornisce tre metodi per visualizzare semplici finestre di dialogo per l’utente: alert, confirm, prompt.
• Document elements à Ogni elemento del documento HTML avente un id diventa proprietà di window.
• Comunicazione cross-window à La comunicazione tra windows è possibile solo tra finestre same-origin.
DOM
Una delle proprietà che non abbiamo preso in considerazione parlando dell'oggetto window è document. Essa rappresenta il documento HTML caricato nella finestra corrente e la struttura di questo oggetto, nota con il nome di DOM, Document Object Model , è definita seguendo le raccomandazioni standard del W3C. Ci sono tre parti differenti:
- Core DOM per tutti i tipi di documenti:
- XML DOM per documenti XML
- HTML DOM per documenti HTML Struttura HTML DOM la rappresentazione di un documento HTML DOM è organizzata in forma gerarchica con una struttura ad albero. Gli elementi HTML sono nodi, aventi attributi nodeName, nodeValue, nodeType. La radice di tale albero è l'oggetto document a cui sono collegati i diversi nodi corrispondenti agli elementi presenti nella pagina. È uno standard su come ottenere, modificare, raggiungere, eliminare elementi HTML. document.body à accede al corpo del documento document.documentElement à accede al documento completo. AJAX- CLIENT SIDE
- Sta per Asynchronous JavaScript And XML
- È un meccanismo di Javascript che attraverso l'interfacciamento con XML, può permettere ad un client di richiamare informazioni lato server in modo veloce. È una tecnica per creare pagine web veloci e dinamiche.
- L’oggetto principale di AJAX è XMLHttpRequest. Questo oggetto permette di effettuare la richiesta di una risorsa ad un server web in modo indipendente dal browser. Nella richiesta è possibile inviare informazioni sotto forma di variabili di tipo GET o di tipo POST. (Post è più sicuro).
- si dice che la richiesta è asincrona infatti con Ajax il browser non deve attendere la risposta del server, ma può invece eseguire altri script in attesa della risposta del server e gestire la risposta quando la risposta è pronta. Per ottenere la risposta da un server bisogna utilizzare la proprietà responseText (dati risposta in stringa) o RespondeXML. JQUERY CLIENT SIDE
- è una libreria sviluppata nel 2006
- ha lo scopo di rendere il codice Javascript più sintetico e di limitare al minimo l'estensione degli oggetti globali per ottenere la massima compatibilità con altre librerie.
TYPESCRIPT-CLIENT SIDE
Offre tutte le funzionalità di javascript e inoltre permette di definire il tipo. Il vantaggio principale in typescript è che può evidenziare comportamenti imprevisti nel codice, riducendo la possibilità di bug. Una volta installato typescript si scrive il codice e lo si salva in un file .ts, lo si compila utilizzando tsc e si ottiene il file .js risultante che dovrà essere incluso nell'APP web. FRAMEWORK – CLIENT SIDE
- Un framework è una libreria che offre opinioni su come viene costruito il software. Queste opinioni consentono la prevedibilità e l'omogeneità in un'applicazione.
- L'avvento dei moderni framework JavaScript ha reso molto più semplice la creazione di applicazioni altamente dinamiche e interattive.
- I framework fungono da scheletro per le app a singola pagina
- I vantaggi sono maggior efficienza, maggior sicurezza e minor costo. Esistono molti framework, ma attualmente i più importanti sono:
- Angular à Ha molte funzionalità che permettono di creare prodotti vari, da web a desktop a mobile.
- React à è alla base delle interfacce di FB e instagram ed è molto efficiente per applicazioni dinamiche e ad alto traffico.
- Ember à Miglior framework per applicazioni web.
- Vue à cerca di unire il meglio di Ember, React, Angular in un pacchetto veloce e semplice.
- Meteor à consente lo sviluppo rapido di applicazioni web e mobili end-to-end. NODE. JS – SERVER SIDE
- Node.js è un framework in grado di eseguire codice JavaScript sul server.
- È una piattaforma costruita sul Chrome JavaScript runtime (cioè gli script vengono eseguiti in tempo d’esecuzione).
- Node.js non è un linguaggio di programmazione: è uno strumento.
- è veloce nell'esecuzione delle attività (ricezione di richieste e invio di risposte) a causa della sua natura a thread singolo e asincrona. 4 caratteristiche:
- Usa un modello I/O non bloccante e ad aventi àvi è un singolo thread che gestisce una coda di eventi, ogni richiesta viene inserita in una coda di eventi, che viene processata in modo asincrono dal motore di esecuzione. Ciò significa che il processo di esecuzione non viene bloccato durante l’elaborazione di una singola richiesta, ma può continuare ad eseguire altre operazioni in parallelo.
- Inoltre utilizza il concetto di “ callback ” per gestire il completamento delle operazioni asincrone. Una callback è una funzione che viene eseguita una volta che una determinata operazione è stata completata.
- Node.js offre un sistema modulare semplice, viene fornito con una serie di moduli principali che implementano funzionalità di base. Si basa sulla modularità per gestire le diverse parti di un’applicazione. I moduli sono unità di codice autonome che possono essere riutilizzate all’interno di differenti applicazioni. Inoltre, la community di sviluppatori di Node.js ha creato una ricca libreria di moduli pre-costruiti, che consentono di implementare rapidamente funzionalità comuni come il parsing delle richieste HTTP o l’accesso ai database. In questo modo, lo sviluppo di applicazioni con Node.js diventa più rapido e meno ripetitivo. Node Package Manager ( NPM ) è una collezione online di moduli Node pronti per l’uso. Tra i principali moduli di Node troviamo: modulo globals, modulo http, modulo url, modulo path, modulo FS - File System. Uno dei principi fondamentali utilizzati in diversi moduli nativi sono gli Event Emitter. Gli event emitters attivano eventi e includono la capacità di gestire tali eventi quando vengono attivati.
- Sequenziamento della logica asincrona à Il concetto di sequenziamento di gruppi di attività asincrone è chiamato flow control, di cui distinguiamo due tipi:
- serial à attività per forza in sequenza
- parallel à ordine non importante di attività che contribuiscono allo stesso risultato SERVICE ORIENTED ARCHITECTURES (SOA) La tecnologia (middleware) a servizi è una tecnologia per l’integrazione di applicazioni distribuite volta a risolvere problemi di interoperabilità. I Web Services rappresentano la tecnologia “dominante”. Un servizio ha l’obiettivo di incapsulare una ben precisa funzionalità, per renderla disponibile e accessibile come servizio software al client sul web, ciascun servizio può essere usato per costruire diverse applicazioni e processi. SOA è quindi uno stile architetturale per la costruzione di una molteplicità di sistemi o applicazioni sulla base della composizione di un insieme di servizi. Un servizio ha 3 fasi di vita:
- Creazione à il servizio viene pubblicato in una directory o con messaggi pubblicitari.
- Procurement à il provider e il consumer stabiliscono un contratto di fornitura dei servizi
- Enactment à il servizio è utilizzato I principi generali su cui si basa SOA sono:
• Gartner à stile di elaborazione multilivello che aiuta le organizzazioni a condividere logica i dati tra più
applicazioni e modalità di utilizzo.
• IBM à architettura all'interno della quale tutte le funzioni sono definite come servizi indipendenti con
interfacce richiamabili ben definite per formare business process. Metto insieme servizi per creare app.
• OASI à paradigma per organizzare e utilizzare capacità distribuite che possono essere sotto il controllo di
diversi domini di proprietà. Crea standard. SERVIZI RESTFULL
Definito per la prima volta nel 2000, REST (Representational State Transfer) definisce un insieme di principi
architetturali per la progettazione di un sistema. Rappresenta uno stile architetturale, ma non è un'architettura né uno standard, ma un insieme di linee guida per la realizzazione di una "architettura di sistema". Un'API è un meccanismo che consente a un'applicazione o a un servizio di accedere ad una risorsa all'interno di un'altra applicazione o un altro servizio. L'applicazione o il servizio che effettua l'accesso si chiama client e l'applicazione o il servizio che contiene la risorsa si chiama server. Le API REST possono però essere sviluppate utilizzando praticamente qualsiasi linguaggio di programmazione e supportano una varietà di formati di dati. L'unico requisito è che si allineino ai seguenti sei principi di progettazione REST - noti anche come vincoli architetturali:
1. Identificazione delle risorse à Le risorse sono gli elementi fondamentali su cui si basano i Web Service RESTful.
Per risorsa si intende un qualsiasi elemento oggetto di elaborazione. Il principio che stiamo analizzando stabilisce che ciascuna risorsa deve essere identificata univocamente. Essendo in ambito Web, il meccanismo più naturale per individuare una risorsa è dato dal concetto di URI.
- Utilizzo esplicito dei metodi http à dopo aver individuato una risorsa abbiamo bisogno di un meccanismo per indicare quali operazioni effettuare su di esse. Il principio dell'uso esplicito dei metodi HTTP ci indica di sfruttare i metodi (o verbi) predefiniti di questo protocollo, e cioè GET, POST, PUT e DELETE. 3. Risorse autodescrittive à Il tipo di rappresentazione inviata dal Web Service al client è indicato nella stessa risposta HTTP tramite un tipo MIME.
- Collegamenti tra risorse à le risorse devono essere in relazione tramite link ipertestuali.
- Comunicazione senza stato à le interazioni tra client e server devono essere senza stato, cioè ciascuna richiesta non ha alcuna relazione con le richieste precedenti e successive. Le API REST comunicano tramite richieste HTTP per eseguire funzioni di database standard come la creazione, la lettura, l'aggiornamento all'interno di una risorsa.
• Integrazione continua (CI) à un server CI controlla che il codice aggiunto si integri con il codice precedente e lo
fa tramite una serie di test automatizzati
• Build Pipeline and rilascio continuo (CD) à la build viene divisa in fasi e per ognuna di questa vogliamo un
feedback sulla prontezza di produzione di ogni checkin e questi checkin vanno trattati come candidati al rilascio
• One Repository per Microservice à il codice sorgente di ogni microservizio viene archiviato in una repository.
CLIENT/SERVER
L’architettura di rete client/server si basa sul concetto di server che forniscono servizi e su un insieme di client che richiedono tali servizi. Oggi esistono diverse varietà di client/server, ma hanno anche diverse caratteristiche comuni come un database di sicurezza centralizzato , che controlla l’accesso alle risorse condivise sul server. Il server contiene un elenco di nomi utente e password e un utente può accedere alla rete solo se fornisce un nome utente e una password validi al server. Dopo aver effettuato l’accesso, gli utenti possono accedere solo alle risorse a cui è stata concessa l’autorizzazione dall’amministratore di rete. Le funzioni ampiamente utilizzate come lo scambio di email, l’accesso al Web e l’accesso al database sono basate sull’architettura client-server. PEER TO PEER (P2P) Nell’architettura peer-to-peer, le attività sono partizionati tra peer e si dice che questi peer formino una rete peer- to-peer. I nodi hanno lo stesso potenziale e gli stessi privilegi. I peer dunque mettono a disposizione degli altri partecipanti alla rete una parte delle loro risorse. In una rete peer-to-peer (p2p), le risorse sono condivise tra peer senza alcun coordinamento centrale da parte di un server. I pari agiscono sia come fornitori che come consumatori di risorse. Sfruttare le risorse inattive per fare qualcosa di utile è il concetto chiave del paradigma peer to peer. Non esiste uno schema di sicurezza centralizzato e gli utenti finali stessi possono controllare l’accesso alle risorse. Distinguiamo tra 3 tipi di sistemi peer-to-peer:
- Sistemi peer-to-peer in cui ogni peer è posseduto da un utente, che vi interagisce per mezzo di una interfaccia utente.
- Reti peer-to-peer in cui peer autonomi gestiscono risorse, sensori e attuatori per fornire servizi agli utenti.
- Sistemi peer-to-peer ibridi in cui alcuni peer sono posseduti da utenti, mentre altri sono autonomi. Quando un peer riceve un input la sua struttura interna lo mappa in un output e questo mapping potrebbe richiedere la cooperazione di altri peer(pochi) scambiano informazione per trovare e consumare le risorse. Quindi la reazione di un peer ad un input dell’ambiente dipende dalla sua struttura interna. Variabili di stato Quando si progetta un sistema peer to peer è sempre bene definire le variabili di stato. Le variabili di stato servono per caratterizzare il peer in termini di risorse. Ogni peer può condividere risorse e possono a loro volta usarle: un peer che consuma molte più risorse di quelle che condivide viene chiamato free riders. Un esempio di variabile di stato è lifetime: tempo in cui un peer sta online connesso alla rete degli altri peer. Le risorse possono essere:
- replicabili à possono essere spostate e copiate da un peer ad un altro (file).
- consumabili à si ottengono contrattando. Possono consumarsi ma anche essere ripristinate (servizi). I servizi possono essere:
- distribuiti à per ottenere il risultato del servizio servono più peer che collaborano tra loro.
- locali à ogni peer è in grado di fornire l’intero servizio. Un servizio può essere offerto da più nodi. Problemi di efficienza ed efficacia Efficacia è la capacità di raggiungere un obbiettivo. Efficienza è raggiungere gli obbiettivi utilizzando il minor numero di risorse possibile e il più velocemente possibile.
Nella pratica questo significa che i sistemi p2p devono essere scalabili (la qualità con cui si raggiunge l’obbiettivo deve essere costante indipendentemente dal numero di nodi). Più nodi ci sono più il sistema p2p funziona bene. Un altro aspetto importante è il bootstrapping ovvero il server per collegarsi alla rete crea connessioni ipotetiche, dove un peer prova a contattare altri peer per vedere se sono disponibili. Problemi di sicurezza Il boom dei sistemi p2p è stato nel 2001, adesso le statistiche più recenti dicono che il traffico p2p è ridotto a meno del 10% dell’intero traffico in internet. Molti attacchi ai sistemi p2p che riguardano la sicurezza sono:
- attacchi passivi à intercettano le informazioni senza alterare le informazioni.
- attacchi attivi à alterano le informazioni (spoofing, man in the middle, replay ecc.).
Un’altra problematica relativa alla sicurezza è la fiducia che si ha negli altri peer (trust management). Problemi di progettazione dei sistemi P2P La topologia (struttura del grafo) è una delle problematiche dei sistemi P2P perché influenzano scalabilità, sicurezza e tolleranza agli errori. Per questo ci si concentra sulla progettazione di schemi Overlay cioè regole per gestire e costruire la rete. SCHEMI DI OVERLAY Gli schemi di overlay sono regole per gestire e creare reti P2P, negli ultimi anni si stanno cercando di sviluppare schemi di overlay robusti per cercare di contrastare problemi relativi alla progettazione di sistemi P2P. Un ruolo importante nella scelta dello schema overlay lo ha l’ information placement , ovvero dove si trova. Vi sono 3 strategie possibili:
- informazioni se in un server centrale
- informazioni pubblicate da altri peer
- informazioni salvate localmente e non pubblicate. Queste 3 strategie danno luogo a 3 strategie possibili di schemi overlay: 1. Hybrid Model (HM) à^ Si tratta di uno o più server centrali a cui si connettono i peer per pubblicare informazioni riguardo alle risorse che condividono. Ogni server centrale per ogni risorsa mantiene una lista dei proprietari. Quando un peer fa una richiesta la directory centrale fornisce una lista dei peer che soddisfano la richiesta. Esempi: Soulseek, Napster, eDonkey (implementato da eMule) and BitTorrent. 2. Decentralized Unstructured Model (DUM) à In questo modello non ci sono server centrali, ogni peer propaga le richieste direttamente ai peer connessi usando una qualche strategia, ad esempio inondando la rete di messaggi (GNutella). Un nodo che vuole una risorsa invia un’interrogazione in rete, il messaggio lo invia ai nodi vicini creando connessioni. Tramite queste connessioni il messaggio viene propagato. Per migliorare la scalabilità si può aggiungere un’identità unica al messaggio, in questo modo si possono eliminare i duplicati dei messaggi evitando loop e aggiungendo un contatore TTL (time to live) si può evitare che il messaggio invada la rete. (Gnutella, Mute, Freenet) 3. Decentralized Structured Model (DSM) à si basa sul fatto che ogni peer possa inoltrare in modo efficiente una ricerca al peer che ha la risorsa desiderata. Si utilizza un pattern più strutturato chiamato distributed hash table (DHT) dove:
- ogni risorsa è identificata da una coppia <chiave,valore> associata alla risorsa.
- Ogni peer ha un ID generato casualmente quando il peer viene attivato. Tale identificatore permette di ordinare i peer in base appunto all’identificatore. Ciascun peer conosce un numero limitato di altri peer (logn).
- Tutti i nodi hanno una tabella di dimensioni log 2 n ed esiste una formula che a partire dall’ID del peer permette di sapere quale dei peer online deve stare nella tabella. Quando un peer vuole far sapere che possiede una certa risorsa, guarda nella tabella dei nodi che conosce e cerca quello il cui numero più vicino possibile (ma <) al numero della risorsa e gli invia il descrittore della risorsa. Il nodo farà la stessa cosa, guarda se tra i nodi vicini vi è un nodo che ha un identificatore che si avvicina ancora di più. (Dks, Kademlia).
BITTORRENT
Attualmente i sistemi basati su HM più diffusi sono quelli basati sul protocollo BitTorrent, che si concentra sull'elevata velocità di trasferimento dei dati piuttosto che sulle capacità di ricerca. La specifica di BitTorrent è la nozione di swarms che definisce un gruppo di peer che condividono un torrent (insieme di repliche dello stesso file). In ogni swarms, i peer che hanno il file completo sono chiamati seeders, mentre i peer che hanno solo parti del file e stanno cercando di scaricare le altre parti sono chiamate leechers. Es: consideriamo un gruppo di peer tutti interessati a uno stesso contenuto, i peer collaborano fra loro per ottenerlo. Ci saranno alcuni peer che possiedono già il file e lo condividono, altri peer andranno a scaricarlo. L’obbiettivo è che tutti i nodi interessati a quel file abbia l’intero file. Questo gruppo di nodi prende il nome di torrent. I torrent sono indipendenti. Un peer può far parte di più torrent. Un peer che vuole condividere un contenuto crea un file .torrent (file statico che contiene le metainfo) e lo pubblica su uno dei web server torrent. Il web server però non è direttamente l’indice di chi possiede il file, ma esiste una seconda categoria di server detta tracker che comunica con il web server. il tracker ha il compito di tenere traccia di tutti i fornitori dei file. Dal momento che i tracker non partecipano al torrent, il modello è HM. Ogni peer mantiene un elenco di altri peer di cui è a conoscenza (peer set). Un peer può inviare dati solo a un sottoinsieme del proprio peer set, chiamiamo questo sottoinsieme peer set attivo. I file trasferiti utilizzando BitTorrent sono divisi in pezzi di 256 KB e ogni pezzo è diviso in blocchi di 16 KB. Solo i pezzi completi possono essere condivisi da un peer. BitTorrent crittografa sia l'intestazione che il payload per ogni pezzo trasferito. L'obiettivo è quello di offuscare il flusso quanto basta in modo tale da non essere rilevabile. Per la selezione dei pezzi vengono usati 4 algoritmi:
• Rarest first algorithm (RFA) à è la strategia di selezione dei pezzi utilizzata in BitTorrent. Ogni peer mantiene
l'elenco del numero di copie di ciascun pezzo nel proprio set di peer e usa queste informazioni per definire un set di peer più rari. I pezzi più rari sono quindi i pezzi che hanno il minor numero di coppie nel peer set. Ogni peer seleziona il pezzo sul successivo da scaricare a caso nel suo set di pezzi più rari, quando il pezzo è stato caricato, il peer invia un messaggio HAVE ai peer nel suo set di peer attivo.
• Choke Algorithm (CA) à CA è la strategia di selezione usata in bitTorrent, introdotta per garantire un
ragionevole livello di reciprocità di upload e download. Interested significa sempre interessato a un pari locale e choked significa sempre soffocato dal pari locale. Al massimo quattro peers possono essere interessati a un peer contemporaneamente e al massimo quattro lacheers possono essere unchoked da un peer contemporaneamente.
- I seeders à ogni 10 secondi il seed mette i peer, interessati a ottenere frammenti e con maggiore banda
disponibile per il download, in una classifica sulla base del loro download. Questi sono i peer più veloci a scaricare il frammento. i primi tre peer più veloci vengono serviti. Ogni 10 secondi viene aggiornata la classifica. Ogni 30 secondi viene servito anche un quarto nodo scelto a caso (questo perché altrimenti i nodi lenti aspetterebbero in eterno).
- I leechers à non sceglie chi servire sulla base della velocità con cui il destinatario è in grado di scaricare, ma
sceglie in base al tempo con cui ha servito i nodi. Es: il nodo che è stato servito più di recente viene messo su in classifica. Per 2 round consecutivi sceglie i prime 3 nodi mentre gli altri aspettano, al 3 round si aggiunge anche un nodo scelto casualmente. GNUTELLA Il protocollo Gnutella è basato su DUM: un nodo Gnutella (servent) si connette al network stabilendo una connessione con un altro nodo. Da questa prima connessione il peer ottiene delle inforomazioni su altri nodi che fanno parte della rete. In generale, l’acquisizione dell’indirizzo di un altro peer non è parte del protocollo. Alcuni messaggi specifici di Gnutella hanno scopi di group membership (Ping e Pong), richiesta/risposta (Query e QueryHit), trasferimento di file (Push, che funziona anche attraverso firewall).
Per evitare la congestione del network, i Ping e Query hanno sempre un TTL , ossia il numero massimo di inoltri prima di scomparire. MUTE Il network Mute (basato su DUM) utilizza gli Utility Counters (UC, contatori che vengono modificati ogni volta che il messaggio viene propagato) al posto dei TTL. Il nodo1 invia la richiesta e l’Utility Counter è a 0, il messaggio arriva al nodo2 ma non ho la risorsa richiesta quindi aumenta l’UC di 3 unità e propaga il messaggio a 3 altri nodi. Se tra questi nodi uno possiede una risorsa allora aumenta di una unità l’UC ma può comunque continuare a propagare la richiesta (a patto che l’UC non abbia raggiunto il valore massimo). FREENET Freenet, protocollo basato su DUM, garantisce:
- anonimato fra i nodi à un nodo1 invia una query non dichiara chi l’ha generata. Un nodo2 riceve la query vede
arrivare la query ma non sa chi è stato a richiederla. Nodo2 propaga la query al nodo che più probabilmente riceve il file. Non ci sarà mai una connessione diretta fra i nodi.
- alta disponibilità
- efficienza
- scalabilità A ciascun file da condividere viene assegnato un identificatore univoco globale ( GUID ) indipendente dalla posizione. I GUID di Freenet vengono calcolati e generati eseguendo l'hashing (con SHA-1) del contenuto del file da archiviare. - Per aggiungere un nuovo file, un utente invia alla rete un messaggio di inserimento contenente il file e il GUID assegnato. Freenet tenta di raggruppare file con chiavi simili su un singolo nodo. DKS (N,k,f)
- Sta per Distributed K-ary Search
- è probabilmente il protocollo DSM più famoso, include Chord e Pastry.
- Ogni istanza di DKS è una rete overlay totalmente decentralizzata, caratterizzata da tre parametri: § N è il massimo numero di nodi che possono essere nella rete § k è la search-arity (lo spazio delle chiavi è potenza di k) § f è il grado di fault tolerance quanto il sistema è resistente agli errori CHORD Chord è il protocollo di DKS(N,2,f). La struttura semplice del grafo Chord è: Ogni nodo ha un suo identificatore specifico. Ogni nodo instaura 2 connessioni: con il nodo successore e predecessoore. Supponiamo che il nodo N1 abbia un file da condividere: il descrittore del file (identificato da una chiave k2) viene propagato al nodo che ha identificatore più simile al descrittore del file. N1 pubblica k2, deve decidere se inviare k2 a N15 o a N3 e sceglie N3 perché l’identificatore è più simile. N3 riceve il descrittore, vede che la chiave è k2 e decide se conviene propagarlo o no. 2 problemi di questa strategia:
- se la rete è molto grande significa che questi processi richiederebbero molto tempo.
- Difficoltà nel mantenere le finger table aggiorante. KADEMLIA
- Kademlia è un protocollo P2P basato su DSM: specifica la struttura della rete, le regole di comunicazione tra i nodi e il modo in cui scambiare informazioni.
- È basato sulla tecnologia Distributed Hash Table (DHT), dove ogni risorsa pubblicata è associata a una coppia <key, value>
- Strutture dati dei nodi : Ogni nodo ha 160 strutture dati chiamate k-buckets. Un k-bucket è una lista di massimo k tuple caratterizzate da <IP address, UDP port, node ID>.
Le cose vanno diversamente con le cripto. Le transazioni connettono direttamente mittente e destinatario senza dover avere a che fare con alcuna autorità centrale. Nessun altro avrà accesso ai tuoi fondi e nessuno può dirti che servizi puoi usare. Questo è possibile grazie alla tecnologia della blockchain su cui operano le criptovalute. BLOCKCHAIN In generale possiamo dire che una blockchain è un database di transazioni che viene aggiornato e condiviso tra molti computer in una rete. Ogni volta viene aggiunta una nuova serie di transazioni, chiamata "blocco", da cui il nome blockchain. Nello specifico una blockchain è un tipo particolare di registro distribuito (distributed ledger) che memorizza tutte le transazioni effettuate dagli utenti. Un distributed ledger è un database replicato su più nodi, che hanno copie identiche e si aggiornano autonomamente, senza autorità centrali che controllano i nodi. Una blockchain è un sistema che funziona come un’autorità certificata, non centralizzata, sempre online, che preserva uno stato condiviso, esegue scambi, e fornisce computazioni sicure. 4 caratteristiche di blockchain è che:
- i dati conservati sono relativi a transazioni
- i dati sono raggruppati a blocchi,
- questi blocchi formano una linked list inalterabile in continua crescita Esiste la possibilità di avere 2 tipi di blockchain:
• Public (permissionless) à in cui ognuno può essere un utente e partecipare al processo di consenso che evolve
la blockchain senza permessi speciali.
• Private (permissioned) à operata da un’entità riconosciuta e regole per accedere ai dati.
Connessione tra full nodes Esiste una rete P2P dove ogni nodo memorizza una copia dell'intera blockchain, al fine di validare le transazioni e, possibilmente, contribuire alla crescita della blockchain stessa. Quest'ultimo è un processo competitivo, in cui ogni nodo (indicato come minatore) cerca di aggiungere le transazioni più recenti alla blockchain (come un nuovo blocco), eseguendo un algoritmo il cui risultato numerico deve superare una determinata soglia, al fine di essere accettato. Il vincitore, ovvero il miner che risolve per primo la sfida, diffonde il blocco all'interno della rete P2P e tutti gli altri nodi lo aggiungono alla loro copia blockchain locale. Distinguiamo tra coin e token
- Un coin è l’unità di valuta virtuale della blockchain utilizzabile per le transazioni
- un token è un’unità secondaria che risiede nella blockchain Transazioni Le transazioni descrivono pagamenti per beni e servizi, fatte attraverso coins. Le parti coinvolte sono identificabili tramite le loro chiavi pubbliche. Ogni pagamento deve essere digitalmente firmato da entrambe le parti. (una volta accettata deve andare in qualche blocco ed essere accettata, solo a quel punto è valida). Modelli di consenso Per consenso, intendiamo dire che è stato raggiunto un accordo generale. Il termine meccanismo di consenso si riferisce all'insieme completo di protocolli, incentivi e idee che consente a una rete di nodi di acconsentire sullo stato di una blockchain. Un aspetto fondamentale di una blockchain è il modo in cui si determina quale utente pubblica il prossimo blocco. Questo problema viene risolto implementando uno dei possibili modelli di consenso. Proof of work (POW) e proof of stake (POS) sono i due modelli di consenso più diffusi per elaborare le transazioni di criptovaluta. Sono progettati per garantire agli utenti che i pagamenti andranno a buon fine come previsto. La criptovaluta proof-of-work più consolidata è Bitcoin, mentre l'asset proof-of-stake preminente è Ethereum. La principale differenza tra POW e POS è che POS si basa sullo staking , mentre la POW si basa sul mining. Questi metodi aggiungono nuovi "blocchi" di transazioni.
BITCOIN
Bitcoin è stata la prima criptovaluta, basata sulla tecnologia blockchain. È la prima blockchain creata nel 2009 da un anonimo inventore, noto con lo pseudonimo di Satoshi Nakamoto. Bitcoin usa la tecnologia peer-to-peer per non operare con alcuna autorità centrale o con le banche; la gestione delle transazioni e l'emissione di bitcoin viene effettuata collettivamente dalla rete. Bitcoin è open-source; la sua progettazione è pubblica, nessuno possiede o controlla Bitcoin e ognuno può prendere parte al progetto. Costruzione di blocchi in Bitcoin Nel Bitcoin, la moneta virtuale è generata in un processo decentralizzato e competitivo ( mining ): I miners sono full nodes che processano transazioni e mettono in sicurezza il network utilizzando hardware specializzati. Ricevono Bitcoin in cambio. Transazione Bitcoin Una transazione avviene quindi così:
- Il destinatario invia la sua chiave pubblica al pagante
- Il pagante crea la transazione.
- Il pagante firma la transazione con la sua chiave privata, per provare che gli appartiene.
- La transazione viene inviata al network di full node, che verificano e aggiungono la transazione alla blockchain se questa è valida. SMART CONTRACT Il concetto di smart contract fu introdotto nel 1994: esso rappresenta un programma salvato nella blockchain, creato con transazioni speciali e fornito di un indirizzo unico. Può inoltre interagire con altri smart contracts. (controlla se l'operazione fra due parti è valida). Esso espone un’interfaccia, può ritornare dati o salvarli, ha interazione basata sullo scambio di messaggi, che possono rappresentare eventi di interesse per il contratto. Le interazioni con gli smart contract sono salvate nella blockchain come transazioni, e possono quindi essere tracciate. (lo stato della smart contract dipende da tutte transazioni fatte). Ne citiamo 3:
- DApp (Decentralized Application)
- ICO (Initial Coin Offering)
- DAO (Decentralized Anonymous Organization) Concorrenza Lo smart contract può essere utilizzato in modo concorrente da più utenti e quindi si presentano gli stessi problemi che si hanno nei sistemi a memoria condivisa. I contratti devono essere considerati come strutture dati in una memoria condivisa. La memoria condivisa è costituita dalla blockchain e i contratti sono contenuti nella blockchain e tanti utenti in modo concorrente possono interagire. ETHEREUM Ethereum è una tecnologia per creare app e organizzazioni, detenere risorse, effettuare transazioni e comunicare senza essere controllati da un'autorità centrale. Non devi comunicare tutti i tuoi dati personali per usare Ethereum, sei tu a mantenere il controllo sui tuoi dati e su cosa è condiviso. Ethereum ha una criptovaluta nativa, detta ether (ETH). È puramente digitale e puoi inviarla a chiunque, in tutto il mondo, istantaneamente. L'offerta di ETH non è controllata da alcun governo o azienda; è decentralizzata e completamente trasparente. Cosa può fare Ethereum
- Attività bancarie per tutti à Tutto ciò che ti serve per accedere a Ethereum è una connessione internet.
- Un internet più privato à Non devi fornire tutte le tue informazioni personali per usare un'app Ethereum. Ethereum crea un'economia basata sul valore, non sulla sorveglianza.
- Una rete peer-to-peer à Ethereum ti permette di spostare denaro, o stringere accordi, direttamente con altri. Non è necessario ricorrere a intermediari.