1. Architetture e linguaggi per
Runtime Software Adaptation:
Computational REST ed Erlang
Alessandro Sivieri
Dipartimento di Elettronica e Informazione
Politecnico di Milano
20 Dicembre 2010
2. Scenario
Architetture per sistemi adattabili
Linguaggi per sistemi adattabili
Computational REST ed Erlang
Conclusioni
Sommario
1 Scenario
2 Architetture per sistemi adattabili
Panoramica
REpresentational State Transfer
Computational REST
3 Linguaggi per sistemi adattabili
Panoramica
Erlang
4 Computational REST ed Erlang
Motivazioni del progetto
Struttura del framework
Demo
Sicurezza
5 Conclusioni
Alessandro Sivieri Computational REST ed Erlang 2/17
3. Scenario
Architetture per sistemi adattabili
Linguaggi per sistemi adattabili
Computational REST ed Erlang
Conclusioni
Lo scenario
Requisiti delle applicazioni odierne:
aggiornamento delle funzionalità senza interrompere i
servizi offerti
scalabilità
dati in movimento tra dispositivi
Alessandro Sivieri Computational REST ed Erlang 3/17
4. Scenario
Architetture per sistemi adattabili Panoramica
Linguaggi per sistemi adattabili REpresentational State Transfer
Computational REST ed Erlang Computational REST
Conclusioni
Panoramica delle architetture
Alcune delle architetture esistenti in grado di supportare
modifiche a runtime [R.N. Taylor et al., 2008]:
Publish-subscribe
Map-reduce
Service-Oriented Architectures
Peer-to-peer
REST
Computational REST
Alessandro Sivieri Computational REST ed Erlang 4/17
5. Scenario
Architetture per sistemi adattabili Panoramica
Linguaggi per sistemi adattabili REpresentational State Transfer
Computational REST ed Erlang Computational REST
Conclusioni
Dal contenuto ai dati
REpresentational State Transfer: indipendenza dei componenti
e scalabilità:
comunicazione stateless
caching
interfacce generiche di comunicazione
(opzionale) code-on-demand
Alessandro Sivieri Computational REST ed Erlang 5/17
6. Scenario
Architetture per sistemi adattabili Panoramica
Linguaggi per sistemi adattabili REpresentational State Transfer
Computational REST ed Erlang Computational REST
Conclusioni
Dai dati alle computazioni
Computational REST [J.R. Erenkrantz, 2009]:
potenziare REST: non è sufficiente lo scambio di dati,
questi devono essere interpretati correttamente
scambiare computazioni: i contenuti diventano “effetti
collaterali” di queste
mantenere le linee guida per mantenere la scalabilità
Alessandro Sivieri Computational REST ed Erlang 6/17
7. Scenario
Architetture per sistemi adattabili Panoramica
Linguaggi per sistemi adattabili REpresentational State Transfer
Computational REST ed Erlang Computational REST
Conclusioni
Computational REST
Meccanismi
I peer sulla Rete scambiano continuazioni o, in alternativa,
chiusure:
una continuazione è uno snapshot dello stato di
esecuzione di una computazione, che può essere
interrotta e ripresa in un secondo momento
una chiusura è una funzione che contiene le variabili libere
presenti nell’ambiente in cui essa è definita, e che restano
accessibili per tutta la sua durata
Alessandro Sivieri Computational REST ed Erlang 7/17
8. Scenario
Architetture per sistemi adattabili Panoramica
Linguaggi per sistemi adattabili REpresentational State Transfer
Computational REST ed Erlang Computational REST
Conclusioni
Computational REST
Operazioni
Solo due operazioni di base: spawn e remote:
spawn installa un nuovo servizio e lo rende disponibile
remote installa un nuovo servizio e lo esegue solo una
volta
CREST mantiene la compatibilità con il Web di oggi.
Alessandro Sivieri Computational REST ed Erlang 8/17
9. Scenario
Architetture per sistemi adattabili
Panoramica
Linguaggi per sistemi adattabili
Erlang
Computational REST ed Erlang
Conclusioni
Panoramica dei linguaggi
Alcuni dei linguaggi esistenti in grado di supportare modifiche a
runtime:
Approccio orientato agli oggetti: Java e C#
Approccio funzionale: Scala, Erlang, Dynamic ML
Dynamic Aspect-Oriented Programming
Alessandro Sivieri Computational REST ed Erlang 9/17
10. Scenario
Architetture per sistemi adattabili
Panoramica
Linguaggi per sistemi adattabili
Erlang
Computational REST ed Erlang
Conclusioni
Erlang
Linguaggio funzionale orientato alla concorrenza
Distribuzione dei processi
Fault tolerance
Caricamento dinamico del codice
Open Telecom Platform
Alessandro Sivieri Computational REST ed Erlang 10/17
11. Scenario
Motivazioni del progetto
Architetture per sistemi adattabili
Struttura del framework
Linguaggi per sistemi adattabili
Demo
Computational REST ed Erlang
Sicurezza
Conclusioni
Da Scheme ad Erlang
CREST-Scheme
+ supporto alle continuazioni
+ sandbox e security manager della JVM
− core standard, librerie esterne per la maggior parte delle
funzionalità
Alessandro Sivieri Computational REST ed Erlang 11/17
12. Scenario
Motivazioni del progetto
Architetture per sistemi adattabili
Struttura del framework
Linguaggi per sistemi adattabili
Demo
Computational REST ed Erlang
Sicurezza
Conclusioni
Da Scheme ad Erlang
CREST-Erlang
+ supporto ai processi leggeri (con mailbox)
+ caricamento dinamico di moduli
− mancato supporto alle continuazioni
− problemi di sicurezza
Alessandro Sivieri Computational REST ed Erlang 11/17
13. Scenario
Motivazioni del progetto
Architetture per sistemi adattabili
Struttura del framework
Linguaggi per sistemi adattabili
Demo
Computational REST ed Erlang
Sicurezza
Conclusioni
CREST-Erlang
I vincoli CREST nel nuovo framework
Invio delle chiusure tra nodi, utilizzando HTTP POST
Supporto allo stato interno di una computazione
Composizione di servizi
Alessandro Sivieri Computational REST ed Erlang 12/17
14. Scenario
Motivazioni del progetto
Architetture per sistemi adattabili
Struttura del framework
Linguaggi per sistemi adattabili
Demo
Computational REST ed Erlang
Sicurezza
Conclusioni
CREST-Erlang
Struttura del framework
Incapsulamento del protocollo
Alessandro Sivieri Computational REST ed Erlang 13/17
15. Scenario
Motivazioni del progetto
Architetture per sistemi adattabili
Struttura del framework
Linguaggi per sistemi adattabili
Demo
Computational REST ed Erlang
Sicurezza
Conclusioni
CREST-Erlang
Struttura del framework
Albero di supervisione
Alessandro Sivieri Computational REST ed Erlang 13/17
16. Scenario
Motivazioni del progetto
Architetture per sistemi adattabili
Struttura del framework
Linguaggi per sistemi adattabili
Demo
Computational REST ed Erlang
Sicurezza
Conclusioni
CREST-Erlang
Demo delle funzionalità del framework
Scenario della demo
Alessandro Sivieri Computational REST ed Erlang 14/17
17. Scenario
Motivazioni del progetto
Architetture per sistemi adattabili
Struttura del framework
Linguaggi per sistemi adattabili
Demo
Computational REST ed Erlang
Sicurezza
Conclusioni
Il problema della sicurezza
Sicurezza del codice rispetto all’host in cui viene eseguito:
HTTPS con mutua autenticazione per spawn e remote
Sicurezza dell’host rispetto al codice da eseguire:
analisi di progetti esistenti per sandboxing e bytecode
inspection
Alessandro Sivieri Computational REST ed Erlang 15/17
18. Scenario
Architetture per sistemi adattabili
Linguaggi per sistemi adattabili
Computational REST ed Erlang
Conclusioni
Conclusioni
Erlang
+ Funzionalità per la distribuzione dei processi e del carico di
lavoro
+ Caricamento dinamico del codice
− Scarsa attenzione alla sicurezza
− Limitazioni del meccanismo di hotswap
Alessandro Sivieri Computational REST ed Erlang 16/17
19. Scenario
Architetture per sistemi adattabili
Linguaggi per sistemi adattabili
Computational REST ed Erlang
Conclusioni
Conclusioni
Computational REST
+ Gestione dei cambiamenti del Web di oggi
+ Supporto alla scalabilità ed al dinamismo
− Utilizzo del protocollo HTTP per trasmettere codice
− I problemi di sicurezza possono essere importanti
Alessandro Sivieri Computational REST ed Erlang 16/17
20. Appendice Bibliografia
Bibliografia
J. Armstrong.
Programming Erlang: Software for a Concurrent World.
Pragmatic Bookshelf, 2007.
J.R. Erenkrantz.
Computational REST: a new model for decentralized,
Internet-scale applications.
California State University at Long Beach, 2009.
R.N. Taylor, P. Oreizy and N. Medvidovic.
Runtime software adaptation: framework, approaches, and styles.
ICSE Companion 2008, 899–910, 2008.
J. Zachary.
Protecting mobile code in the world.
Internet Computing, IEEE, 7(2):78–82, 2003.
Alessandro Sivieri Computational REST ed Erlang 17/17