Architektura Doświadczenia i wnioski. Amazon Dynamo. Tomasz Klukowski 2.04.2009



Podobne dokumenty
Architektura i mechanizmy systemu

Klient-Serwer Komunikacja przy pomocy gniazd

Bazy danych NoSQL. wprowadzenie. Szymon Francuzik Poznań,

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Distributed Hash Tables i ich zastosowania

Stan globalny. Krzysztof Banaś Systemy rozproszone 1

Keszowanie i systemy peer-to-peer. Paulina Kania i Łukasz Osipiuk

Systemy Rozproszone. Zagadnienia do egzaminu.

Problemy niezawodnego przetwarzania w systemach zorientowanych na usługi

Wprowadzenie. Dariusz Wawrzyniak 1

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

Replikacja bazy danych polega na kopiowaniu i przesyłaniu danych lub obiektów bazodanowych między serwerami oraz na zsynchronizowaniu tych danych w

Bazy danych 2. Wykład 1

System plików warstwa fizyczna

System plików warstwa fizyczna

System plików warstwa fizyczna

Bazy danych NoSQL. Szymon Francuzik Poznań,

Pojęcie bazy danych. Funkcje i możliwości.

Rozproszone bazy danych. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

Wybrane działy Informatyki Stosowanej

Sposoby klastrowania aplikacji webowych w oparciu o rozwiązania OpenSource. Piotr Klimek. piko@piko.homelinux.net

Tworzenie aplikacji bazodanowych

Projekt Fstorage. Łukasz Podkalicki Bartosz Kropiewnicki

System Rozproszone Komunikator Dokumentacja. Maciej Muszkowski Jakub Narloch

Enkapsulacja RARP DANE TYP PREAMBUŁA SFD ADRES DOCELOWY ADRES ŹRÓDŁOWY TYP SUMA KONTROLNA 2 B 2 B 1 B 1 B 2 B N B N B N B N B Typ: 0x0835 Ramka RARP T

Projektowanie architektury systemu rozproszonego. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Java Developers Day. Implementacja ESB przy użyciu Mule. ESB Mule Obsługa zamówień DEMO

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

Nieustanny rozwój. Tomasz Leśniewski

Od czego zacząć przy budowaniu środowisk wysokiej dostępności?

Systemy rozproszone. na użytkownikach systemu rozproszonego wrażenie pojedynczego i zintegrowanego systemu.

IBM DCE/DFS. Mikołaj Gierulski. 17 stycznia 2003

Koncepcja wirtualnej pracowni GIS w oparciu o oprogramowanie open source

Serwery LDAP w środowisku produktów w Oracle

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

Przykłady DFS z lotu ptaka :) NFS AFS Coda GoogleFS ZFS

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

StoreOnce - To więcej niż Backup2Disk

Middleware wprowadzenie października 2010

Budowa odpornych na awarie systemów w oparciu o Consul a

Bazy danych w sterowaniu

Middleware wprowadzenie października Dariusz Wawrzyniak (IIPP) 1

Zadanie 1: Protokół ślepych podpisów cyfrowych w oparciu o algorytm RSA

Skąd dostać adres? Metody uzyskiwania adresów IP. Statycznie RARP. Część sieciowa. Część hosta

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

Wybrane działy Informatyki Stosowanej

- pierwszy w Polsce Hosting zorientowany na lokalizację Klienta

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

16MB - 2GB 2MB - 128MB

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

Odczyty 2.0 Spis treści

Wybrane działy Informatyki Stosowanej

Standard określania klasy systemu informatycznego resortu finansów

Matematyka od zaraz zatrudnię

2 Kryptografia: algorytmy symetryczne

Szczegółowy opis przedmiotu zamówienia:

Koordynacja procesów w środowisku rozproszonym

Routing. mgr inż. Krzysztof Szałajko

Wykład I. Wprowadzenie do baz danych

SSL (Secure Socket Layer)

Podstawy Informatyki. Metody dostępu do danych

katalog Usługi internetowe SERWERY WIRTUALNE

