Próbuję zrozumieć ZooKeeper, jak to działa i co robi. Czy jest jakaś aplikacja, która jest porównywalna z ZooKeeper?
Jeśli wiesz, to jak opisałbyś ZooKeeper laikowi?
Próbowałem wiki apache, zookeeper sourceforge ... ale nadal nie mogę się z tym powiązać.
Właśnie przeczytałem http://zookeeper.sourceforge.net/index.sf.shtml , więc czy nie ma więcej takich usług? Czy to tak proste, jak replikacja usługi serwera?
apache-zookeeper
distributed-computing
topgun_ivard
źródło
źródło
Odpowiedzi:
Krótko mówiąc, ZooKeeper pomaga budować aplikacje rozproszone.
Jak to działa
Możesz opisać ZooKeeper jako replikowaną usługę synchronizacji z ewentualną spójnością. Jest solidny, ponieważ utrwalone dane są rozdzielane między wiele węzłów (ten zestaw węzłów nazywany jest „zespołem”), a jeden klient łączy się z dowolnym z nich (tj. Konkretnym „serwerem”), migrując, jeśli jeden węzeł ulegnie awarii; tak długo, jak działa zdecydowana większość węzłów, zespół węzłów ZooKeeper żyje. W szczególności węzeł główny jest wybierany dynamicznie w drodze konsensusu w zespole; jeśli węzeł główny ulegnie awarii, jego rola migruje do innego węzła.
Jak obsługiwane są zapisy
Mistrz jest autorytetem do zapisu: w ten sposób można zagwarantować, że zapisy zostaną utrwalone w kolejności, tzn. Zapisy są liniowe . Za każdym razem, gdy klient pisze do zestawu, większość węzłów utrwala informacje: te węzły obejmują serwer dla klienta i oczywiście serwer główny. Oznacza to, że każdy zapis powoduje, że serwer jest na bieżąco z urządzeniem głównym. Oznacza to jednak również, że nie można mieć równoczesnych zapisów.
Gwarancja zapisu liniowego jest przyczyną tego, że ZooKeeper nie działa dobrze w przypadku obciążeń zdominowanych przez zapis. W szczególności nie należy go używać do wymiany dużych danych, takich jak media. Tak długo, jak komunikacja obejmuje udostępnione dane, ZooKeeper pomaga. Kiedy dane mogą być zapisywane jednocześnie, ZooKeeper faktycznie przeszkadza, ponieważ nakłada ścisłe porządkowanie operacji, nawet jeśli nie jest to absolutnie konieczne z punktu widzenia pisarzy. Idealnie nadaje się do koordynacji, w której wiadomości są wymieniane między klientami.
Jak obsługiwane są odczyty
Tutaj wyróżnia się ZooKeeper: odczyty są zbieżne, ponieważ są obsługiwane przez określony serwer, z którym łączy się klient. Jest to jednak również powód ostatecznej spójności: „widok” klienta może być nieaktualny, ponieważ master aktualizuje odpowiedni serwer z ograniczonym, ale niezdefiniowanym opóźnieniem.
Szczegółowo
Replikowana baza danych ZooKeeper zawiera drzewo znodes , które są z grubsza reprezentowane przez węzły systemu plików ( traktuj je jako katalogi). Każdy znode może zostać wzbogacony o tablicę bajtów, która przechowuje dane. Ponadto każdy znode może mieć pod sobą inne znody, praktycznie tworząc wewnętrzny system katalogów.
Sekwencyjne znody
Co ciekawe, nazwa znode może być sekwencyjna , co oznacza, że nazwa, którą klient podaje podczas tworzenia znode, jest tylko przedrostkiem: pełna nazwa jest również nadawana przez kolejny numer wybrany przez zespół. Jest to przydatne na przykład do celów synchronizacji: jeśli wielu klientów chce uzyskać blokadę zasobu, każdy z nich może jednocześnie utworzyć sekwencyjny znode w lokalizacji: ten, kto uzyska najniższą liczbę, jest uprawniony do blokady.
Efemeryczne znody
Znode może być także efemeryczne : oznacza to, że zostanie zniszczone, gdy tylko klient, który go utworzył, rozłączy się. Jest to szczególnie przydatne, aby wiedzieć, kiedy klient zawiedzie, co może być istotne, gdy sam klient ma obowiązki, które powinien wziąć na siebie nowy klient. Biorąc przykład blokady, gdy tylko klient mający blokadę się rozłączy, inni klienci mogą sprawdzić, czy są uprawnieni do blokady.
Zegarki
Przykład związany z rozłączeniem klienta może być problematyczny, jeśli musimy okresowo sprawdzać stan znodes. Na szczęście ZooKeeper oferuje system wydarzeń, w którym można ustawić zegarek na znode. Zegarki te można ustawić tak, aby wyzwalały zdarzenie, jeśli znode zostanie konkretnie zmieniony lub usunięty lub pod nim zostaną utworzone nowe elementy potomne. Jest to wyraźnie przydatne w połączeniu z sekwencyjnymi i efemerycznymi opcjami dla znodów.
Gdzie i jak go używać
Kanonicznym przykładem użycia Zookeepera jest obliczanie pamięci rozproszonej, w którym niektóre dane są współdzielone między węzłami klienta i muszą być dostępne / aktualizowane w bardzo ostrożny sposób, aby uwzględnić synchronizację.
ZooKeeper oferuje bibliotekę do budowy podstawowych operacji synchronizacji, a możliwość uruchomienia serwera rozproszonego pozwala uniknąć problemu pojedynczego punktu awarii, który występuje podczas korzystania ze scentralizowanego repozytorium komunikatów (podobnego do brokera).
ZooKeeper jest lekki, co oznacza, że mechanizmy takie jak wybór lidera, blokady, bariery itp. Nie są już obecne, ale można je zapisać powyżej prymitywów ZooKeeper. Jeśli interfejs API C / Java jest zbyt niewygodny dla twoich celów, powinieneś polegać na bibliotekach zbudowanych na ZooKeeper, takich jak klatki, a zwłaszcza kustosz .
Gdzie przeczytać więcej
Oprócz oficjalnej dokumentacji, która jest całkiem niezła, sugeruję przeczytać rozdział 14 Hadoop: The Definitive Guide, który zawiera ~ 35 stron wyjaśniających w zasadzie to, co robi ZooKeeper, a następnie przykład usługi konfiguracji.
źródło
Zookeeper to jeden z najlepszych serwerów i usług open source, który pomaga niezawodnie koordynować rozproszone procesy. Zookeeper to system CP (patrz twierdzenie CAP), który zapewnia spójność i tolerancję podziału. Replikacja stanu Zookeeper we wszystkich węzłach sprawia, że jest to ostatecznie spójna usługa rozproszona.
Co więcej, każdy nowo wybrany lider zaktualizuje swoich obserwujących o brakujące propozycje lub migawkę stanu, jeśli obserwatorzy nie mają wielu propozycji.
Zookeeper zapewnia również interfejs API, który jest bardzo łatwy w użyciu. Ten post na blogu, przykłady API Java Zookeeper , zawiera kilka przykładów, jeśli szukasz przykładów.
Więc gdzie tego używamy? Jeśli Twoja usługa rozproszona potrzebuje scentralizowanego, niezawodnego i spójnego zarządzania konfiguracją, blokad, kolejek itp., Zookeeper to niezawodny wybór.
źródło
Rozumiem ZooKeeper w ogóle, ale miałem problemy z terminami „kworum” i „podzielony mózg”, więc może mogę podzielić się z tobą swoimi odkryciami (uważam się również za laika).
Załóżmy, że mamy klaster ZooKeeper z 5 serwerami. Jeden z serwerów zostanie liderem, a pozostali będą obserwatorami.
Te 5 serwerów tworzy kworum. Kworum oznacza po prostu „te serwery mogą głosować na tego, kto powinien być liderem”.
Głosowanie opiera się na większości. Większość oznacza po prostu „więcej niż połowę”, więc ponad połowa serwerów musi zgodzić się na to, aby dany serwer został liderem.
Jest więc coś złego, co może się zdarzyć, zwane „podzielonym mózgiem”. O ile rozumiem, podzielony mózg jest po prostu tym: klaster 5 serwerów dzieli się na dwie części, albo nazwijmy to „zespołami serwerów”, z być może jedną częścią 2, a drugą 3 serwerami. To naprawdę zła sytuacja, ponieważ obie „drużyny serwerów” muszą wykonać określone zamówienie. Jak zdecydowałbyś, który zespół powinien być preferowany? Mogli otrzymać inne informacje od klientów. Dlatego naprawdę ważne jest, aby wiedzieć, który „zespół serwerów” jest nadal istotny i który można / należy zignorować.
Większość jest również powodem, dla którego powinieneś używać nieparzystej liczby serwerów. Jeśli masz 4 serwery i podzielony mózg, gdzie 2 serwery są rozdzielone, wówczas oba „zespoły serwerów” mogą powiedzieć „hej, chcemy zdecydować, kto jest liderem!” ale jak zdecydować, które 2 serwery wybrać? Z 5 serwerami to proste: zespół serwerów z 3 serwerami ma większość i może wybrać nowego lidera.
Nawet jeśli masz tylko 3 serwery, a jeden z nich zawiedzie, pozostałe 2 nadal stanowią większość i mogą zgodzić się, że jeden z nich zostanie nowym liderem.
Zdaję sobie sprawę, gdy raz o tym pomyślisz i zrozumiesz warunki, które nie są już tak skomplikowane. Mam nadzieję, że pomoże to również każdemu zrozumieć te warunki.
źródło
Zookeeper to scentralizowany serwer typu open source do utrzymywania i konfigurowania informacji konfiguracyjnych, konwencji nazewnictwa i synchronizacji rozproszonego środowiska klastrowego. Zookeeper pomaga systemom rozproszonym zmniejszyć złożoność zarządzania, zapewniając niskie opóźnienia i wysoką dostępność. Zookeeper był początkowo podprojektem dla Hadoop, ale teraz jest najwyższym niezależnym projektem Apache Software Foundation.
Więcej informacji
źródło
Sugerowałbym następujące zasoby:
Sugerowałbym obejrzenie filmu, przeczytanie artykułu, a następnie ponowne obejrzenie filmu. Łatwiej byłoby to zrozumieć, jeśli znasz Raft wcześniej.
źródło