SlideShare a Scribd company logo
1 of 30
Download to read offline
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
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à
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: $objnamen";
}
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");
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: $valuen";
}
Domande?
Grazie!
        Per maggiori informazioni:
                http://www.zend.com
               http://simplecloud.org
http://framework.zend.com/manual/en/zend.cloud.html

More Related Content

Viewers also liked (6)

Java scriptpatterns
Java scriptpatternsJava scriptpatterns
Java scriptpatterns
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
 
Advanced JQuery
 Advanced JQuery Advanced JQuery
Advanced JQuery
 
Michelle Hathaway Mastery Timeline
Michelle Hathaway Mastery TimelineMichelle Hathaway Mastery Timeline
Michelle Hathaway Mastery Timeline
 
Finggggg
FingggggFinggggg
Finggggg
 
Photo presentation
Photo presentationPhoto presentation
Photo presentation
 

Similar to Simple Cloud API: accesso semplificato al cloud computing

Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
Whymca
 
Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8
massimiliano.wosz
 

Similar to Simple Cloud API: accesso semplificato al cloud computing (20)

Node.js - Server Side Javascript
Node.js - Server Side JavascriptNode.js - Server Side Javascript
Node.js - Server Side Javascript
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
 
Hexagonal architecture ita
Hexagonal architecture itaHexagonal architecture ita
Hexagonal architecture ita
 
DDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continuaDDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continua
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
 
Linuxday2013
Linuxday2013 Linuxday2013
Linuxday2013
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012
 
Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
 
Apache HTTP Server
Apache HTTP ServerApache HTTP Server
Apache HTTP Server
 

More from Francesca1980

PhoneGap ovvero lo Sviluppo Mobile Nativo con HTML, CSS e JavaScript
PhoneGap ovvero lo Sviluppo Mobile Nativo con HTML, CSS e JavaScriptPhoneGap ovvero lo Sviluppo Mobile Nativo con HTML, CSS e JavaScript
PhoneGap ovvero lo Sviluppo Mobile Nativo con HTML, CSS e JavaScript
Francesca1980
 

More from Francesca1980 (7)

Map meshup
Map meshupMap meshup
Map meshup
 
Java scriptpatterns
Java scriptpatternsJava scriptpatterns
Java scriptpatterns
 
Event driven javascript
Event driven javascriptEvent driven javascript
Event driven javascript
 
Event driven javascript
Event driven javascriptEvent driven javascript
Event driven javascript
 
PhoneGap ovvero lo Sviluppo Mobile Nativo con HTML, CSS e JavaScript
PhoneGap ovvero lo Sviluppo Mobile Nativo con HTML, CSS e JavaScriptPhoneGap ovvero lo Sviluppo Mobile Nativo con HTML, CSS e JavaScript
PhoneGap ovvero lo Sviluppo Mobile Nativo con HTML, CSS e JavaScript
 
Writing cool web 2.0 apps with GWT and UI Bindings
Writing cool web 2.0 apps with GWT and UI BindingsWriting cool web 2.0 apps with GWT and UI Bindings
Writing cool web 2.0 apps with GWT and UI Bindings
 
Programmazione web libera dai framework
Programmazione web libera dai frameworkProgrammazione web libera dai framework
Programmazione web libera dai framework
 

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
  • 5. Alcuni servizi di cloud computing
  • 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/
  • 11. Simple Cloud API: architettura
  • 12. 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))
  • 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"; }
  • 23. 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"; }
  • 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)
  • 25. 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');
  • 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
  • 28. 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: $valuen"; }
  • 30. Grazie! Per maggiori informazioni: http://www.zend.com http://simplecloud.org http://framework.zend.com/manual/en/zend.cloud.html