Zaawansowane użycie Azure Storage. Ewa Baćmaga Integral Technologies ewa.bacmaga@integral-tech.pl



Podobne dokumenty
Programowanie aplikacji przetwarzających w chmurze. Bazy danych.

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

Leonard G. Lobel Eric D. Boyd. Azure SQL Database Krok po kroku. Microsoft. Przekład: Marek Włodarz. APN Promise, Warszawa 2014

WPROWADZENIE DO BAZ DANYCH

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Jarosław Kuchta. Administrowanie Systemami Komputerowymi. System plików

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

Wybrane działy Informatyki Stosowanej

Diagramy związków encji. Laboratorium. Akademia Morska w Gdyni

e-off f i f ce: :Sekr k e r tari r at t w chm h urz r e Marcin Pytel

Tabela wewnętrzna - definicja

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Projekt Fstorage. Łukasz Podkalicki Bartosz Kropiewnicki

Opis protokołu RPC. Grzegorz Maj nr indeksu:

Seminarium Bazy Danych I. BigTable. Piotr Świgoń Uniwersytet Warszawski

CouchDB. Michał Nowikowski

Wykład 2. Relacyjny model danych

Autorytatywne serwery DNS w technologii Anycast + IPv6 DNS NOVA. Dlaczego DNS jest tak ważny?

Baza danych sql. 1. Wprowadzenie