Zapewnienie wysokiej dostępności baz danych. Marcin Szeliga MVP SQL Server MCT

Praktyczne wykorzystanie mechanizmów zabezpieczeń w aplikacjach chmurowych na przykładzie MS Azure

Czas w systemach rozproszonych. Krzysztof Banaś Systemy rozproszone 1

Liczba godzin 1,2 Organizacja zajęć Omówienie programu nauczania 2. Tematyka zajęć

Potrzeba instalacji w napędach SSD akumulatorów ograniczała jednak możliwości miniaturyzacji takich napędów.

Działanie komputera i sieci komputerowej.

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

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

Skalowalne aplikacje internetowe wysokiej dostępności

PHP: bazy danych, SQL, AJAX i JSON

Dokumentacja techniczna. Młodzieżowe Pośrednictwo Pracy

System plików ReiserFs

Sieci komputerowe Warstwa transportowa

Nowe aplikacje i usługi w środowisku Grid

7. zainstalowane oprogramowanie zarządzane stacje robocze

Opis Architektury Systemu Galileo

5. Model komunikujących się procesów, komunikaty

ZAŁĄCZNIK NR 3 OPIS PRZEDMIOTU ZAMÓWIENIA DOTYCZĄCY WDROŻENIA PLATFORMY ZAKUPOWEJ

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

Architektura komputerów

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

KONCEPCJA WYKORZYSTANIA TECHNOLOGII APPLET- JAVA W TWORZENIU

Opis protokołu RPC. Grzegorz Maj nr indeksu:

na podstawie bazy Oracle NoSQL

Sieci komputerowe. Wykład 5: Warstwa transportowa: TCP i UDP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

2.1. System kryptograficzny symetryczny (z kluczem tajnym) 2.2. System kryptograficzny asymetryczny (z kluczem publicznym)

PRACA INŻYNIERSKA IMPLEMENTACJA MOBILNEGO KLIENTA BANKU ZABEZPIECZONEGO TOKENEM

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

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

Projektowanie obiektowe Wzorce projektowe

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

1 Instalowanie i uaktualnianie serwera SQL Server

*Grafomania z. Neo4j. Praktyczne wprowadzenie do grafowej bazy danych.

Jarosław Kuchta Projektowanie Aplikacji Internetowych. Projektowanie warstwy danych

Systemy rozproszone System rozproszony

INFRA. System Connector. Opis systemu

współbieżność - zdolność do przetwarzania wielu zadań jednocześnie

Transkrypt:

2.04.2009

Opis problemu Decyzje podjęte przez twórców Dynamo Plan prezentacji 1 Wstęp Opis problemu Decyzje podjęte przez twórców Dynamo 2 3

Opis problemu Decyzje podjęte przez twórców Dynamo Lista życzeń Potrzebujemy magazynu danych dostępny non-stop odporność na awarie sprzętowe brak przerw zwiazanych z replikacja i uspójnianiem danych wysoce skalowalny operacje wykonywane możliwie szybko (Jak to mierzyć?) elastyczny będa z niego korzystać różne web serwisy każdy wymaga od magazynu czegoś nieco innego łatwy w obsłudze

Opis problemu Decyzje podjęte przez twórców Dynamo Czemu relacyjna baza danych odpada? Słabo skalowalna Spójność jest ważniejsza od dostępności Wszystkie zapytania po kluczu głównym Konfiguracja wymaga dużej wiedzy i doświadczenia

Opis problemu Decyzje podjęte przez twórców Dynamo Założenia i wymagania Dynamo Model zapytań Po kluczu głównym Dane trzymane w postaci binarnej Każda operacja dotyczy dokładnie jednego wpisu Żadnych relacji między danymi Zakłada się, że porcja danych jest < 1 MB ACID Zapewnienie ACID powodowałoby słaba dostępność Nie zapewnia izolacji Adresowany dla aplikacji wymagajacych słabej spójności

