Windows Azure laboratorium 2013 K.M. Ocetkiewicz, T. Goluch



Podobne dokumenty
Windows Azure laboratorium 2016 K.M. Ocetkiewicz, T. Goluch

Zaawansowane użycie Azure Storage. Ewa Baćmaga Integral Technologies

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Programowanie aplikacji przetwarzających w chmurze. Bazy danych.

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Programowanie obiektowe

Lista, Stos, Kolejka, Tablica Asocjacyjna

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Zaawansowane aplikacje internetowe - laboratorium

VComNet Podręcznik użytkownika. VComNet. Podręcznik użytkownika Wstęp

Microsoft.NET: LINQ to SQL, ASP.NET AJAX

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Zaawansowane aplikacje internetowe laboratorium REST

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Leszek Stasiak Zastosowanie technologii LINQ w

Programowanie obiektowe

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Zaawansowane aplikacje WWW - laboratorium

Przychodnia 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę Osoba.

Instrukcja laboratoryjna

Instrukcja laboratoryjna cz.3

Wykład 6 Dziedziczenie cd., pliki

Programowanie obiektowe

Budowa aplikacji ASP.NET współpracującej z bazą danych do obsługi przesyłania wiadomości

Specyfikacja API Runtime BAS 3.0

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Wykład 5: PHP: praca z bazą danych MySQL

