Transcript
Page 1: Simple Cloud API: accesso semplificato al cloud computing

Simple Cloud API: accesso semplificato al cloud computing

Enrico Zimuel ([email protected])Zend Technologies, the PHP company

Page 2: Simple Cloud API: accesso semplificato al cloud computing

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

Page 3: Simple Cloud API: accesso semplificato al cloud computing

Sommario

• Cloud computing

• Sviluppo di applicazioni web in ambienti cloud

• Simple Cloud API– Storage service– Document service

– Queue service

• Esempi in PHP

Page 4: Simple Cloud API: accesso semplificato al cloud computing

Cloud Computing

“E' l'insieme di tecnologie informatiche che permettono l'utilizzo di risorse hardware (storage, CPU) o software distribuite in remoto.”

Fonte: Wikipedia

Page 5: Simple Cloud API: accesso semplificato al cloud computing

Alcuni servizi di cloud computing

Page 6: Simple Cloud API: accesso semplificato al cloud computing

• 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à

Sviluppo di applicazioni in ambienti cloud

Page 7: Simple Cloud API: accesso semplificato al cloud computing

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

Page 8: Simple Cloud API: accesso semplificato al cloud computing

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

Page 9: Simple Cloud API: accesso semplificato al cloud computing

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

Page 10: Simple Cloud API: accesso semplificato al cloud computing

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/

Page 11: Simple Cloud API: accesso semplificato al cloud computing

Simple Cloud API: architettura

Page 12: Simple Cloud API: accesso semplificato al cloud computing

Zend_Cloud: servizi

• Servizi attualmente disponibili:– Storage (Amazon S3, Nirvanix, Azure

Blog Storage, Local file system)– Document (Amazon SimpleDB, Azure

Table Storage)– Queue (Amazon SQS, Azure Queue

Service, Zend_Queue (Apache ActiveMQ, MemcacheQ, Zend Platform, Zend Db))

Page 13: Simple Cloud API: accesso semplificato al cloud computing

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()

Page 14: Simple Cloud API: accesso semplificato al cloud computing

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)

Page 15: Simple Cloud API: accesso semplificato al cloud computing

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);

Page 16: Simple Cloud API: accesso semplificato al cloud computing

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: $objname\n";}

Page 17: Simple Cloud API: accesso semplificato al cloud computing

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: $value\n";}

// elimino metadata dal file nello storage$storage->deleteMetadata("/picture.jpg");

Page 18: Simple Cloud API: accesso semplificato al cloud computing

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

Page 19: Simple Cloud API: accesso semplificato al cloud computing

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

Page 20: Simple Cloud API: accesso semplificato al cloud computing

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");

Page 21: Simple Cloud API: accesso semplificato al cloud computing

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"));

Page 22: Simple Cloud API: accesso semplificato al cloud computing

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";}

Page 23: Simple Cloud API: accesso semplificato al cloud computing

Document service: structured query

<?php…// creo la structured query$query = $documents->select() ->from('collectionName') ->where('year > ?', array(1945)) ->limit(3);

// eseguo la query$docs = $documents->query('collectionName', $query);

foreach ($docs as $doc) { $id = $doc->getId(); echo "Found document with ID: " . var_export($id, 1) . "\n";}

Page 24: Simple Cloud API: accesso semplificato al cloud computing

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)

Page 25: Simple Cloud API: accesso semplificato al cloud computing

Queue service: esempio

<?php

$queues = Zend_Cloud_QueueService_Factory::getAdapter(array( Zend_Cloud_QueueService_Factory::QUEUE_ADAPTER_KEY => 'Zend_Cloud_QueueService_Adapter_Sqs', Zend_Cloud_QueueService_Adapter_Sqs::AWS_ACCESS_KEY => $amazonKey, Zend_Cloud_QueueService_Adapter_Sqs::AWS_SECRET_KEY => $amazonSecret,));

// creo una coda$queueId = $queues->createQueue('my-queue');

Page 26: Simple Cloud API: accesso semplificato al cloud computing

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);

Page 27: Simple Cloud API: accesso semplificato al cloud computing

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

Page 28: Simple Cloud API: accesso semplificato al cloud computing

Queue service: metadata

<?php…// aggiunge metadati alla coda$queues->storeQueueMetadata($queueId, array(

'purpose' => 'Operations','administrator' => '[email protected]',

));

// recupero metadati dalla coda$metadata = $queues->fetchQueueMetadata($queueId);

foreach($metadata as $key => $value) {echo "Metadata $key: $value\n";

}

Page 29: Simple Cloud API: accesso semplificato al cloud computing

Domande?

Page 30: Simple Cloud API: accesso semplificato al cloud computing

Grazie!

Per maggiori informazioni:http://www.zend.comhttp://simplecloud.org

http://framework.zend.com/manual/en/zend.cloud.html


Recommended