Opis problemu Decyzje podjęte przez twórców Dynamo Założenia i wymagania Dynamo Wydajność Każda usługa korzystajaca z Dynamo ma inne wymagania Wymagania w konkretnej instancji określone na podstawie SLA (Service Level Agreement) Inne założenia Dynamo będzie używane tylko wewnętrznie Środowisko działania jest przyjazne Nie trzeba autoryzacji ani autentykacji Każdy serwis działa na własnej instancji Dynamo

Opis problemu Decyzje podjęte przez twórców Dynamo Service Level Agreement Formalny kontrakt między klientem a usługa Dotyczy cech zwiazanych z funkcjonowaniem systemu Oczekiwana ilość żadań dla konkretnego API Oczekiwany czas realizacji żadania np. usługa gwarantuje, że w ciagu 300ms odpowie na 99,9% żadań przy szczytowym obciażeniu 500 żadań na sekundę

Opis problemu Decyzje podjęte przez twórców Dynamo Service Level Agreement SLA pełni ważna rolę w rozproszonej architekturze Amazona By zrealizować żadanie usługi generuja własne żadania do innych usług Opóźnienie na którymś poziomie powoduje opóźnienie realizacji całości żadania Każdy (a nie tylko statystyczny) użytkownik ma być zadowolony z działania systemu

Opis problemu Decyzje podjęte przez twórców Dynamo Inne decyzje Rozwiazywanie konfliktów w spójności danych przy odczytach (write ma być zawsze dostępny i nieodrzucany) Inkrementalna skalowalność Symetria - wszystkie węzły pełnia tę sama rolę Decentralizacja Heterogeniczność - jeśli jakiś serwer jest wydajniejszy, należy to wykorzystać

Mechanizmy użyte by zapewnić kluczowe cechy Problem Technika Zalety Rozpraszanie Consistent hashing Inkrementalna skalowalność danych Wysoka Zegary wektorowe z Rozmiar wersji nie zależy dostępność uzgadnianiem podczas od częstości uak- zapisów odczytów tualnienia danych Czasowe Sloppy Quorum oraz Zapewnia wysoka awarie hinted handoff dostępność i trwałość kiedy część replik nie jest dostępych

Mechanizmy użyte by zapewnić kluczowe cechy Problem Technika Zalety Przywracanie Antyentropia używajaca Synchronizuje robieżne po trwałej drzew Merkle a repliki w tle awarii Wykrywanie Protokół członkostwa Zapewnia symetrię członkostwa i awarii i wykrywania awarii oparty na algorytmi plotkujacym i brak centralnego rejestru do trzymania informacji o członkostwie i żywotności wę- poszczególnych złów

Interfejs Wstęp get(key) Znajduje repliki obiektu zwiazanego z kluczem Zwraca pojedynczy obiekt lub listę obiektów w konfliktujacych wersjach razem z kontekstem put(key, context, object) Na podstawie wartości klucza zapisuje replikę obiektu na dysk Kontekst koduje metadane o obiekcie (wersja obiektu, itp.) Kontekst jest trzymany razem z obiektem

Klucz Wstęp Dynamo traktuje klucz i obiekt dostarczony przez wołajacego jako tablicę bajtów Na podstawie hasha MD5 z klucza, generuje 128-bitowy identyfikator Identyfikator jest użyty by ustalić węzły w systemie, które sa odpowiedzialne za obsługę tego klucza.

Algorytm partycjonowania Dynamo ma skalować się inkrementalnie Potrzebujemy mechanizmu dynamicznie dzielacego dane między węzły Consistent hashing rozkłada obciażenia między węzły

Consistent hashing Wstęp Wyniki funkcji haszujacej traktowane jako pierścień Najwyższa wartość haszu przechodzi na najmniejsza Każdy węzeł losuje wartość z przestrzeni haszów, która oznacza pozycje na pierścieniu Dane znajdujemy haszujac klucz, znajdujac pozycję tego hasza na pierścieniu i ruchu zgodnym ze wskazówkami zegara aż do napotkania pierwszego węzła

