W poprzednim wpisie poświęconym przechowywaniu danych w chmurze Windows Azure, opisałem czym są bloby oraz jak z nich korzystać. Dzisiaj skupimy się na drugim mechanizmie służącym do przechowywania danych w chmurze – kolejkom. Wbrew pozorom nie jest to błahy temat, ponieważ dzięki kolejkom właśnie mamy możliwość tworzyć aplikacje, które ze sobą rozmawiają.
Czym są kolejki?
Jak sama nazwa wskazuje, kolejki są mechanizmem przechowującym dane w… kolejce FIFO (z pewnymi odstępstwami, ale o tym za chwilę). Innymi słowy informacja zapisana do kolejki zostanie obsłużona w momencie, gdy wszystkie informacje dodane wcześniej zostaną obsłużone.
Zastanawiacie się pewnie po co takie mechanizm? Odpowiedź jest prosta. Aplikacje w chmurze nie są monolitem, który wie wszystko o wszystkim. Aplikacje są podzielone na mniejsze bloki, które nie muszą nic wiedzieć o pozostałych blokach. Takie rozproszenie funkcjonalności wymaga, aby bloki (a dokładniej role – o rolach napiszę osobny wpis) mogły komunikować się między sobą. I tutaj z pomocą przychodzą kolejki. Jeden blok otrzymuje dane, które należy przetworzyć. Ponieważ może zająć to dużo czasu, oddelegowuje tą czynność do odpowiedniego bloku, który zajmuje się tym zadaniem, a sam kontynuuje pracę. Najlepiej będzie pokazać to na przykładzie.Załóżmy, że mamy w chmurze aplikację www – galeria zdjęć. Do każdego zdjęcia, które doda użytkownik, tworzone są miniaturki oraz dodawany jest znak wodny. Co więcej, dodawane zdjęcia są w wysokiej rozdzielczości. W klasycznym modelu, tworzenie miniaturek oraz dodanie znaku wodnego odbędzie się tuż po dodaniu zdjęcia, co spowoduje chwilowy brak dostępu do serwisu do czasu, aż zdjęcie zostanie “przemielone”. W chmurze można zrobić to następująco. Użytkownik dodaje zdjęcie, rola web informuje przy pomocy kolejki rolę worker, że pojawiło się zdjęcie abc.jpg i “wraca” do użytkownika, który może kontynuować pracę. Rola worker mieli obrazek i może, ale nie musi poinformować (również przy pomocy kolejki) o zakończeniu pracy.
Jak to wygląda w praktyce?
Kolejki są jeszcze prostsze w użyciu niż bloby. W zasadzie korzystanie z nich sprowadza się do kilku prostych funkcji. Zacznijmy od utworzenia kolejki.
require_once 'Microsoft/WindowsAzure/Storage/Queue.php';
$client = new Microsoft_WindowsAzure_Storage_Queue();
$queue = $client->createQueue('kolejka');
var_dump($queue);
Powyższy kod wyświetli
object(Microsoft_WindowsAzure_Storage_QueueInstance)#7 (1) {
["_data:protected"]=>
array(3) {
["name"]=>
string(7) "kolejka"
["metadata"]=>
array(0) {
}
["approximatemessagecount"]=>
int(0)
}
}
Do tak przygotowanej kolejki można już dodawać wiadomości.
$client->putMessage('kolejka', 'do it!', 120);
Pierwszym argumentem funkcji jest nazwa kolejki, do której dodawana jest wiadomość, drugim argumentem jest treść wiadomości (maksymalnie 8KB), ostatnim czas życia wiadomości w sekundach. Parametr ten jest opcjonalny i domyślnie ustawiony na maksymalny możliwy czas, czyli 7 dni. Wiadomości po osiągnięciu tego czasu są usuwane z kolejki. Jest to o tyle ważne, że w przypadku problemu z jakąś wiadomością, nie zablokuje ona aplikacji na stałe, tylko na czas życia konkretnej wiadomości.
Kolejkę można przeglądać na dwa sposoby: pobrać wiadomości do obsługi lub podejrzeć wiadomości. Pobranie wiadomości oznacza, że wiadomość jest oznaczana w kolejce jako obsługiwana, dzięki czemu nie będzie miała miejsca sytuacja, w której jedną wiadomość obsługuje kilka ról na raz. Domyślnie wiadomość oznaczana jest jako obsługiwana na czas 30 sekund. Można ten czas zwiększyć maksymalnie do 2 godzin. Po jego upłynięciu, wiadomość wraca do kolejki na swoje miejsce (a dokładniej rzecz biorąc, staje się ponownie widoczna w kolejce). I przez to właśnie, kolejki w Windows Azure nie są prawdziwymi kolejkami FIFO.
Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...
Zwiń
Czytaj na blogu autora...