Implementacja – przypisanie tabletu

Transkrypt

Implementacja – przypisanie tabletu
Bigtable
Rozproszony system pamięci
Janina Mincer-Daszkiewicz
Systemy rozproszone
MSUI, II rok
Materiały i rysunki zaczerpnięto z
następujących źródeł
Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah
A. Wallach, Mike Burrows, Tushar Chandra, Andrew Fikes, Rebert
E. Gruber, Bigtable: A Distributed Storage System for Structured
Data, firma Google, OSDI 2006
Artykuł:
http://students.mimuw.edu.pl/SR-MSUI/04-bigtable/bigtable-osdi06.pdf
Prezentacja:
http://students.mimuw.edu.pl/SR-MSUI/04-bigtable/bigtable-osdi06slides.pdf
2
Inne źródła
•
Kamil Anikiej, prezentacja na seminarium z Systemów
Rozproszonych
http://students.mimuw.edu.pl/SR/SR-MONO/BigTable.pdf
•
Praca magisterska Tomasza Wekseja, Niezawodność w
rozproszonych systemach bazodanowych
•
Apache Hadoop, HDFS, Hbase
•
Gemius, MooseFS, Gemius Bigtable
3
Wprowadzenie
• Rozproszony system pamięci do przechowywania
danych o zadanej strukturze, które mogą osiągać
bardzo duże rozmiary (petabajty przechowywane
na tysiącach serwerów typu off-the-shelf)
• Cele projektowe: do wielu różnych zastosowań
(Google Earth, Google Finance, web indexing),
skalowalność, wysoka wydajność, wysoka
dostępność
• Przypomina bazę danych, ale nie wspiera w pełni
modelu relacyjnego
4
Model danych
• Bigtable to wielowymiarowy słownik, rzadki,
rozproszony, trwały, posortowany
• Słownik jest indeksowany za pomocą klucza wiersza,
klucza kolumny i stempla czasowego; każda wartość w
słowniku jest nieinterpretowaną tablicą bajtową.
(row: string, column: string, time: int64) Æ string
5
Model danych
• Webtable – przechowuje strony webowe (nazwa wiersza to
odwrócony URL)
• Rodzina kolumn contents przechowuje zawartość strony (trzy
wersje, ze stemplami t3, t5 i t6), anchor – teksty odsyłaczy do
strony (po jednej wersji) z dwóch serwisów (więc dwie rodziny);
inny przykład: language: ID (zawartość to język strony)
6
Model danych
• Webtable
• Klucze wierszy są dowolnymi napisami (do 64 KB)
• Każdy odczyt lub zapis z kluczem pojedynczego wiersza
jest atomowy
• Zakres wierszy w tablicy jest dzielony dynamicznie
• Każdy zakres wierszy nosi nazwę tabletu, jest jednostką
7
rozpraszania i równoważenia obciążenia
Model danych
• Webtable
• Klucze w kolumnach są grupowane w zbiory zwane rodzinami
kolumn, które stanowią podstawową jednostkę kontroli dostępu
• Trzeba utworzyć rodzinę kolumn nim zacznie się zapisywać dane
• Klucz kolumny jest tworzony zgodnie ze składnią:
family: qualifier
• Kontrola dostępu oraz liczenie obciążenia dysku i pamięci są
8
wykonywane na poziomie rodzin kolumn
Model danych
• Webtable
• Każda komórka w Bigtable może zawierać wiele wersji tych
samych danych
• Stemple czasowe (64-bitowe liczby całkowite) są przydzielane
przez Bigtable lub aplikacje klienta
• Wspiera dwa zestawy ustawień na rodzinę kolumn, żeby
automatycznie odśmiecać wersje, ostatnie n wersji lub najnowsze
wersje
9
API - Pisanie
Kod w C++, operacje w ramach Apply są
realizowane atomowo
10
API - Czytanie
Obiekt scanner umożliwia iterację po
wszystkich odsyłaczach w wierszu
11
API - inne
• Wsparcie dla transakcji dotyczących jednego wiersza
(czytanie – aktualizacja – pisanie); aktualnie brak
wsparcia dla transakcji obejmujących wiele wierszy
• Wsparcie dla skryptów dostarczanych przez
użytkownika (pisanych w języku Sawzall)
wykonywanych w przestrzeni adresowej serwera
• Wsparcie dla współpracy z MapReduce – Bigtable może
być używane jako źródło danych wejściowych i jako
miejsce na dane wynikowe
12
Związek Bigtable z innymi usługami
• Bigtable korzysta z GoogleFS do przechowywania
logów i plików z danymi
• Dane Bigtable są przechowywane w google’owym
formacie plików SSTable. SSTable zawiera ciąg bloków
(zwykle wielkości 64 KB) oraz blok indeksowy (za
ostatnim blokiem danych).
• Bigtable korzysta z Chubby (rozproszony zarządca
blokad) m.in. do zapewnienia, że jest tylko jeden
aktywny zarządca, do odszukiwania serwerów tabletów,
do przechowywania schematu danych i list kontroli
dostępu
13
Implementacja
• Bigtable ma trzy główne składowe:
– biblioteka dołączana do każdego klienta
– jeden zarządca
– wiele serwerów tabletów
• Serwery tabletów mogą być dynamicznie dodawane lub usuwane
z klastra
• Zadania zarządcy: przydział tabletów do serwerów,
monitorowanie dostępności serwerów, równoważenie obciążenia,
odśmiecanie plików w GoogleFS
• Zadania serwera tabletów: zarządzanie zbiorem tabletów (od 10
do tysiąca tabletów), obsługa żądań odczytu i zapisu tabletów,
rozbijanie za dużych tabletów na mniejsze (rozmiaru 100 – 200
MB)
• Większość klientów w ogóle nie komunikuje się z zarządcą
tabletów (informację o położeniu tabletów dostarcza Chubby)
14
Implementacja – położenie tabletu
• Trzy-poziomowa hierarchia analogiczna do tej z B+drzew do przechowywania informacji o położeniu
tabletów
15
Implementacja – położenie tabletu 2
• Każdy wiersz tabletu METADATA przechowuje ok. 1
KB danych, przy założeniu, że jego rozmiar to 128
MB, mamy 217 pozycji w bloku indeksowym,czyli
łącznie można zaadresować 234 tabletów, czyli łącznie
234*27*220 bajtów w 128 MB tabletach
• Biblioteka po stronie klienta buforuje położenie
tabletów. Jeśli brak informacji w schowku, to
potrzebne są trzy odczytu po sieci (więcej w sytuacji
niepoprawnych danych). Biblioteka czyta pozycje z
wyprzedzeniem
• W tablicach METADATA są także trzymane logi
zdarzeń dotyczących tabletów
16
Implementacja – przypisanie tabletu
• Każdy tablet jest przypisany w danej chwili do jednego
serwera tabletu, informację o nim przechowuje zarządca
• Serwer tabletu podczas startu pobiera blokadę do
unikatowego pliku w katalogu Chubby’ego; utrata tej
blokady oznacza, że serwer przestał działać. Gdy ten plik
ginie, serwer wyłącza się, dopóki jest, serwer próbuje
odzyskać blokadę
• Zarządca jest odpowiedzialny za wykrywanie sytuacji,
gdy serwer tabletu przestaje działać; cyklicznie odpytuje
serwer o status blokady; jeśli nie może się połączyć lub
dowiaduje się o utracie blokady, to sam próbuje założyć
blokadę i jeśli się uda, to ją usuwa, a tablety z tego
serwera oznacza jako nieprzypisane
17
Implementacja – przypisanie tabletu 2
• Gdy zarządca rozpoczyna pracę, musi rozpoznać bieżące
przypisanie tabletu nim może je zmienić:
– zakłada unikatową blokadę zarządcy
– przegląda katalog z informacją o serwerach
– komunikuje się z żyjącymi serwerami, żeby
odtworzyć listę przypisanych tabletów
– przegląda tabelę METADATA by poznać pełną listę
tabletów i odtworzyć listę tych nieprzypisanych
• Zbiór istniejących tabletów z zmienia się tylko wtedy,
gdy tabela jest tworzona lub usuwana (to inicjuje
zarządca) oraz podczas rozbijania dużego tabletu na
mniejsze (to inicjuje serwer tabletu – podczas commit
informacja trafia do tabeli METADATA, zawiadamiany
jest zarządca)
18
Obsługa tabletu
• Reprezentacja tabletu
19
Obsługa tabletu 2
• Zakomitowane zmiany trafiają do logu (rekordy redo), ostatnie są
przechowywane w buforze w pamięci, starsze w kolejnych plikach
SSTable. Żeby odtworzyć tablet, serwer czyta metadane (listę
plików SSTable i zbiór punktów redo, które są wskaźnikami do
logów zawierających dane); czyta indeksy plików SSTable,
rekonstruuje bufor w pamięci wykonując wszystkie zakomitowane
zmiany od punktów redo
• Operacja zapisu: sprawdzenie uprawnień (Chubby), zapis do logu,
zakomitowany zapis do bufora w pamięci
• Operacja odczytu: sprawdzenie uprawnień (Chubby), wykonanie na
połączonym widoku plików SSTable i bufora w pamięci (tworzenie
widoku jest efektywne, bo oba zbiory są posortowane
leksykograficznie)
20
Scalanie
• Mniejsze scalanie (ang. minor compaction)
• gdy bufor w pamięci przekroczy ustalony rozmiar, jest
konwertowany do formatu SSTable i zapisywany do GoogleFS
• cel: zmniejsza zużycie pamięci, zmniejsza ilość danych, które
trzeba odczytać z logu podczas odtwarzania po awarii
• efekt: powstaje nowy plik SSTable
• Scalanie (ang. merging compaction)
• odczytuje się zawartość kilku plików SSTable oraz bufora z
pamięci i tworzy nowy plik SSTable
• cel: zmniejszenie liczby plików SSTable
• Większe scalanie (ang. major compaction)
• scalanie polegające na tym, że wszystkie SSTablice są
przepisywane do jednej
21
• dane usunięte ostatecznie znikają z systemu
Ulepszenia
•
•
•
•
•
•
•
Grupy lokalności
Kompresja
Buforowanie dla poprawienia wydajności odczytów
Filtry Blooma
Implementacja logu
Przyspieszenie odtwarzania tabletu
Zbadanie odporności na zmiany
22
Wydajność
• Klaster Bigtable z N serwerami tabletów
• Serwery tabletów skonfigurowano do użycia 1 GB pamięci i zapisu
do komórek GoogleFS składających się z 1786 maszyn z 400
dyskami GD IDE
• N maszyn klienckich generowało obciążenie BigTable użyte w tych
testach.
• Każda maszyna ma dwurdzeniowy procesor Opteron 2GH, dość
pamięci do przechowania zbioru roboczego wszystkich
wykonywanych procesów i jedno połączenie Ethernetowe
• Zarządca, serwery tabletów, testowi klienci i serwery GoogleFS
wykonują się na tym samym zbiorze maszyn
• R to liczba kluczy wierszy Bigtable biorących udział w teście
• R dobrano tak, że każdy benchmark odczytywał lub zapisywał
około 1 GB danych z serwera tabletu
23
Wydajność
Rate per tablet server
Aggregate rate
Liczba 1000-bajtowych wartości czytanych/zapisywanych
na sekundę
24
Atrybuty tabel stosowanych w praktyce
25
Wnioski
• Dlaczego zawsze relacyjna baza danych?
• Projekt sprawdził się w praktyce, gdyż Bigtable jest używane
przez wiele produktów Google’a
• Opłaca się czasem zbudować własne rozwiązanie problemu
przechowywania danych
26