Consistent hashing Wstęp Każdy węzeł odpowiada za dane między nim, a jego poprzednikiem Zmiany ilości węzłów dotycza tylko bezpośrednich sasiadów Losowość prowadzi do niejednolitego rozkładu danych i obciażeń Nie wykorzystuje różnej wydajności węzłów

Wariant Consistent hashing w Dynamo Każdy węzeł otrzymuje wiele punktów na pierścieniu Koncepcja węzłów wirtualnych (tokenów) Wyglada jak zwykły węzeł Każdy węzeł może być odpowiedzialny za wiele wirtualnych

Wariant Consistent hashing w Dynamo Kiedy węzeł się dezaktywuje, obciażenie jest równomiernie rozdzielane między pozostałe węzły Kiedy się uaktywnia, dostaje z grubsza po tyle samo tokenów do obsługi od każdego innego węzła Ilość tokenów na węzeł jest ustalana na podstawie jego pojemności, kosztu i fizycznej infrastruktury

Replikacja Wstęp Każda porcja danych replikowana na N hostów N - parametr ustalany per instancja Dynamo Zarzadca porcji danych wyznaczany na podstawie haszu klucza Pozostałe to N-1 następników (niewirtualnych) zgodnie z ruchem wskazówek zegara

Replikacja Wstęp Listę fizycznych węzłów odpowiedzialnych za trzymanie ustalonego klucza nazywamy lista preferencji Każdy węzeł potrafi określić które węzły maja być na tej liście dla określonego klucza Lista preferencji zawiera więcej niż N węzłów na wypadek awarii

Dynamo zapewnia tylko końcowa spójność, co pozwala na asynchroniczna aktualizację replik Wywołanie put() może się zakończyć przed aktualizacja wszystkich replik, przez co następujace get() może zwrócić obiekt sprzed aktualizacji Gdy nie ma awarii, czas propagowania aktualizacji jest ograniczony W niektórych przypadkach (pady serwerów, podział sieci) aktualizacje moga nie dotrzeć do wszystkich replik w założonym czasie

Niektóre aplikacje w platformie Amazona moga tolerować takie niespójności, np: Akcja dodaj do koszyka nigdy nie może zostać odrzucona, ale jeśli dodamy do starszej wersji koszyka, to operacja dalej jest znaczaca i powinna zostać zachowana Nie powinno to wyrugować obecnie niedostępnego stanu koszyka, która również może zawierać zmiany, które powinny zostać zachowane Gdy klient chce dodać/usunać obiekt z koszyka i ostatnia wersja koszyka nie jest dostępna, obiekt jest dodawany/usuwany do starszej wersji Konflikty wersji sa rozwiazywane później

By zapis był zawsze akceptowany, Dynamo traktuje wynik modyfikacji jako nowa, niezmienna wersję danych W tym samym czasie w systemie może być wiele wersji tego samego obiektu Zazwyczaj nowe wersje nakładaja się na wcześniejsze i system sam potrafi określić ważna wersję (uzgadnianie syntaktyczne)

W wyniku awarii lub równoczesnych zapisów, moga pojawić się kilka wersji będacych w konflikcie W takim wypadku system nie może pogodzić wersji i to klient musi je uzgodnić (uzgadnianie semantyczne) Aplikacje korzystajace z Dynamo powinny być przygotowane na otrzymanie wielu różnych wersji tego samego obiektu

Vector clocks Wstęp Dynamo używa zegarów wektorowych, by wyłapać wynikanie między różnymi wersjami tego samego obiektu Zegar wektorowy to lista par (węzeł, licznik) Jeden zegar zwiazany z wszystkimi wersjami wszystkich obiektów Na jego podstawie wiemy, czy to wersje równoległe, czy jedna powstała z drugiej

Vector clocks Wstęp Jeśli wszystkie liczniki pierwszego obiektu sa mniejsze niż odpowiadajace im liczniki drugiego obiektu, pierwszy jest przodkiem drugiego i można go zapomnieć W p.p. mamy konflikt wersji, który trzeba rozwiazać

Konflikt wersji Wstęp Podczas aktualizacji, trzeba podać, która wersję aktualizujemy Pole context zawiera m.in. informację o zegarze wektorowym Jeśli powstaje konflikt wersji, jest on rozwiazywany przy odczycie

