simple cloud api: accesso semplificato al cloud computing

Post on 05-Dec-2014

1.326 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Simple Cloud API: accesso semplificato al cloud computing

Enrico Zimuel (enrico@zend.com)Zend Technologies, the PHP company

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

Sommario

• Cloud computing

• Sviluppo di applicazioni web in ambienti cloud

• Simple Cloud API– Storage service– Document service

– Queue service

• Esempi in PHP

Cloud Computing

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

Fonte: Wikipedia

Alcuni servizi di 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

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

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

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

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/

Simple Cloud API: architettura

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

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

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)

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

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

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

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

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

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

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

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

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

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)

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

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

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

Queue service: metadata

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

'purpose' => 'Operations','administrator' => 'joe@example.com',

));

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

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

}

Domande?

Grazie!

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

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

top related