PHP na Windows Azure - Alternatywne biblioteki Udostępnij na: Facebook

Autor: Maciej Wilgucki

Opublikowano: 2011-05-31

Pobierz i uruchom

Do tej pory wszystkie prezentowane  przykłady korzystały z biblioteki przygotowanej we współpracy z firmą Microsoft. W przypadku środowiska PHP nie istnieje coś takiego, jak jedyna słuszna droga, więc pojawienie się alternatywnych rozwiązań było tylko kwestią czasu. Ilość dodatkowych bibliotek może nie jest szczególnie imponująca (poza oficjalnym SDK dostępne są jeszcze dwie biblioteki), ale na pewno pozwala na wybranie mniej lub bardziej dopasowanego do naszego projektu rozwiązania.

Obie alternatywne biblioteki zostały przygotowane jako komponenty Zend Frameworka. Framework ten został tak napisany, aby maksymalnie uprościć korzystanie z interesujących nas komponentów, dzięki czemu nie musimy wykorzystywać całego frameworka.

Zend_Service_WindowsAzure

Pierwszą alternatywną biblioteką jest Zend_Service_WindowsAzure – jest ona odzwierciedleniem Azure SDK for PHP i oferuje niemal identyczne funkcjonalności. Podobnie jak w przypadku biblioteki omawianej w poprzednich częściach serii, Zend_Service_WindowsAzure pozwala na tworzenie blobów, tabel, kolejek oraz na wszystkie operacje związane z mechanizmami przechowywania danych. Co ciekawe, nazwy metod oraz argumenty do nich przekazywane są identyczne. Jeśli porównamy dokumentację obu bibliotek, okaże się, że nawet przykłady użycia się pokrywają. Jedyną zmianą, jaką można zauważyć, jest inna nazwa klasy.

Dokładny opis klas wchodzących w skład biblioteki znajduje się pod adresem http://framework.zend.com/manual/en/zend.service.windowsazure.html.

SimpleCloud API: Zend_Cloud

Znacznie ciekawiej prezentuje się druga biblioteka dostępna w ramach Zend Frameworka – Zend_Cloud. Jest to ambitna próba ujednolicenia interfejsu dostępu do chmury, niezależnie od dostawcy. W chwili obecnej za pomocą Zend_Cloud możemy korzystać z Windows Azure oraz chmury Amazonu (SimpleDb, Sqs, S3).

Zaletą korzystania z Zend_Cloud jest możliwość prawie bezproblemowego przejścia z jednej chmury na inną lub połączenia kilku chmur w jednym projekcie. Dzięki czemu jesteśmy w stanie zminimalizować koszty, a w przypadku awarii jednego dostawcy szybko przenieść się na innego.

Korzystanie z Zend_Cloud jest niezwykle proste. Na początek musimy utworzyć obiekt magazynu:

Informacja
W poniższych przykładach będę prezentował mechanizm kolejek. Z pozostałych mechanizmów przechowywania danych korzysta się w analogiczny sposób.

 

 

$queueStorage = Zend_Cloud_QueueService_Factory::getAdapter(
    array(
        Zend_Cloud_StorageService_Factory::STORAGE_ADAPTER_KEY => 'Zend_Cloud_StorageService_Adapter_WindowsAzure',
        Zend_Cloud_QueueService_Factory::QUEUE_ADAPTER_KEY => 'Zend_Cloud_QueueService_Adapter_WindowsAzure',
        Zend_Cloud_StorageService_Adapter_WindowsAzure::ACCOUNT_NAME => Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::DEVSTORE_ACCOUNT,
        Zend_Cloud_StorageService_Adapter_WindowsAzure::ACCOUNT_KEY => Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::DEVSTORE_KEY,
        Zend_Cloud_StorageService_Adapter_WindowsAzure::HOST => Zend_Service_WindowsAzure_Storage_Queue::URL_DEV_QUEUE
    )
);
Informacja
W tym przykładzie skorzystaliśmy z danych konta deweloperskiego, łączącego się z lokalnym emulatorem chmury. W produkcyjnej aplikacji należy podać prawidłowe dane do konta.

 

Zarządzanie kolejką działa na podobnej zasadzie, jak w przypadku pozostałych bibliotek:

// utworzenie kolejki
$queueId = $queueStorage->createQueue('kolejka');
// usunięcie kolejki
$queueStorage->deleteQueue($queueId);

Do utworzonej kolejki możemy dodać wiadomości:

$queueStorage->sendMessage($queueId, 'wiadomość');

Jeśli w kolejce znajdują się jakieś wiadomości, możemy je pobrać:

$messages = $queueStorage->receiveMessages($queueId, 3);
foreach($messages as $message) {
 var_dump($message);
}

lub podejrzeć:

$messages = $queueStorage->peekMessages($queueId, 3);
foreach($messages as $message) {
 var_dump($message);
}

W efekcie uzyskamy kolekcję obiektów typu Zend_Cloud_QueueService_Message.

Na koniec wiadomość można usunąć z kolejki:

$messages = $queueStorage->peekMessages($queueId, 3);
foreach($messages as $message) {
    $queueStorage->deleteMessage($queueId, $message);
}

Pozostałe mechanizmy przechowywania danych obsługiwane są w podobny sposób.

Opis wszystkich klas wchodzących w skład Zend_Cloud znajduje się pod adresem http://framework.zend.com/manual/en/zend.cloud.html.

Podsumowanie

W dzisiejszym artykule zapoznaliśmy się z dwiema alternatywnymi bibliotekami pozwalającymi na pracę z Windows Azure. Oba rozwiązania wchodzą w skład Zend_Frameworka. Jeśli z jakiegoś powodu nie możemy lub nie chcemy korzystać z Azure SDK for PHP, obie biblioteki doskonale się sprawdzą w swojej roli.