Konflikt wersji Wstęp Logika aplikacji korzystajacej z Dynamo musi na podstawie zawartości i kontekstu umieć uzgodnić wersje Po uzgodnieniu wersji przez klienta, jest ona zapisywana w Dynamo Wszystkie dotychczasowe rozgałęzienia znikaja i obowiazuje od teraz wersja uzgodniona

Przykład Wstęp

Zegary wektorowe Wstęp Potencjalnie rozmiar zegara wektorowego stale rośnie, gdy zapisy sa koordynowane przez wiele różnych węzłów W praktyce bardzo rzadko, bo koordynator zazwyczaj jest jednym z N pierwszych na liście preferencji Dynamo ogranicza rozmiar zegara

Zegary wektorowe Wstęp Do pary (węzeł, licznik) dodajemy jeszcze timestamp zmiany Gdy zegar przekroczy ustalony rozmiar, najstarszy wpis jest usuwany Może to prowadzić do nieefektywności w uzgadnianiu, bo nie zauważymy wynikania między wersjami Problem jeszcze nigdy nie pojawił się w środowisku produkcyjnym, więc się nim nie przejmuja

Operacje get() i put() Strategie wybrania węzła - koordynatora: Skorzystanie z load-balancera, który nam go wskaże Nie trzeba linkować do aplikacji fragmentu kodu Dynamo Skorzystanie z biblioteki klienckiej, świadomej podziału danych, która kieruje żadania bezpośrednio do odpowiednich koordynatorów Zapewnia niższe opóźnienia, bo omijamy krok przekierowania

Operacje get() i put() Koordynator - zazwyczaj jeden z N pierwszych węzłów na liście preferencji Load balancer może skierować do węzła, który nie jest jednym z N pierwszych Wówczas węzeł ten przekieruje do kogoś z N pierwszych Operacje dotycza N pierwszych zdrowych węzłów z listy preferencji

Operacje get() i put() Do zachowania spójności stosuje się protokół podobny do tych z quorum systems Dwie zmienne: R oraz W to minimalna ilość węzłów do udanego odczytu (R) i zapisu (W) R + W > N Zazwyczaj R < N, W < N, by zminimalizować opóźnienia

Operacja put() Wstęp Koordynator tworzy nowy obiekt i generuje mu zegar wektorowy Zapisuje go lokalnie i wysyła do N pierwszych osiagalnych węzłów z listy preferencji Jeśli otrzyma co najmniej W - 1 odpowiedzi, uważamy zapis za udany

Operacja get() Wstęp Koordynator prosi N pierwszych osiagalnych węzłów z listy preferencji o wszystkie wersje obiektu jakie maja Następnie czeka na R odpowiedzi i próbuje uzgadniać wersje Wysyła wszystkie wersje, których nie dało się uzgodnić do klienta Jeśli było ich więcej, klient sam je uzgadnia, a następnie nowa, uzgodniona wersja jest zapisywana

Awarie Wstęp Gdyby zastosować ten system w tradycyjny sposób, byłby on niedostępny przy awarii serwerów i miałby zmniejszona trwałość Stad zamiast pierwszych N węzłów, używamy pierwszych N zdrowych i stosujemy tzw. hinted handoff

Awarie - hinted handoff Niech A, B, C, D -pierwsze 4 węzły z listy preferencji, N = 3, A - ma awarię, reszta działa Dane, które trafiłyby do węzła A trafiaja do D W metadanych wysłanych do D jest, że ten dane były przeznaczone pierwotnie dla A D zapamiętuje to w oddzielnej lokalnej bazie, która co jakiś czas skanuje Gdy D wykryje, że A ożył, wysyła mu te dane Jeśli operacja się powiedzie, D może skasować swoja kopię danych bez zmniejszania liczby replik w systemie

