In questa sessione verrà presentato il progetto open source Simple Cloud API per l'accesso semplificato ai servizi di cloud computing. Il progetto, nato dalla volontà di Zend Technologies, IBM e Microsoft, offre un API semplificata per l'accesso a differenti servizi di cloud computing. I servizi attualmente implementati sono di File Storage, Document Storage e Simple Queue sui sistemi cloud di Amazon, Windows Azure e Nirvanix (in futuro anche Rackspace e GoGrid). Nella presentazione, dopo una breve introduzione ai servizi di cloud computing ed alla loro rilevanza dal punto di vista dello sviluppo delle applicazioni web, verranno presentati degli esempi in PHP per l'utilizzo del Simple Cloud API
Simple Cloud API: accesso semplificato al cloud computing
1. Simple Cloud API: accesso
semplificato al cloud computing
Enrico Zimuel (enrico@zend.com)
Zend Technologies, the PHP company
2. Mi presento
• Senior Consultant e Architect presso
Zend Technologies
• Software Engineer dal 1996: C/C++,
Java, PHP, Perl, VB/C#/ASP.NET,
JavaScript
• Speaker: PHPCon, PHP Barcelona
Conference, PHPDay, ZendCon,
Common Europe, etc
• Laurea in Economia Informatica presso
l'Università “G.D'Annunzio” di Pescara
• Blog sullo sviluppo web in PHP:
http://www.zimuel.it/blog
3. Sommario
• Cloud computing
• Sviluppo di applicazioni web in ambienti cloud
• Simple Cloud API
– Storage service
– Document service
– Queue service
• Esempi in PHP
4. Cloud Computing
“E' l'insieme di tecnologie informatiche
che permettono l'utilizzo di risorse
hardware (storage, CPU) o software
distribuite in remoto.”
Fonte: Wikipedia
6. Sviluppo di applicazioni in ambienti cloud
• Vantaggi, dal punto di vista dello sviluppo:
– Architettura distribuita
– Facile accesso a risorse “potenti”
– Semplicità d'utilizzo: delega di gestione del
servizio
• Alcuni punti critici:
– Vendor lock-in
– Portabilità
– Interoperabilità
7. Vendor lock-in
• In economia il vendor lock-in è quando un cliente
è strettamente legato ad un fornitore a tal punto
da impedire il cambio di vendor senza un
sostanziale costo (switching cost).
• Rischi legati all'utilizzo di vendor:
– Cambio dei costi dei servizi
– Cambio di policy nell'erogazione dei servizi
• In abito software:
switching cost = riscrittura del codice
8. Portabilità
• Portabilità = la capacità di eseguire la stessa
applicazione su piattaforme differenti
• Non è semplice cambiare piattaforma di cloud
computing, molto spesso è necessaria una
modifica sostanziale del proprio software e
quindi una riscrittura del codice
• Per fornire portabilità ad un software è
necessario effettuare un'astrazione delle
operazioni di base
9. Interoperabilità
• Interoperabilità = la capacità di scrivere
software che sia in grado di utilizzare sistemi
differenti
• Il vs. software è in grado di utilizzare
indifferentemente un servizio di storage su
Amazon S3 o Nirvanix?
• Anche qui, il cambio di vendor porta a dei costi
derivanti dalla riscrittura del codice
10. Simple Cloud API
• E' un'interfaccia comune, in PHP, per l'accesso
ai servizi di cloud computing
• E' un progetto open source ideato da Zend
Technologies con la collaborazione di IBM,
Microsoft, Rackspace, Nirvanix e GoGrid
• Dal 2 Novembre 2010 il Simple Cloud API è
stato incluso nel progetto Zend Framework
con la classe Zend_Cloud
http://simplecloudapi.org/
13. Installazione di Zend_Cloud
• Zend_Cloud è disponibile a partire dalla
versione 1.11.0 di Zend Framework
• Download:
– http://framework.zend.com/download/latest
• Configurazione di Zend Framework
– Inclusione della libreria nel percorso di
default del PHP:
• include_path nel php.ini
• oppure da script PHP tramite
set_include_path()
14. Storage service
• Zend_Cloud_StorageService
• Adapter per Amazon S3 e Windows Azure
• Storage di file (item):
– Ad ogni item è associata una chiave
univoca (URL, path, etc)
– Ad ogni item posso associare dei
metadata (coppie chiave=>valore)
– E' possibile accedere ai metodi specifici
di ogni adapter (ad esempio i bucket in S3)
15. Storage service: esempio
<?php
// il parametro può essere un array o un oggetto Zend_Config
$storage =
Zend_Cloud_StorageService_Factory::getAdapter(array(
Zend_Cloud_StorageService_Factory::STORAGE_ADAPTER_KEY =>
'Zend_Cloud_StorageService_Adapter_S3',
Zend_Cloud_StorageService_Adapter_S3::AWS_ACCESS_KEY =>
$amazonKey,
Zend_Cloud_StorageService_Adapter_S3::AWS_SECRET_KEY =>
$amazonSecret));
// memorizzo un nuovo item nello storage
$data = file_get_contents('/home/test/picture.jpg');
$returnedData = $storage->storeItem('/picture.jpg', $data);
16. Storage service: esempio (2)
<?php
…
// leggo un item dallo storage
$returnedData = $storage->fetchItem("/picture.jpg");
file_put_contents('/tmp/picture.jpg', $returnedData);
// elimino un item dallo storage
$storage->deleteItem("/picture.jpg");
// copio un item nello storage
$storage->copyItem('/picture.jpg', '/picture_copy.jpg');
// elenco degli item nello storage nella dir /
$objects = $storage->listItems('/');
foreach ($objects as $objname) {
echo "Found: $objnamen";
}
17. Storage service: metadata
<?php
…
// memorizzo metadata al file nello storage
$data = $storage->storeMetadata('/picture.jpg', array(
'type' => 'JPEG',
'category' => 'Portrait',
));
// leggo metadata dal file nello storage
$data = $storage->fetchMetadata('/picture.jpg');
foreach ($data as $key => $value) {
echo "Metadata $key: $valuen";
}
// elimino metadata dal file nello storage
$storage->deleteMetadata("/picture.jpg");
18. Storage service: accesso diretto all'adapter
<?php
…
// accesso diretto ai metodi dell'adapter S3
$s3 = $storage->getClient();
$s3->cleanBucket("oldBucket");
Nota: l'utilizzo di metodi specifici dell'adapter
limita la portabilità del codice poiché lo vincola
alla funzione specifica del vendor
19. Document service
• Zend_Cloud_DocumentService
• Adapter per Amazon SimpleDB e
Windows Azure
• Documenti (item):
– Collezione di documenti (database)
– Ogni documento è una collezione di coppie
(chiave, valore)
– Ogni documento è identificato da un ID
20. Document service: esempio
<?php
$documents =
Zend_Cloud_DocumentService_Factory::getAdapter(array(
Zend_Cloud_DocumentService_Factory::DOCUMENT_ADAPTER_KEY
=> 'Zend_Cloud_DocumentService_Adapter_SimpleDb',
Zend_Cloud_DocumentService_Adapter_SimpleDb::AWS_ACCESS_KEY
=> $amazonKey,
Zend_Cloud_DocumentService_Adapter_SimpleDb::AWS_SECRET_KEY
=> $amazonSecret
));
// creo una nuova collezione di documenti
$documents->createCollection("mydata");
21. Document service: nuovo documento
<?php
…
// creo un nuovo documento
$document = new Zend_Cloud_DocumentService_Document(array(
'key1' => 'value1',
'key2' => 123,
'key3' => 'thirdvalue',
), "DocumentID");
// inserisco il documento nella collection
$documents->insertDocument("mydata", $document);
// aggiorno un documento
$documents->updateDocument("mydata", "DocumentID",
array("key2" => "new value"));
22. Document service: query
<?php
…
// ricerca documenti nella collezione
$docs = $documents->query(
"collectionName",
"RowKey eq 'rowkey2' or RowKey eq 'rowkey2'"
);
foreach ($docs as $doc) {
$id = $doc->getId();
echo "Found document with ID: "
. var_export($id, 1)
. "n";
}
24. Queue service
• Zend_Cloud_QueueService
• Adapter per Amazon Simple Queue,
Windows Azure, Zend Queue
• Code (queue):
– Gestione di una o più code
– Ogni coda ha uno o più messaggi gestiti
tramite con la tecnica FIFO (First In First
Out)
26. Queue service: esempio (2)
<?php
…
// invio di un messaggio alla coda
$queues->sendMessage($queueId, "Hello world!");
// lettura del messaggio in testa alla coda
$messages = $queues->receiveMessages($queueId);
if (count($messages)) {
foreach ($messages as $message) {
echo "Message: " . $message->getBody();
break;
}
}
// lettura di 2 messaggi dalla testa della coda
$messages = $queues->receiveMessages($queueId, 2);
27. Queue service: lettura messaggi
• Quando un client legge un messaggio da
una coda, questo messaggio non è visibile
dagli altri client
• Se il client non elimina il messaggio
eseguendo il metodo deleteMessage() il
messaggio sarà visibile agli altri client
dopo un timeout