1 Instalowanie i uaktualnianie serwera SQL Server

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Dr Michał Tanaś(

Programowanie współbieżne Wykład 2. Iwona Kochańska

AUREA BPM Oracle. TECNA Sp. z o.o. Strona 1 z 7

Bazy danych Wykład zerowy. P. F. Góra

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3

System kontroli wersji - wprowadzenie. Rzeszów,2 XII 2010

Instalacja SQL Server Express. Logowanie na stronie Microsoftu

Wykład 8. SQL praca z tabelami 5

Projektowanie i implementacja wysokowydajnych aplikacji w języku

Indeksowanie w bazach danych

Bazy danych - wykład wstępny

P o d s t a w y j ę z y k a S Q L

Oracle11g: Wprowadzenie do SQL

Forum Client - Spring in Swing

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Fiery Remote Scan. Łączenie z serwerami Fiery servers. Łączenie z serwerem Fiery server przy pierwszym użyciu

Wprowadzenie do baz danych

na podstawie bazy Oracle NoSQL

Systemy GIS Systemy baz danych

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

MATERIAŁY - udostępnianie materiałów dydaktycznych w sieci SGH

Bazy danych 2. Wykład 1

API transakcyjne BitMarket.pl

CZĘŚĆ I. WARSTWA PRZETWARZANIA WSADOWEGO

Administracja bazami danych

Nieustanny rozwój. Tomasz Leśniewski

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Definicja bazy danych TECHNOLOGIE BAZ DANYCH. System zarządzania bazą danych (SZBD) Oczekiwania wobec SZBD. Oczekiwania wobec SZBD c.d.

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

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

Tworzenie partycji i dysków logicznych

Część I Tworzenie baz danych SQL Server na potrzeby przechowywania danych

Szkolenie wycofane z oferty. Program szkolenia: Enterprise Java Beans 3.0/3.1

Specyfikacja API Runtime BAS 3.0

Internetowe bazy danych

PROJEKT WYZWANIE. MEDtube to innowacyjny portal wymiany wiedzy dla lekarzy wykorzystujący techniki multimedialne.

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Web Application Firewall - potrzeba, rozwiązania, kryteria ewaluacji.

Ogólny plan przedmiotu. Strony WWW. Literatura BAZY DANYCH. Materiały do wykładu:

ROZSZERZAJĄC FUNKCJONALNOŚCI MEMCACHED

Normalizacja relacyjnych baz danych. Sebastian Ernst

Podręcznik Integracji

Specyfikacja interfejsów usług Jednolitego Pliku Kontrolnego

Wykonać Ćwiczenie: Active Directory, konfiguracja Podstawowa

edziennik Ustaw Opis architektury

Przed restartowaniem routera odłącz wszystkie urządzenia podłączone pod porty USB.

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

Przykładowa baza danych BIBLIOTEKA

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego

Indeksowanie full text search w chmurze

INSTRUKCJA KONFIGURACJI KLIENTA POCZTOWEGO

030 PROJEKTOWANIE BAZ DANYCH. Prof. dr hab. Marek Wisła

Projektowanie Systemów Informacyjnych

e-awizo SYSTEM POTWIERDZANIA DORĘCZEŃ POCZTY ELEKTRONICZNEJ

Wykład 2: Budowanie sieci lokalnych. A. Kisiel, Budowanie sieci lokalnych

Serwer SSH. Wprowadzenie do serwera SSH Instalacja i konfiguracja Zarządzanie kluczami

Funkcje backendu konfiguratora. Warszawa,

Aplikacja internetowa ebiling

Fiery Remote Scan. Uruchamianie programu Fiery Remote Scan. Skrzynki pocztowe

Audyt oprogramowania. Artur Sierszeń

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Wypożyczalnia VIDEO. Technologie obiektowe

Wstęp. Modele rejestrowania zdarzeń systemu

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

EJB 3.0 (Enterprise JavaBeans 3.0)

Podstawy projektowania aplikacji biznesowych w systemie SAP R/3

Microsoft SQL Server Podstawy T-SQL

Paweł Cieśla. Dokumentacja projektu

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

15. Funkcje i procedury składowane PL/SQL

dr inż. Jarosław Forenc

Programowanie obiektowe

Transkrypt:

Zaawansowane użycie Azure Storage Ewa Baćmaga Integral Technologies ewa.bacmaga@integral-tech.pl

Obiekty Azure Storage Blob Blob Tabela Table Kolejka Queue Napęd Drive Możliwość wykorzystania Windows Azure Storage do składowania plików wraz z towarzyszącymi im metadanymi. Zapewnia ogromnie skalowalny mechanizm składowania danych strukturalnych. Tabela Azure Storage jest zestawem encji, a każda encja jest zestawem właściwości. Zapewnia niezawodny sposób składowania i dostarczania komunikatów do aplikacji. Umożliwia wykorzystywanie w aplikacjach istniejących interfejsów API do sięgania do systemu plików dostępnego z trwałego napędu dołączonego sieciowo. Każdy taki napęd jest stronicowanym blob-em sformatowanym jako pojedynczy wolumin NTFS VHD.

Adresy dostępu do poszczególnych obiektów Azure Storage

Bloby Azure Storage Konto Storage Account Kontener Blob Container Dostęp do Azure Storage odbywa się za pośrednictwem konta składowania storage account Konto może zawierać wiele kontenerów na bloby Kontener zapewnia możliwość zgrupowania zestawu blobów. Nazwa kontenera funkcjonuje w zakresie konta składowania. Polityki wspóldzielenia prywatna lub publiczna. Z kontenerem mogą być związane jego metadane. Składowane są w postaci par <name, value>, maksymalnie 8KB na kontener. Blob Bloby są składowane i dostępne w obrębie kontenera. Z blobem mogą być związane jego metadane. Składowane są w postaci par <name, value>, maksymalnie 8KB na blob. Blob blokowy (block blob) Blob stronicowany (page blob) Sekwencja bloków Max 200GB Tablica stron Max 1TB

Tabele Azure Storage Konto Storage Account Tabela Table Dostęp do Azure Storage odbywa się za pośrednictwem konta składowania storage account. Konto może zawierać wiele tabel. Zawiera zestaw encji. Tabele dostępne są w obrębie konta. Encja zawiera zestaw właściwości. Encja Każda tabla ma dwie właściwości (Wiersz) PartitionKey oraz RowKey, które stanowią Entity unikalny klucz identyfikujący encję. Encja może zawierać do 255 właściwości. (Row) Połączony rozmiar wszystkich właściwości encji nie może przekraczać 1MB. Wlicza się w to nazwy właściwości, jak również rozmiar wartości właściwości oraz ich typy. Właściwość (Kolumna) Property (Cloumn) Pozwala składować pojedynczą wartość w encji.

Tabele Azure Storage PartitionKey Pierwsza kluczowa właściwość każdej tabeli. System automatycznie wykorzystuje PartitionKey do rozpraszania i równoważenia obciążenia przetwarzania encji tabeli w obrębie wielu serwerów. RowKey Druga kluczowa właściwość każdej tabeli. Jest to unikalny identyfikator encji w obrębie partycji, do której należy. Kombinacja PartitionKey i RowKey unikalnie identyfikuje encję w ramach tabeli. Timestamp Data ostatniej modyfikacji encji. Używana wewnętrznie przez Azure Storage dla celów optimistic concurrency. Próba jej modyfikacji przez użytkownika jest ignorowana. optimistic concurrency. Próba jej modyfikacji przez użytkownika jest ignorowana. Porządek sortowania Typy właściwości Tabele Windows Azure mają pojedynczy indeks, gdzie wszystkie encje tabeli są sortowane po PartitionKey, a następnie po RowKey. Oznacza to, że zapytania specyfikujące te właściwości są bardziej efektywne, a ich rezultaty są zwracane posortowane po PartitionKey, a następnie po RowKey. PartitionKey i RowKey są typu string Inne właściwości mogą być następujących typów: Binary, Bool, DateTime, Double, GUID, Int, Int64, String. Brak ustalonego schematu Dla tabel Azure Storage nie jest zadawany żaden schemat. Wszystkie właściwości składowane są w postaci par <name, typed value>. Dwie encje w tej samej tabeli mogą mieć różne właściwości.

Kolejki Azure Storage Konto Storage Account Kolejka Queue Komunikat Message Dostęp do Azure Storage odbywa się za pośrednictwem konta składowania storage account. Konto może zawierać wiele kolejek. Kolejka zawiera wiele komunikatów. Nie ma bezpośredniego limitu na liczbę komunikatów w kolejce. Komunikat składowany jest w kolejce co najwyżej przez tydzień. Z kolejką mogą być związane jej metadane. Składowane są w postaci par <name, value>, maksymalnie 8KB na kolejkę. Komunikaty są składowane w kolejkach. Rozmiar pojedynczego komunikatu nie może przekraczać 8KB. Rozwiązaniem na składowanie większej ilości danych może być zapisanie w komunikacie jedynie nazwy blob-a lub informacji identyfikującej encję w tabeli, gdzie dane takie zostaną zapisane.

Kolejki Azure Storage widoczność komunikatów Producent 1 Worker 1 M1 Front End (ASP.NET, ) M4 M2 M3 M1 M3 M1 Back End (Worker) Producent 2 Worker 2 M3 M1 1. W1 przetwarza komunikat M1 2. M1 niewidoczny na 30 sek 3. W2 przetwarza komunikat M3 4. M3 niewidoczny na 30 sek 5. W2 poprawnie zakończył przetwarzanie M3 6. W2 kasuje komunikat M3 z kolejki 7. Awaria W1 przetwarzanie M1 nie zakończyło się poprawnie 8. M1 stanie się z powrotem widoczny dla W2

Przykładowy scenariusz użycia kolejek - spójność między tabelami Usuwanie (fora/posty, kanały/komunikaty, etc.) FrontEnd usuń Forum11 usuń Forum05 usuń Forum01 Worker usuwania usuń Forum01 FrontEnd Wyjęcie z kolejki komunikatu usuńforum01 Usunięcie Forum01 z tabeli Fora Usuwanie postów Forum01 z tabeli Posty Usunięcie komunikatu usuńforum01 z kolejki Posty IdentyfikatorPosta Forum01Post01 Forum01Post01 Forum01Post01 Forum05Post01 Fora IdentyfikatorForum Forum01 Forum02 Forum05

Przykładowy scenariusz użycia kolejek - spójność między tabelami Usuwanie - wznowienie po niepowodzeniu FrontEnd usuń Forum11 usuń Forum05 usuń Forum01 Worker usuwania usuń Forum01 FrontEnd Wyjęcie z kolejki komunikatu usuńforum01 i rozpoczęcie kasowania Wyjątek po kasowaniu Forum01 i Forum01Post01 Komunikat usuńforum01 jest znów widoczny w kolejce Ponowne wyjęcie z kolejki komunikatu usuńforum01 Powtórzenie operacji Posty IdentyfikatorPosta Forum01Post01 Forum01Post01 Forum01Post01 Forum05Post01 Fora Worker usuń usuwania Forum01 IdentyfikatorForum Forum01 Forum02 Forum05

Partycje Każdy obiekt danych Azure Storage (blob, encja w tabeli, komunikat w kolejce) posiada klucz identyfikujący partycję. Używane są następujące klucze partycji: PartitionKey Jakie są tego konsekwencje? Blob NazwaKontenera + NazwaBloba Ponieważ nazwa bloba stanowi klucz partycji, dostęp do różnych blobów jest rozkładany i równoważony między serwerami. Encja NazwaTabeli + PartitionKey Każda encja w tabeli użytkuje PartitionKey zadawany na poziomie aplikacji wykorzystującej tabele Azure Storage. Oznacza to, że Azure równoważy obciążenie przetwarzania encji w obrębie tabeli między różnymi serwerami na podstawie wartości PartitionKey. Encje w obrębie tej samej partycji, czyli obsługiwane przez ten sam serwer partycji, mogą być przetwarzane transakcyjnie. Komunikat NazwaKolejki Ponieważ klucz partycji w przypadku komunikatów stanowi nazwa kolejki, wszystkie komunikaty w danej kolejce przetwarzane są przez ten sam, pojedynczy serwer partycji.

3-warstwowa architektura Azure Storage Warstwa Front-End (FE) Odbiera przychodzące żądania, dokonuje ich uwierzytelnienia i autoryzacji, a następnie przekierowuje do odpowiedniego serwera partycji. Warstwa partycji Zarządza partycjami wszystkich obiektów Azure Storage. Każdy obiekt (blob, encja w tabeli, komunikat w kolejce) należy do pojedynczej partycji, a każda partycja jest obsługiwana przez tylko jeden serwer partycji. Zarządza tym, która partycja jest obsługiwana przez który serwer partycji. Zapewnia automatyczne równoważenie obciążenia serwerów partycji obsługą partycji, tak aby zapewnić przepustowość wymaganą przez bloby, tabele, czy kolejki. Pojedynczy serwer partycji może obsługiwać wiele partycji. Warstwa DFS (Distributed File System) rozproszony i replikowany system plików Zapewnia składowanie danych na dyskach. Odpowiada za rozpraszanie i replikowanie danych między wieloma serwerami, aby zapewnić ich trwałe składowanie. Dane są składowane na warstwie DFS, a wszystkie serwery DFS (i wszystkie dane składowane na warstwie DFS) są dostępne z każdego serwera partycji.

Zaprojektowana skalowalność (scalability targets) dla konta Azure Storage Pojemność Do 100 TBs Transakcje Do 5000 encji/komunikatów/blobów na sekundę Przepustowość Do 3 GB na sekundę Zaprojektowana wydajność (performance targets) dla pojedynczej partycji Pojedyncza kolejka Pojedyncza partycja tabeli Pojedynczy blob Wszystkie komunikaty w kolejce dostępne są za pośrednictwem pojedynczej partycji. Kolejki są zaprojektowane tak, aby pojedyncza była w stanie przetworzyć do 500 komunikatów na sekundę Wszystkie encje w tabeli mające ten sam klucz partycji przetwarzane są w ramach tej samej, pojedynczej partycji, przy czym większość tabel ma wiele partycji. Zaprojektowana przepustowość dla pojedynczej partycji wynosi: do 500 encji na sekundę Kluczem partycji dla blobów jest wartość NazwaKontenera + NazwaBloba, stąd też pojedynczy blob przetwarzany jest w ramach pojedynczej partycji. A zatem przetwarzanie rozpraszane jest między serwerami na poziomie pojedynczych blobów. Zaprojektowana przepustowość dla pojedynczego bloba wynosi: Do 60 MB na sekundę

Tabele Azure Storage dobór klucza partycji PartitionKey Zagadnienia do rozważenia przy doborze klucza partycji PartitionKey: Możliwość wykorzystania transakcji na grupie encji Entity Group Transactions Skalowalność Wydajność zapytań

Tabele Azure Storage - Entity Group Transactions Entity Group Transaction zapewnia transakcję atomową na grupie encji w pojedynczej tabeli z tym samym identyfikatorem partycji PartitionKey czyli w obrębie tej samej partycji. Pojedynczy pakiet transakcyjny (batch transaction) nie może przekraczać 100 encji. Rozmiar żądania pakietu transakcyjnego nie może przekraczać 4MB. W pojedynczym pakiecie transakcyjnym encja nie może się powtarzać (tzn. encje muszą mieć inne wartości właściwości RowKey).

Tabele Azure Storage - Skalowalność Pojedyncza partycja może serwować do 500 encji na sekundę. Jeżeli wymagania aplikacji są wyższe, konieczne jest takie jej zaprojektowanie, aby żądania przetwarzania encji mogły być rozproszone między różnymi partycjami. Użytkowanie pojedynczej partycji (takie samo PartitionKey dla każdej encji tabeli) Zalety: Przetwarzanie transakcyjne (Entity Group Transactions) do 100 encji insert/update/delete w pojedynczym pakiecie transakcyjnym. Zapytania dotyczące zakresu wierszy (row range query) mogą być szybkie, zależnie od rozmiaru zakresu zawsze przetwarzane będą przez pojedynczy serwer partycji. Wady: Nie skaluje się dobrze w przypadku przekroczenia limitów serwera partycji (partycja jest zawsze obsługiwana przez pojedynczy serwer) Nie powinno być stosowane w scenariuszach, gdzie przewidywane jest duże obciążenie. Użytkowanie oddzielnej partycji dla każdej encji (nowe PartitionKey dla każdej encji) Zalety: Dobre skalowanie ze względu na rozłożenie obciążenia między wiele partycji Wady: Zapytania dotyczące zakresu wierszy (row range query) są kosztowne powodują pełen scan tabeli Nie może być użyte przetwarzanie transakcyjne (Entity Group Transactions)

Tabele Azure Storage Efektywność zapytań PartitionKey == SciFi and RowKey == Star Wars Najefektywniejsze zapytanie wyszukiwania pojedynczej encji PartitionKey == SciFi and Sphere RowKey Star Wars Skanowanie encji w pojedynczej partycji, wydajność zależy od liczby encji, po których przebiaga RowKey w podanym zakresie. Action PartitionKey Thriller Skanowanie encji w obrębie wielu partycji. Wydajność zależy od liczby encji w przetwarzanych partycjach. PartitionKey == Action PartitionKey == Thriller Aktualna implementacja predykatu OR LINQ nie jest optymalizowana pod kątem skanowania dwóch partycji, stąd takie zapytanie zrealizowane będzie przez pełen scan tabeli. W takim przypadku rekomendowane jest wykonanie równoległe dwóch zapytań i połączenie wyników po stronie klienta. Cars RowKey Star Wars Brak określenia PartitionKey skutkuje skanowaniem całej tabeli.

Przykładowy scenariusz aplikacja dla wypożyczalni filmów CASE STUDY Cel Opracowanie rozwiązania dla stworzenia aplikacji dla wypożyczalni filmów. Konieczne jest odnotowywanie wypożyczeń oraz utrzymywanie licznika wypożyczeń dla danego Klienta. Wymagania obejmują: Utrzymanie informacji o koncie Klienta ID_Konta (identyfikator konta Klienta) NazwaKlienta (nazwa Klienta) Adres (adres Klienta) LiczbaWypozyczen (liczba wypożyczeń) Utrzymanie informacji o wypożyczeniach filmu ID_Konta (identyfikator konta Klienta) ID_Filmu (identyfikator filmu dalej w przykładzie tytuł filmu) DataWypozyczenia (data wypożyczenia) DataZwrotu (data zwrotu)

Przykładowy scenariusz aplikacja dla wypożyczalni filmów CASE STUDY Rozwiązanie 1 Utrzymywanie dwóch tabel Azure Storage: Wypozyczenia oraz Konta Tabela Wypozyczenia przechowuje informacje dotyczące aktualnie wypożyczonych filmów. Tabela Konta przechowuje między innymi liczbę filmów wypożyczonych przez każdego Klienta wypożyczalni. Aplikacja musi mieć opracowane i zaimplementowane (w kodzie) mechanizmy obsługi sytuacji, w krórej wstawienie encji do tabeli Wypozyczenia udaje się, ale niepowodzeniem kończy się uaktualnienie tabeli Konta. Możliwe rozwiązanie z zastosowaniem Windows Azure Storage to zastosowanie kolejki do zapewnienia spójności.

Przykładowy scenariusz aplikacja dla wypożyczalni filmów CASE STUDY PartitionKey (ID_Wypozyczalni) RowKey (ID_Konta) Rozwiązanie 1 (cd) Obsługa spójności uaktualniania przy zastosowaniu kolejki 01 00123 Jan Nowak Konta NazwaKlienta Adres LiczbaWypozyczen Wykonaj: ++1 ID_Konta: 00123 12 kolejka do worker-a kont Wykonaj: ++1 ID_Konta: 00123 Worker uaktualniania kont Wykonaj: ++1 ID_Konta: 00123 FrontEnd zarządzania wypożyczeniami PartitionKey (ID_Konta) RowKey (ID_Filmu) DataWypozyczenia Wypozyczenia DataZwrotu 00123 Rejs 2011-06-10 2011-06-17 00123 Miś 2011-06-16 2011-06-23

Przykładowy scenariusz aplikacja dla wypożyczalni filmów CASE STUDY PartitionKey (ID_Wypozyczalni) RowKey (ID_Konta) Rozwiązanie 1 (cd) Obsługa spójności uaktualniania przy zastosowaniu kolejki, awaria workera 01 00123 Jan Nowak Konta NazwaKlienta Adres LiczbaWypozyczen Wykonaj: ++1 ID_Konta: 00123 12 kolejka do worker-a kont Wykonaj: ++1 ID_Konta: 00123 Worker uaktualniania kont Wykonaj: ++1 ID_Konta: 00123 FrontEnd zarządzania wypożyczeniami PartitionKey (ID_Konta) RowKey (ID_Filmu) DataWypozyczenia Wypozyczenia DataZwrotu 00123 Rejs 2011-06-10 2011-06-17 00123 Miś 2011-06-16 2011-06-23

Przykładowy scenariusz aplikacja dla wypożyczalni filmów CASE STUDY Rozwiązanie 2 Składowanie encji typu Wypożyczenie i Konto w jednej tabeli Azure ID_Konta jako PartitionKey Dzięki temu można aktualizować sumę i dodawać nowe wypożyczenia używając Entity Group Transaction RowKey poprzedzony kodem typu encji (K = Konto, W = Wypożyczenie) RowKey dla encji typu Konto RowKey dla encji typu Wypożyczenie [TypEncji]_[ID_Konta] [TypEncji]_[ID_Filmu]

Przykładowy scenariusz aplikacja dla wypożyczalni filmów PartitionKey (ID_Konta) CASE STUDY RowKey (TypEncji_*) Rozwiązanie 2 (cd) Składowanie encji typu Wypożyczenie i Konto w jednej tabeli Azure Storage TypEncji Nazwa Klienta Adres Liczba Wypozy czen ID_Filmu KontaWypozyczenia Data Wpozy czenia 00123 K_00123 K Jan Nowak Pereca Data Zwrotu 00123 W_Rejs W Rejs 2011-06-10 2011-06-17 00123 W_Miś W Miś 2011-06-16 2011-06-23 2 Azure Table może mieć różne kolekcje encji w jednej tabeli Właściwości encji typu Wypożyczenie nie są ustawiane dla encji typu Konto i odwrotnie

Przykładowy scenariusz aplikacja dla wypożyczalni filmów PartitionKey (ID_Konta) CASE STUDY RowKey (TypEncji_*) Rozwiązanie 2 (cd) Wstawianie i uaktualnianie encji typu Wypożyczenie i Konto w jednej tabeli Azure Storage TypEncji Nazwa Klienta Adres Liczba Wypozy czen ID_Filmu KontaWypozyczenia Data Wpozy czenia 00123 K_00123 K Jan Nowak Pereca Data Zwrotu 00123 W_Rejs W Rejs 2011-06-10 2011-06-17 00123 W_Miś W Miś 2011-06-16 2011-06-23 00123 W_Killer W Killer 2011-06-16 2011-06-25 23 Zarządca wypożyczeń Entity Group Transaction w obrębie tej samej partycji:» wstawienie nowej encji typu Wypożyczenie» uaktualnienie encji typu Konto

Przykładowy scenariusz system prowadzenia logów aplikacji CASE STUDY Cel Opracowanie systemu prowadzenia log ów aplikacji, w ramach którego możliwe byłoby dokonywanie rejestrowania błędów oraz użycia przez każdą instancję każdego komponentu rozproszonej aplikacji. Rozproszona aplikacja składa się z szeregu różnych komponentów: Ról web owych portalu Klientów Ról typu worker przetwarzania danych Ról web owych na potrzeby raportowania Pozostałe założenia: W danym wdrożeniu będzie działać wiele instancji każdej roli Każdy komponent (typ roli) ma przypisaną unikalną nazwę Każda instancja danego komponentu ma unikalny identyfikator instancji

Przykładowy scenariusz system prowadzenia logów aplikacji CASE STUDY Możliwe rozwiązania Zbudowanie wymaganego sysytemu prowadzenia log ów z wykorzystaniem tabeli Azure Storage Opcje doboru właściwego klucza partycji PartitionKey: PartitionKey = Component_Name Każdy komponent wykorzystywał będzię własną partycję. Problemy mogą pojawić się w przypadku, gdy pojedynczy komponent logował będzie wiele komunikatów przez wiele działających jego instancji. Taka gorąca partycja może osiągnąć limity przepustowości dla pojedynczej partycji. PartitionKey = Component_Name + Instance_Id Każda instancja komponentu wykorzystywać będzie własną partycję. Rozwiązanie dużo lepsze pod kątem skalowania. Problemy mogą pojawić się w przypadku, gdy dla danego komponentu każda jego instancja wykonuje intensywne logowanie komunikatów. PartitionKey = Component_Name + Instance_Id + Bucket_Id W przypadku zajścia powyższego problemu możliwe jest zastosowanie rozproszenia komunikatów logowanych przez każdą instancję komponentu do oddzielnych partycji przez dokonanie losowego ich rodziału na kubełki, których liczba może zostać wyznaczona przez oszacowanie maksymalnego wymaganego obciążenia.

Przykładowy scenariusz potwierdzanie 2-fazowe Koordynator potwierdzanie 2-fazowe Rejestracja Głosuj Mój głos Commit/Abort Uczestnik 1 Rejestracja Głosuj Mój głos Commit/Abort Rejestracja Głosuj Mój głos Commit/Abort Uczestnik 2 Uczestnik 3

Przykładowy scenariusz potwierdzanie 2-fazowe (commit) txid timeout 2011-06-16 15:35:10 liczba_ucz oddano_glosow czy_był_głos_abort rezultat 3 2013 nie commited commit głosuj kolejka uczestnika 1 UCZESTNIK 1 commit głosuj KOORDYNATOR commit głosuj kolejka uczestnika 2 UCZESTNIK 2 commit głosuj commit głosuj kolejka uczestnika 3 UCZESTNIK 3 commit głosuj kolejka koordynatora głosuję na TAK

Przykładowy scenariusz potwierdzanie 2-fazowe (abort) txid timeout liczba_ucz oddano_glosow czy_był_głos_abort rezultat 3 013 2 nie aborted 2011-06-16 15:35:10 tak głosuj abort kolejka uczestnika 1 UCZESTNIK 1 głosuj abort KOORDYNATOR głosuj abort kolejka uczestnika 2 UCZESTNIK 2 głosuj abort głosuj abort kolejka uczestnika 3 UCZESTNIK 3 głosuj abort kolejka koordynatora głosuję na TAK NIE

Przykładowy scenariusz potwierdzanie 2-fazowe (abort awaria uczestnika) txid timeout 2011-06-16 15:35:10 liczba_ucz oddano_glosow czy_był_głos_abort rezultat 3 01 2 nie aborted głosuj abort kolejka uczestnika 1 UCZESTNIK 1 głosuj abort KOORDYNATOR głosuj abort kolejka uczestnika 2 UCZESTNIK 2 głosuj abort głosuj abort kolejka uczestnika 3 głosuj UCZESTNIK 3 głosuj abort kolejka koordynatora głosuję na TAK

Dziękuję za uwagę ewa.bacmaga@integral-tech.pl