Awarie Wstęp Dzięki temu system jest niepodatny na chwilowe awarie Aplikacje potrzebujace najwyższego poziomu dostępności moga ustawić W = 1 W praktyce ustala się wyższe W, by osiagn ać pożadany poziom trwałości Dynamo jest tak zaprojektowane, by być odporne na awarię całego centrum danych Repliki obiektu sa trzymane w różnych centrach danych Sa one połaczone specjalnymi szybkimi łaczami

Awarie Wstęp Może stać się tak, że repliki ze wskazaniem staja się niedostępne zanim zostały przekazane właściwemu adresatowi Dynamo zawiera protokół synchronizacji replik, używajacy drzew Merkle a

Drzewo Merkle a Wstęp Drzewo haszowe, w którym liście sa haszami poszczególnych kluczy Ojciec to hasz z wartości synów Jeśli wartości korzeni sa niezgodne, to któreś z poddrzew niezgodne Rekurencyjnie znajdujemy wszystkie niezgodne liście Zmniejszaja ilość przesyłanych danych, by wykryć niespójności replik Zmniejszaja ilość odczytów dyskowych podczas procesu antyentropii

Drzewa Merkle a w Dynamo Dynamo używa drzew Merkle a w następujacy sposób: Każdy węzeł trzyma osobne drzewo Merkle a dla każdego przedziału kluczy, za który jest odpowiedzialny Pozwala to łatwiej sprawdzić, czy trzymamy aktualne wersje obiektów Wada rozwiazania jest to, że przedziały kluczy zmieniaja się wraz z przyłaczaniem i odłaczaniem wierzchołków Trzeba wówczas od poczatku wyliczać wartości na drzewie Odpowiedzia na ten problem jest ulepszony schemat partycjonowania, opisany później

Wykrywanie członkostwa Gdy węzeł nie jest dostępny, zazwyczaj oznacza to chwilowa awarię Nie powinno się wówczas odtwarzać replik ani aktualizować podziału pierścienia haszów Z tego powodu właczania i wyłaczania węzłów z pierścienia dokonuje ręcznie administrator

Wykrywanie członkostwa Węzeł z pierścienia, który obsłużył to zdarzenie, zapisuje je wraz z czasem Algorytm plotkujacy rozsyła zmiany w historii członkostwa, co powoduje spójny obraz członkostwa przez wszystkie węzły Każdy węzeł kontaktuje się z losowym innym co sekundę i wymieniaja się wówczas zmianami w historii członkostwa

Wykrywanie członkostwa Kiedy węzeł po raz pierwszy podłacza się do pierścienia, wybiera swój zbiór tokenów, a także mapuje węzły i odpowiadajace im węzły wirtualne Mapa ta jest uzgadniana między węzłami razem z wymiana informacji o historii członkostwa Dlatego każdy węzeł potrafi przekazywać żadania do odpowiedniego zbioru węzłów

Wykrywanie członkostwa - problemy Powyższy mechanizm może powodować czasowy logiczny podział pierścienia Administrator przyłacza wierzchołki A i B do pierścienia. Każdy wie, że w nim jest, ale przez dłuższy czas moga być wzajemnie nieświadomi By temu zapobiec, część węzłów pełni rolę seedów

Wykrywanie członkostwa - problemy Można je poznać przez zewnętrzny mechanizm Znane wszystkim węzłom w pierścieniu Wszystkie węzły uzgadniaja swoje członkostwo z seedami, więc logiczny podział jest wysoce nieprawdopodobny Poza tym seedy sa zwykłymi węzłami w pierścieniu

Wykrywanie awarii Wstęp Nie chcemy wysyłać żadań do niedostępnych węzłów Węzeł A uznaje B za niedostępny jeśli ten nie odpowiedział na jego żadanie Wówczas używa on kolejnych węzłów z listy preferencji, by wykonały żadanie, które miał zrobić B Gdy A uzna B za niedostępny, co pewien czas sprawdza, czy B nie powrócił Węzeł nie przekazuje swojej wiedzy o awariach innym