Dr Michał Tanaś(

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Laboratorium 1 - Programowanie proceduralne i obiektowe

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

Algorytmy i Struktury Danych. Anna Paszyńska

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:

Budowa i oprogramowanie komputerowych systemów sterowania. Laboratorium 4. Metody wymiany danych w systemach automatyki DDE

MongoDB. wprowadzenie. dr inż. Paweł Boiński, Politechnika Poznańska

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Tabela wewnętrzna - definicja

Klasy i obiekty cz II

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Programowanie obiektowe

na podstawie bazy Oracle NoSQL

PROJEKTOWANIE APLIKACJI INTERNETOWYCH

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Korzystanie z edytora zasad grupy do zarządzania zasadami komputera lokalnego w systemie Windows XP

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Aplikacje WWW - laboratorium

Web Services (SOAP) Ćwiczenie 1

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Wprowadzenie do Doctrine ORM

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Portal SRG BFG. Instrukcja korzystania z Portalu SRG BFG

Informatyzacja Przedsiębiorstw

Programowanie obiektów

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Platformy Programowania

Tworzenie i wykorzystanie usług sieciowych

Paweł Rajba

5 AS SP.NET MVC. Walidacja danych. Zaawansowane programowanie internetowe Instrukcja nr 5

UONET+ moduł Dziennik. Praca z rozkładami materiału nauczania

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

1. Od czego zacząć? - Instalacja środowiska pracy

Db4o obiektowa baza danych wersja.net

Ref. 7 - Język SQL - polecenia DDL i DML

namespace HostedReceiver { public class Receiver: IConfigureThisEndpoint, AsA_Server {

Instrukcja instalacji i konfiguracji bazy danych SQL SERVER 2008 EXPRESS R2. Instrukcja tworzenia bazy danych dla programu AUTOSAT 3. wersja 0.0.

Podstawowe części projektu w Javie

Programowanie obiektowe zastosowanie języka Java SE

Laboratorium 7 Blog: dodawanie i edycja wpisów

Informatyzacja Przedsiębiorstw

Aplikacje WWW - laboratorium

Wykład 4. Klasa List Kolejki Stosy Słowniki

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Konfiguracja oprogramowania w systemach MS Windows dla kont z ograniczonymi uprawnieniami

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

Portal SRG BFG Instrukcja korzystania z Portalu SRG BFG

Tomasz Greszata - Koszalin

Instrukcja użytkownika. Aplikacja dla Comarch ERP XL

Wykład 9 Kolekcje, pliki tekstowe, Przykład: Notatnik

Wyszukiwanie plików w systemie Windows

Instrukcja użytkownika. Aplikacja dla WF-Mag

Wykład 3 Inżynieria oprogramowania. Przykład 1 Bezpieczeństwo(2) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Michał Jankowski. Remoting w.net 2.0

Struktury danych: stos, kolejka, lista, drzewo

Comarch e-sklep Sync. wersja

Instrukcja użytkownika. Aplikacja dla Comarch Optima

Procedury techniczne modułu Forte Kontroling. Raportowanie danych w MS Excel - Konfiguracja IIS na Windows oraz wykonanie importu

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

Transkrypt:

Windows Azure laboratorium 2013 K.M. Ocetkiewicz, T. Goluch 1. Wstęp Windows Azure jest przykładem usługi, popularnie nazywanej chmurą. W modelu tym dostajemy do dyspozycji pewne środowisko obejmujące elementy takie jak maszyny wirtualne, bazy danych, przestrzeń na dane, szynę komunikacyjną itp. Z jednej strony rozwiązanie to ma zalety nie musimy administrować fizycznymi komputerami, martwić się o ich wydajność i skalowalność naszej aplikacji (zawsze możemy zażyczyć sobie większej liczby maszyn), z drugiej jednak strony środowisko to narzuca pewne ograniczenia co do modelu programistycznego, a każdy element środowiska jest odpowiednio wyceniony i użycie go kosztuje (i to niemało) co powoduje, że Azure znajdzie raczej zastosowanie w dużych, komercyjnych projektach. Dodatkowa literatura: Introducing Windows Azure http://www.windowsazure.com/en-us/develop/net/fundamentals/intro-to-windows-azure/?fb=pl-pl Windows Azure Execution Models http://www.windowsazure.com/en-us/develop/net/fundamentals/compute/?fb=pl-pl Windows Azure Virtual Labs http://msdn.microsoft.com/en-us/dd540819.aspx Windows Azure Technical Documentation http://msdn.microsoft.com/en-us/library/windowsazure/dd163896.aspx Kalkulator kosztów http://www.windowsazure.com/pl-pl/pricing/calculator/ 2. Usługa WCF Zbudowanie usługi WCF w środowisku Azure wymaga jedynie dodania do projektu roli WCF Service Role (prawym przyciskiem myszy na projekcie, New Web Role Project... i WCF Web Service Role. Serwis tworzymy tak samo, jak serwis hostowany na poprzednich laboratoriach. Możemy go także przetestować narzędziem WCFTestClient. Szczegóły dotyczące endpointu możemy ustawić wybierając właściwości naszej roli WCF (w poddrzewie Roles naszego projektu w Solution Explorer) i przechodząc do zakładki Endpoints. 3. Tabele Tabele są pojemnikami na nierelacyjne dane, zawierające jednak pewną strukturę. Tabela jest kolekcją encji, zaś encja (odpowiednik wiersza tabeli w SQL) jest kolekcją właściwości w postaci par klucz-wartość. Tabela nie wymusza struktury każda encja w tabeli może mieć inny zbiór kluczy. Encja może posiadać do 252 właściwości. Jej całkowity rozmiar nie może przekraczać 1MB. Każda encja identyfikowana jest przez klucz główny (RowKey, typu String), który musi być unikatowy w ramach węzła. Dodatkowo posiada także klucz partycji (PartitionKey, typu String) encje o takim samym kluczu partycji przechowywane będą w tym samym węźle (maszynie) oraz znacznik czasu (Timestamp). Wartości przypisane do kluczy mogą mieć następujące typy: Binary (tablica bajtów, maksymalnie 64KB), Bool, DateTime, Double, GUID, Int, Int64, String (maksymalnie 64KB). Dostęp do tabel możliwy jest poprzez Storage Account. Wszystkie tabele zawarte w jednym Storage Account nie mogą przekraczać łącznie 100TB. Aby skorzystać z tabeli, musimy doinstalować do projektu pakiet OData (należy wyszukać ODataLib poprzez Manage NuGetPackages... wydać polecenie install-package Microsoft.Data.OData -Version 5.0.2 w konsoli menedżera pakietów) oraz dodać referencje do System.Data.Services.Client oraz Microsoft.WindowsAzure.Storage. 07D77448-3773-4E2D-8BDC-1895CA2423D9 1

Następnie musimy zdefiniować klasę, która będzie reprezentowała nasze dane. Powinna ona dziedziczyć po klasie TableEntity oraz posiadać bezparametrowy konstruktor. Pola, które mają być zapamiętane w tabeli muszą być właściwościami dostępnymi publicznie (także do zapisu). public class TestEntity : TableEntity public TestEntity(string rk, string pk) this.partitionkey = pk; // ustawiamy klucz partycji this.rowkey = rk; // ustawiamy klucz główny // this.timestamp; jest tylko do odczytu public TestEntity() public string s get; set; public int i get; set; Dostęp do konkretnej tabeli uzyskujemy poprzez referencję: // w przypadku rzeczywistego Azure //var accountname = "konto"; //var key = "hasło"; //var credentials = new StorageCredentials(accountName, key); //var account = new CloudStorageAccount(credentials, true); // true jeżeli HTTPS // w przypadku emulatora var account = CloudStorageAccount.DevelopmentStorageAccount; CloudTableClient cl = account.createcloudtableclient(); var table = cl.gettablereference(table); table.createifnotexists(); // utworzenie tabeli jeżeli nie istnieje //table.deleteifexists(); // usunięcie tabeli gdy istnieje Podejrzeć zawartość utworzonych tabel możemy w Server Explorer z menu View i rozwijając drzewo Windows Azure Storage. Dodanie nowej encji do tabeli wymaga utworzenia operacji wstawienia, przekazania jej encji do wstawienia i wykonania operacji na tabeli: var e = new TestEntity(key, partitionkey); TableOperation op = TableOperation.Insert(e); t.execute(op); Operacje wstawiania możemy łączyć w paczki do 100 encji. Wykonanie paczki operacji ma postać: TableBatchOperation batchoperation = new TableBatchOperation(); batchoperation.insert(new TestEntity(key1, partitionkey1));... batchoperation.insert(new TestEntity(keyn, partitionkeyn)); table.executebatch(batchoperation); Podobnie wygląda pobranie danych z tabeli w przypadku pojedynczej encji (w przypadku braku szukanej encji Result będzie miało wartość null): TableOperation op = TableOperation.Retrieve<TestEntity>(pk, k); var res = t.execute(op); TestEntity e = (TestEntity)res.Result; lub wybranych encji: 07D77448-3773-4E2D-8BDC-1895CA2423D9 2

pkey = "kluczpartycji"; rkey = "kluczwiersza"; TableQuery<TestEntity> query = new TableQuery<TestEntity>().Where(Table.Query.CombineFilters( TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, pkey), TableOperators.And, TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, rkey))); foreach (TestEntity e in table.executequery(query)) Console.WriteLine("0, 1", e.partitionkey, e.rowkey); Dostępne są także operacje usuwania (TableOperation.Delete), modyfikacji (TableOperation.Replace), dodania lub modyfikacji (TableOperation.InsertOrReplace). Wszystkie one pobierają encję jako argument. How to use the Table Storage Service http://www.windowsazure.com/en-us/develop/net/how-to-guides/table-services/ 4. BLOBy BLOBy (Binary Large Object) umożliwiają przechowywanie w ramach Storage dużych danych binarnych. Rozmiar BLOBa blokowego jest ograniczony przez 200GB, maksymalny rozmiar BLOBa stronicowanego (który jest efektywniejszy w przypadku częstych modyfikacji zawartości) to 1TB. Dostęp do BLOBów jest możliwy jest poprzez Storage Account. Tak jak encje przechowywane są w tabelach, tak BLOBy podzielone są na kontenery. Nazwa kontenera powinna rozpoczynać się od małej litery. Dostęp do danych mamy poprzez strumienie zapisując dane do BLOBa podajemy strumień z danymi, odczytując podajemy strumień, do którego dane mają zostać zapisane. // account utworzone jak w przypadku tabel CloudBlobClient client = account.createcloudblobclient(); CloudBlobContainer container = client.getcontainerreference("mycontainer"); container.createifnotexists(); // pobranie referencji do blokowego BLOBa var blob = container.getblockblobreference(nazwa); // zapisanie strumienia do BLOBa var bytes = new System.Text.ASCIIEncoding().GetBytes(value)); var s = new System.IO.MemoryStream(bytes); blob.uploadfromstream(s); // odczytanie bloba do strumienia var s2 = new System.IO.MemoryStream(); blob.downloadtostream(s2); string content = System.Text.Encoding.UTF8.GetString(s2.ToArray()); // usunięcie blob.delete(); blob.deleteifexists(); // lista BLOBów string lst = ""; foreach (IListBlobItem item in container.listblobs(null, false)) if (item.gettype() == typeof(cloudblockblob)) 07D77448-3773-4E2D-8BDC-1895CA2423D9 3

CloudBlockBlob blob = (CloudBlockBlob)item; lst += String.Format("Block blob of length 0: 1", blob.properties.length, blob.uri) + "\n"; else if (item.gettype() == typeof(cloudpageblob)) CloudPageBlob pageblob = (CloudPageBlob)item; lst += String.Format("Page blob of length 0: 1", pageblob.properties.length, pageblob.uri) + "\n"; else if (item.gettype() == typeof(cloudblobdirectory)) CloudBlobDirectory directory = (CloudBlobDirectory)item; lst += String.Format("Directory: 0", directory.uri) + "\n"; How to use the Windows Azure Blob Storage Service in.net http://www.windowsazure.com/en-us/develop/net/how-to-guides/blob-storage/?fb=pl-pl Understanding Block Blobs and Page Blobs http://msdn.microsoft.com/en-us/library/windowsazure/ee691964.aspx 5. Kolejki Kolejki są kolejnym mechanizmem przechowywania lub przekazywania danych w ramach Storage Account. Kolejka jest typową kolejką FIFO (First In First Out), w której przechowujemy wiadomości. Zawartością wiadomości może być napis lub tablica bajtów. Rozmiar pojedynczej wiadomości jest ograniczony przez 64KB zaś liczbę wiadomości ogranicza limit rozmiaru Storage (100TB). Korzystanie z kolejki wpisuje się w schemat wyznaczony przez tabele i BLOBy pobieramy referencję a następnie z niej korzystamy. Dodatkowo, potrzebujemy jeszcze przestrzeni nazw Microsoft.WindowsAzure.Storage.Queue. // account utworzone jak pooprzednio CloudQueueClient client = account.createcloudqueueclient(); CloudQueue queue = client.getqueuereference("myqueue"); // utworzenie kolejki queue.createifnotexists(); // usunięcie kolejki queue.delete(); queue.deleteifexists(); // wysłanie wiadomości var msg = new CloudQueueMessage( wiadomość ); queue.addmessage(msg); Zerknięcie (ang. peek) jest operacją zwracającą nam pierwszą wiadomość w kolejce. Wiadomość ta nie jest jednak usuwana. Jeżeli kolejka jest pusta, rezultatem będzie null. // zerknięcie na wiadomość var msg2 = queue.peekmessage(); Odebranie wiadomość jest operacją dwufazową. Metoda GetMessge zwraca nam wiadomość (lub null gdy kolejka jest pusta), Operacja ta powoduje, że wiadomość staje się chwilowo (domyślnie przez 30 sekund, czas ten można zmodyfikować dodając parametr do GetMessage) niewidoczna. W tym czasie należy wiadomość usunąć, inaczej środowisko stwierdzi, że obsługa wiadomości nie powiodła się i wiadomość wróci do kolejki (aby można było ją jeszcze raz obsłużyć). 07D77448-3773-4E2D-8BDC-1895CA2423D9 4

// odebranie wiadomości var msg3 = queue.getmessage(); queue.deletemessage(msg3); // odebranie grupy wiadomości wiadomości IEnumerable<CloudQueueMessage> lst = queue.getmessages(10); // liczba wiadomości foreach(var m in lst) queue.deletemessage(m); Wiadomości posiadają następujące pola: AsString - zawartość wiadomości jako napis AsBytes - zawartość wiadomości jako tablica bajtów ExpirationTime - czas życia wiadomości (kiedy przestanie być aktualna) InsertionTime - czas wstawienia do kolejki DequeueCount - liczba pobrań wiadomości z kolejki Wiadomości można także modyfikować. Aby to zrobić, pobieramy wiadomość z kolejki i zamiast ją usunąć, wołamy metodę UpdateMessage: CloudQueueMessage msg = queue.getmessage(); msg.setmessagecontent("nowa treść"); queue.updatemessage(message, TimeSpan.FromSeconds(0.0), MessageUpdateFields.Content MessageUpdateFields.Visibility); How to use the Queue Storage Service http://www.windowsazure.com/en-us/develop/net/how-to-guides/queue-service/ 6. Worker Role Worker Role (pracownik) jest obiektem wykonującym pracę lub obliczenia. Dodanie Worker Role do projektu wymaga kliknięcia na poddrzewie Roles naszego projektu i wybraniu Add -> New Worker Role Project... Otrzymamy w ten sposób klasę dziedziczącą po RoleEntryPoint i implementującą trzy metody: OnStart, OnStop oraz Run. Metoda OnStart jest wywoływana w momencie uruchomienia pracownika i powinna zwrócić true jeżeli inicjalizacja się powiodła (w przypadku zwrócenia false obiekt jest niszczony). Metoda OnStop wywoływana jest w momencie zatrzymywania pracownika (w przypadku zatrzymania lub aktualizacji usługi, restartu maszyny Azure lub gdy metoda Run się zakończy). Metoda ta powinna zakończyć się szybko lub być gotowa na sytuacje, gdy jej wykonanie zostanie przerwane. Wreszcie metod Run wykonuje właściwą pracę i w zasadzie nie powinna się kończyć (główna pętla powinna mieć postać zbliżoną do while(true)...). Komunikaty diagnostyczne, wypisywane poprzez Trace.WriteLine można obejrzeć klikając prawym przyciskiem myszy na ikonie emulatora Azure w zasobniku systemowym i wybierając Show Compute Cmulator UI oraz przechodząc do odpowiedniego pracownika. Build an Application that Runs in a Cloud Service in Windows Azure http://msdn.microsoft.com/en-us/library/windowsazure/hh180152.aspx Configuring a Windows Azure Project http://msdn.microsoft.com/en-us/library/windowsazure/ee405486.aspx 07D77448-3773-4E2D-8BDC-1895CA2423D9 5