Dodawanie i usuwanie węzłów Gdy węzeł jest dodawany do systemu, przydziela mu się tokeny rozsiane losowo po całym pierścieniu Dla każdego przedziału kluczy istnieje grupa węzłów odpowiedzialnych za obsługę tego przedziału Któryś z dotychczasowych węzłów nie musi już trzymać informacji o kluczach z tego przedziału Przesyła on cała swoja wiedzę o tym przedziale do nowego węzła, a sam o nim zapomina

Dodawanie i usuwanie węzłów Przy usuwaniu węzła w podobny sposób realokujemy klucze usuwanego węzła Z obserwacji wynika, że klucze rozkładaja się równomiernie między węzłami Jest to ważne ze względu na założenia o opóźnieniach wykonania operacji Dodatkowe potwierdzenie przesłania danych o kluczach wyklucza wielokrotne transfery tych samych danych (a tym samym zmniejszenie liczby replik)

Najważniejsze komponenty Moduł przechowywania danych Moduł koordynacji żadań Moduł wykrywania członkostwa i awarii Wszystko napisane w Javie

Przechowywanie danych Możliwość podłaczenia różnych komponentów do przechowywania danych. W użyciu obecnie sa: Berkeley Database (BDB) Transactional Data Store - używane przez większość instancji produkcyjnych BDB Java Edition MySQL Bufor w pamięci, zapisujacy dane w sposób trwały

Koordynacja żadania Komponent event-driven Cała komunikacja idzie przez Java NIO Rozkład żadań nierównomiernie rozdzielony między obiekty, więc w praktyce na koordynatora to jeden z N pierwszych węzłów listy preferencji Zazwyczas put() następuje zaraz po get(), więc na koordynatora put() wybiera się tego, który jako pierwszy odpowiedział na get(), co zapisuje się w context

Opóźnienia zapisu i odczytu

Typy usług korzystajacych z Dynamo Wyróżniamy trzy główne typy konfiguracji aplikacji korzystajacych z Dynamo: Uzgadniajace wersje obiektów w logice biznesowej Uzgadnianie na poziomie aplikacji klienckiej Uzgadniajace wersje na podstawie timestampu Wykonywane przez Dynamo Ostatni zapis wygrywa Wymagajace bardzo wydajnych odczytów R = 1, W = N Często wykorzystywane przez cięższe bazy danych jako cache Zazwyczaj N = 3

Buforowany zapis Zapisy trzymane sa w lokalnym buforze w pamięci operacyjnej Przy odczycie najpierw sprawdzamy w buforze Co jakiś czas zapisujemy te dane w trwałej formie Powoduje obniżenie opóźnienia dla 99,9% zapisów nawet trzykrotnie w szczycie przy buforze na 1000 obiektów Wpływa na trwałość, gdyż w razie awarii tracimy dane z bufora By ograniczyć to ryzyko, koordynator przy każdym zapisie wyznacza jeden węzeł, który od razu zapisuje trwale

Buforowany zapis

Strategie partycjonowania S - ilość węzłów w systemie 1 T losowych tokenów na węzeł, dzielenie po wartości tokena Ciężko zrobić snapshot przestrzeń kluczy Gdy węzeł ma przekazać innemu jakiś przedział, musi przeszukiwać cała swoja przestrzeń kluczy Przy dodawaniu/usuwaniu węzłów trzeba przeliczać całe drzewa Merkle a 2 T losowych tokenów na węzeł, podział na Q równych części 3 Q/S tokenów na węzeł, podział na Q równych części

Strategie partycjonowania

Strategie partycjonowania

Konflikty wersji Aplikacja kliencka typu 1 (uzgadnianie w warstwie logiki), działała 24h: 99,94% żadań w tym czasie otrzymało dokładnie 1 wersję Konflikty wersji występuja rzadko Konflikty sa generowane głównie przez współbieżny zapis (a nie awarie)

Wybór koordynatora Opóźnienia przy wyborze koordynatora (ms) Odczyt 99,9% Zapis 99,9% Odczyt średni Zapis średni Przez serwer 66,9 68,5 3,9 4,02 Przez klienta 30,4 30,4 1,55 1,9

Koniec Pytania?